From 1ddb67388e0781713d20cb37cface2338e91ed3b Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 23 Aug 2023 10:22:35 -0300 Subject: [PATCH 001/186] aid signed fetch --- README.md | 2 +- test/app/signify.test.ts | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 12aa92c2..67362d61 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Project Name: signify-ts [![TypeScript](https://badges.frapsoft.com/typescript/code/typescript.png?v=101)](https://github.com/ellerbrock/typescript-badges/) -[![Tests](https://github.com/WebOfTrust/signify-ts/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/WebOfTrust/signify-ts/actions/workflows/main.yml) +[![Tests](https://github.com/WebOfTrust/signify-ts/actions/workflows/main.yml/badge.svg?branch=development)](https://github.com/WebOfTrust/signify-ts/actions/workflows/main.yml) [![codecov](https://codecov.io/gh/WebOfTrust/signify-ts/branch/main/graph/badge.svg?token=K3GK7MCYVW)](https://codecov.io/gh/WebOfTrust/signify-ts) [![Documentation](https://img.shields.io/badge/documentation-grey?)](https://weboftrust.github.io/signify-ts/) diff --git a/test/app/signify.test.ts b/test/app/signify.test.ts index 69498a95..56a71ba5 100644 --- a/test/app/signify.test.ts +++ b/test/app/signify.test.ts @@ -239,6 +239,15 @@ describe('SignifyClient', () => { assert.deepEqual(lastBody.rot.kt,['1','0']) assert.equal(lastBody.rot.d,'EGFi9pCcRaLK8dPh5S7JP9Em62fBMiR1l4gW1ZazuuAO') + resp = await client.signedFetch('http://example.com','/test','POST',{foo:true},'aid1') + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,'http://example.com/test') + assert.equal(lastCall[1]!.method,'POST') + lastBody = JSON.parse(lastCall[1]!.body!) + assert.deepEqual(lastBody.foo,true) + lastHeaders = new Headers((lastCall[1]!.headers!)) + assert.equal(lastHeaders.get('signify-resource'),'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK') + }) it('Salty identifiers', async () => { From a0a0583395fc164b0a7e7212a1b4b9ce2f262f4c Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 23 Aug 2023 11:54:26 -0300 Subject: [PATCH 002/186] challenges --- src/keri/app/signify.ts | 1 + src/keri/core/eventing.ts | 1 + test/app/signify.test.ts | 87 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index 93bd3fb4..eeb02a28 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -14,6 +14,7 @@ import { Prefixer } from "../core/prefixer" import { Salter } from "../core/salter" import { randomNonce } from "./apping" import { parseRangeHeaders } from "../core/httping" +import { TextDecoder } from "util" const DEFAULT_BOOT_URL = "http://localhost:3903" diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index e219d852..32e61ad8 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -9,6 +9,7 @@ import { Siger } from "./siger"; import { Cigar } from "./cigar"; import { Counter, CtrDex } from "./counter"; import { Seqner } from "./seqner"; +import { TextEncoder } from "util"; let MaxIntThold = 2 ** 32 - 1 diff --git a/test/app/signify.test.ts b/test/app/signify.test.ts index 56a71ba5..acb96038 100644 --- a/test/app/signify.test.ts +++ b/test/app/signify.test.ts @@ -528,6 +528,52 @@ describe('SignifyClient', () => { assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') assert.equal(lastCall[1]!.method,'GET') + const registry = "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX" + const schema = "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao" + const isuee = "EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p" + await credentials.issue('aid1',registry,schema,isuee,{LEI: '1234'},{},{},false) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials') + assert.equal(lastCall[1]!.method,'POST') + assert.equal(lastBody.cred.ri,registry) + assert.equal(lastBody.cred.s,schema) + assert.equal(lastBody.cred.a.i,isuee) + assert.equal(lastBody.cred.a.LEI,'1234') + assert.equal(lastBody.iss.s,"0") + assert.equal(lastBody.iss.t,"iss") + assert.equal(lastBody.iss.ri,registry) + assert.equal(lastBody.iss.i,lastBody.cred.d) + assert.equal(lastBody.ixn.t,"ixn") + assert.equal(lastBody.ixn.i,lastBody.cred.i) + assert.equal(lastBody.ixn.p,lastBody.cred.i) + assert.equal(lastBody.path,'6AABAAA-') + assert.equal(lastBody.csigs[0].substring(0,2),'AA') + assert.equal(lastBody.csigs[0].length,88) + assert.equal(lastBody.sigs[0].substring(0,2),'AA') + assert.equal(lastBody.sigs[0].length,88) + + // const credential = lastBody.cred.i + // await credentials.revoke('aid1',credential) + // lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + // lastBody = JSON.parse(lastCall[1]!.body!.toString()) + // assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/'+credential) + // assert.equal(lastCall[1]!.method,'DELETE') + // console.log(lastBody) + // assert.equal(lastBody.rev.s,"1") + // assert.equal(lastBody.rev.t,"iss") + // assert.equal(lastBody.rev.ri,registry) + // assert.equal(lastBody.rev.i,lastBody.cred.d) + // assert.equal(lastBody.ixn.t,"ixn") + // assert.equal(lastBody.ixn.i,lastBody.cred.i) + // assert.equal(lastBody.ixn.p,lastBody.cred.i) + // assert.equal(lastBody.sigs[0].substring(0,2),'AA') + // assert.equal(lastBody.sigs[0].length,88) + + + + + }) it('Contacts', async () => { @@ -578,5 +624,46 @@ describe('SignifyClient', () => { assert.equal(lastCall[1]!.method,'DELETE') }) + + it('Challenges', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let challenges = client.challenges() + + + await challenges.generate(128) + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/challenges?strength=128') + assert.equal(lastCall[1]!.method,'GET') + + const words = ["shell", "gloom", "mimic", "cereal", "stool", "furnace", "nominee", "nation", "sauce", "sausage", "rather", "venue"] + await challenges.respond("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p",words) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/challenges/aid1') + assert.equal(lastCall[1]!.method,'POST') + let lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.deepEqual(lastBody.words,words) + assert.equal(lastBody.recipient,"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p") + assert.equal(lastBody.exn.r,"/challenge/response") + assert.equal(lastBody.exn.a.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.deepEqual(lastBody.exn.a.words,words) + assert.equal(lastBody.sig.length,144) + + await challenges.accept("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p","EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/challenges/aid1') + assert.equal(lastCall[1]!.method,'PUT') + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastBody.aid,"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p") + assert.equal(lastBody.said,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + + + }) }) \ No newline at end of file From 9dd18c18bc1411abfcb3ddf030fd62573e919945 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 23 Aug 2023 12:59:36 -0300 Subject: [PATCH 003/186] creds --- README.md | 2 +- test/app/signify.test.ts | 65 +++++++++++++++++++++++++++------------- 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 67362d61..12aa92c2 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Project Name: signify-ts [![TypeScript](https://badges.frapsoft.com/typescript/code/typescript.png?v=101)](https://github.com/ellerbrock/typescript-badges/) -[![Tests](https://github.com/WebOfTrust/signify-ts/actions/workflows/main.yml/badge.svg?branch=development)](https://github.com/WebOfTrust/signify-ts/actions/workflows/main.yml) +[![Tests](https://github.com/WebOfTrust/signify-ts/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/WebOfTrust/signify-ts/actions/workflows/main.yml) [![codecov](https://codecov.io/gh/WebOfTrust/signify-ts/branch/main/graph/badge.svg?token=K3GK7MCYVW)](https://codecov.io/gh/WebOfTrust/signify-ts) [![Documentation](https://img.shields.io/badge/documentation-grey?)](https://weboftrust.github.io/signify-ts/) diff --git a/test/app/signify.test.ts b/test/app/signify.test.ts index acb96038..1c0874ff 100644 --- a/test/app/signify.test.ts +++ b/test/app/signify.test.ts @@ -83,6 +83,8 @@ const mockGetAID ={ "windexes": [] } +const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} + fetchMock.mockResponse(req => { if (req.url.startsWith(url+'/agent')) { @@ -97,14 +99,15 @@ fetchMock.mockResponse(req => { headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) headers.set('Content-Type', 'application/json') - const url = new URL(req.url) + const requrl = new URL(req.url) let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) let authn = new Authenticater(signer!,signer!.verfer) - signed_headers = authn.sign(headers, req.method, url.pathname.split('?')[0]) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID - return Promise.resolve({body: JSON.stringify(mockGetAID), init:{ status: 202, headers:signed_headers }}) + return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) } }) @@ -553,26 +556,46 @@ describe('SignifyClient', () => { assert.equal(lastBody.sigs[0].substring(0,2),'AA') assert.equal(lastBody.sigs[0].length,88) - // const credential = lastBody.cred.i - // await credentials.revoke('aid1',credential) - // lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - // lastBody = JSON.parse(lastCall[1]!.body!.toString()) - // assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/'+credential) - // assert.equal(lastCall[1]!.method,'DELETE') - // console.log(lastBody) - // assert.equal(lastBody.rev.s,"1") - // assert.equal(lastBody.rev.t,"iss") - // assert.equal(lastBody.rev.ri,registry) - // assert.equal(lastBody.rev.i,lastBody.cred.d) - // assert.equal(lastBody.ixn.t,"ixn") - // assert.equal(lastBody.ixn.i,lastBody.cred.i) - // assert.equal(lastBody.ixn.p,lastBody.cred.i) - // assert.equal(lastBody.sigs[0].substring(0,2),'AA') - // assert.equal(lastBody.sigs[0].length,88) - - + const credential = lastBody.cred.i + await credentials.revoke('aid1',credential) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/'+credential) + assert.equal(lastCall[1]!.method,'DELETE') + assert.equal(lastBody.rev.s,"1") + assert.equal(lastBody.rev.t,"rev") + assert.equal(lastBody.rev.ri,"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df") + assert.equal(lastBody.rev.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.ixn.t,"ixn") + assert.equal(lastBody.ixn.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.ixn.p,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.sigs[0].substring(0,2),'AA') + assert.equal(lastBody.sigs[0].length,88) + await credentials.present('aid1',credential, "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX",false) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/'+credential+'/presentations') + assert.equal(lastCall[1]!.method,'POST') + assert.equal(lastBody.exn.t,"exn") + assert.equal(lastBody.exn.r,"/presentation") + assert.equal(lastBody.exn.a.n,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.exn.a.s,schema) + assert.equal(lastBody.sig.length,144) + assert.equal(lastBody.recipient,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") + assert.equal(lastBody.include, false) + await credentials.request('aid1', "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX", credential,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/identifiers/aid1/requests') + assert.equal(lastCall[1]!.method,'POST') + assert.equal(lastBody.exn.t,"exn") + assert.equal(lastBody.exn.r,"/presentation/request") + assert.equal(lastBody.exn.a.i,registry) + assert.equal(lastBody.exn.a.s,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.sig.length,144) + assert.equal(lastBody.recipient,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") }) From 97569e7a5cfc4b964db6e16140e1ef40c5806f0a Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 23 Aug 2023 15:22:15 -0300 Subject: [PATCH 004/186] notifications --- src/keri/app/signify.ts | 2 +- test/app/signify.test.ts | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index eeb02a28..f5dee32e 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -1725,7 +1725,7 @@ export class Notifications { */ async list(start:number=0, end:number=24): Promise { let extraHeaders = new Headers() - extraHeaders.append('Range', `aids=${start}-${end}`) + extraHeaders.append('Range', `notes=${start}-${end}`) let path = `/notifications` let method = 'GET' diff --git a/test/app/signify.test.ts b/test/app/signify.test.ts index 1c0874ff..52e978d7 100644 --- a/test/app/signify.test.ts +++ b/test/app/signify.test.ts @@ -686,6 +686,41 @@ describe('SignifyClient', () => { assert.equal(lastBody.aid,"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p") assert.equal(lastBody.said,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + }) + + it('Notifications', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let notifications = client.notifications() + let escrows = client.escrows() + + await notifications.list(20, 40) + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/notifications') + assert.equal(lastCall[1]!.method,'GET') + let lastHeaders = new Headers((lastCall[1]!.headers!)) + assert.equal(lastHeaders.get('Range'),'notes=20-40') + + await notifications.mark("notificationSAID") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/notifications/notificationSAID') + assert.equal(lastCall[1]!.method,'PUT') + + await notifications.delete("notificationSAID") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/notifications/notificationSAID') + assert.equal(lastCall[1]!.method,'DELETE') + + await escrows.listReply('/presentation/request') + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/escrows/rpy?route=%2Fpresentation%2Frequest') + assert.equal(lastCall[1]!.method,'GET') }) From 33ded8e0e0849ca950555336d6b29ef6c1539d7c Mon Sep 17 00:00:00 2001 From: Kevin Griffin Date: Thu, 24 Aug 2023 07:53:56 -0400 Subject: [PATCH 005/186] update config --- .github/workflows/main.yml | 2 +- .github/workflows/update-documentation.yml | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e62de9b4..4f18e30a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: CI +name: Run Tests on: push: branches: diff --git a/.github/workflows/update-documentation.yml b/.github/workflows/update-documentation.yml index 2edf1941..49a49634 100644 --- a/.github/workflows/update-documentation.yml +++ b/.github/workflows/update-documentation.yml @@ -1,4 +1,4 @@ -name: CI +name: Publish Documentation on: push: branches: @@ -21,17 +21,16 @@ jobs: - name: build run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git checkout docs npm cache clean --force npm set registry https://registry.npmjs.org/ npm i npx typedoc src/index.ts + git add . + git commit -a -m "Update documentation" - - name: Commit files - run: | - git config --local user.email "github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" - git add . - git commit -a -m "Update documentation" - name: Push changes uses: ad-m/github-push-action@master with: From 20f9a77d23206a67e010c421a6c5ff2fa44afe2a Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Mon, 28 Aug 2023 17:41:38 -0400 Subject: [PATCH 006/186] adding messages endpoint --- src/keri/app/signify.ts | 57 ++++++++++++++++++++++++++++++++++++++++ test/app/signify.test.ts | 21 ++++++++++++++- 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index f5dee32e..87c290a9 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -420,6 +420,14 @@ export class SignifyClient { escrows(): Escrows { return new Escrows(this) } + + /** + * Get messages resource + * @returns {Messages} + * */ + messages(): Messages { + return new Messages(this) + } } /** Arguments required to create an identfier */ @@ -1801,3 +1809,52 @@ export class Escrows { return await res.json() } } + + +/** + * Messages + */ + +export class Messages { + client: SignifyClient + + /** + * Messages + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * List messages + * @async + * @param {string} [sender] sender prefix to filter messages + * @param {string} [recipient] recipient prefix to filter messages + * @param {number} [start=0] Start index of list of messages, defaults to 0 + * @param {number} [end=9] End index of list of messages, defaults to 9 + */ + async list(sender?:string, recipient?:string, start:number=0, end:number=9): Promise { + let extraHeaders = new Headers() + extraHeaders.append('Range', `messages=${start}-${end}`) + let params = new URLSearchParams() + //check sender and recipient are send otherwise return error + if (sender !== undefined) {params.append('sender', sender)} + if (recipient !== undefined) {params.append('recipient', recipient)} + + + let path = `/messages` + let method = 'GET' + let res = await this.client.fetch(path, method, null, extraHeaders) + let cr = res.headers.get('content-range') + let range = parseRangeHeaders(cr,"messages") + let msgs = await res.json() + + return { + start: range.start, + end: range.end, + total: range.total, + messages: msgs + } + } +} \ No newline at end of file diff --git a/test/app/signify.test.ts b/test/app/signify.test.ts index 52e978d7..8e4547a5 100644 --- a/test/app/signify.test.ts +++ b/test/app/signify.test.ts @@ -723,5 +723,24 @@ describe('SignifyClient', () => { assert.equal(lastCall[1]!.method,'GET') }) - + + it('Messages', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url,bran,Tier.low,boot_url) + + await client.boot() + await client.connect() + + let messages = client.messages() + + await messages.list('ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose','EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1',0, 10) + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/messages?sender=ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose&recipient=EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1') + assert.equal(lastCall[1]!.method,'GET') + + let lastHeaders = new Headers((lastCall[1]!.headers!)) + assert.equal(lastHeaders.get('Range'),'messages=0-10') + }) }) \ No newline at end of file From fe7d73864a142e3ff2d986228966bb6e3cc8ac1d Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Mon, 28 Aug 2023 18:33:23 -0400 Subject: [PATCH 007/186] make sender and recipient mandatory --- src/keri/app/signify.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index 87c290a9..fc15e18f 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -1834,7 +1834,7 @@ export class Messages { * @param {number} [start=0] Start index of list of messages, defaults to 0 * @param {number} [end=9] End index of list of messages, defaults to 9 */ - async list(sender?:string, recipient?:string, start:number=0, end:number=9): Promise { + async list(sender:string, recipient:string, start:number=0, end:number=9): Promise { let extraHeaders = new Headers() extraHeaders.append('Range', `messages=${start}-${end}`) let params = new URLSearchParams() @@ -1843,7 +1843,7 @@ export class Messages { if (recipient !== undefined) {params.append('recipient', recipient)} - let path = `/messages` + let path = `/messages`+ '?' + params.toString() let method = 'GET' let res = await this.client.fetch(path, method, null, extraHeaders) let cr = res.headers.get('content-range') From 4c9bfe1c4a23b144ba915ad12e2bb3337c4bc6f5 Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Tue, 29 Aug 2023 12:33:46 -0500 Subject: [PATCH 008/186] Revert "Feat/messages" --- src/keri/app/signify.ts | 57 ---------------------------------------- test/app/signify.test.ts | 21 +-------------- 2 files changed, 1 insertion(+), 77 deletions(-) diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index fc15e18f..f5dee32e 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -420,14 +420,6 @@ export class SignifyClient { escrows(): Escrows { return new Escrows(this) } - - /** - * Get messages resource - * @returns {Messages} - * */ - messages(): Messages { - return new Messages(this) - } } /** Arguments required to create an identfier */ @@ -1809,52 +1801,3 @@ export class Escrows { return await res.json() } } - - -/** - * Messages - */ - -export class Messages { - client: SignifyClient - - /** - * Messages - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * List messages - * @async - * @param {string} [sender] sender prefix to filter messages - * @param {string} [recipient] recipient prefix to filter messages - * @param {number} [start=0] Start index of list of messages, defaults to 0 - * @param {number} [end=9] End index of list of messages, defaults to 9 - */ - async list(sender:string, recipient:string, start:number=0, end:number=9): Promise { - let extraHeaders = new Headers() - extraHeaders.append('Range', `messages=${start}-${end}`) - let params = new URLSearchParams() - //check sender and recipient are send otherwise return error - if (sender !== undefined) {params.append('sender', sender)} - if (recipient !== undefined) {params.append('recipient', recipient)} - - - let path = `/messages`+ '?' + params.toString() - let method = 'GET' - let res = await this.client.fetch(path, method, null, extraHeaders) - let cr = res.headers.get('content-range') - let range = parseRangeHeaders(cr,"messages") - let msgs = await res.json() - - return { - start: range.start, - end: range.end, - total: range.total, - messages: msgs - } - } -} \ No newline at end of file diff --git a/test/app/signify.test.ts b/test/app/signify.test.ts index 8e4547a5..52e978d7 100644 --- a/test/app/signify.test.ts +++ b/test/app/signify.test.ts @@ -723,24 +723,5 @@ describe('SignifyClient', () => { assert.equal(lastCall[1]!.method,'GET') }) - - it('Messages', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url,bran,Tier.low,boot_url) - - await client.boot() - await client.connect() - - let messages = client.messages() - - await messages.list('ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose','EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1',0, 10) - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/messages?sender=ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose&recipient=EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1') - assert.equal(lastCall[1]!.method,'GET') - - let lastHeaders = new Headers((lastCall[1]!.headers!)) - assert.equal(lastHeaders.get('Range'),'messages=0-10') - }) + }) \ No newline at end of file From 7de13845863dc7507d95c96953f2650244ff8567 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Mon, 4 Sep 2023 13:58:14 -0700 Subject: [PATCH 009/186] Addition of Bexter for CESR encoding of variable length data and Pather for SAD Path language encoding. Exchanging for creating EXN with support for embedded events. New client classes, Exchanges and Groups for performing group operations. --- examples/scripts/client.ts | 23 ++- examples/scripts/create_multisig_aid.py | 40 ++-- examples/scripts/create_person_aid.py | 2 +- examples/scripts/get.py | 27 +++ examples/scripts/list_notifications.py | 85 ++++++++ examples/scripts/list_notifications.ts | 101 ++++++++++ examples/scripts/package-lock.json | 63 ++++++ examples/scripts/package.json | 4 +- src/index.ts | 1 + src/keri/app/exchanging.ts | 84 ++++++++ src/keri/app/signify.ts | 247 +++++++++++++++++++++--- src/keri/core/bexter.ts | 133 +++++++++++++ src/keri/core/matter.ts | 103 ++++++++-- src/keri/core/pather.ts | 91 +++++++++ test/core/bexter.test.ts | 115 +++++++++++ test/core/exchanging.test.ts | 109 +++++++++++ test/core/pather.test.ts | 46 +++++ test/core/signer.test.ts | 6 +- 18 files changed, 1219 insertions(+), 61 deletions(-) create mode 100644 examples/scripts/get.py create mode 100644 examples/scripts/list_notifications.py create mode 100644 examples/scripts/list_notifications.ts create mode 100644 src/keri/app/exchanging.ts create mode 100644 src/keri/core/bexter.ts create mode 100644 src/keri/core/pather.ts create mode 100644 test/core/bexter.test.ts create mode 100644 test/core/exchanging.test.ts create mode 100644 test/core/pather.test.ts diff --git a/examples/scripts/client.ts b/examples/scripts/client.ts index 0230571f..fc6e1716 100644 --- a/examples/scripts/client.ts +++ b/examples/scripts/client.ts @@ -46,9 +46,11 @@ async function connect() { let identifiers = client.identifiers() const oobis = client.oobis() const operations = client.operations() + const exchanges = client.exchanges() let salt = 'abcdefghijk0123456789' - let op = await identifiers.create("multisig-ts", {bran: salt}) + let res = identifiers.create("multisig-ts", {bran: salt}) + let op = await res.op() let aid = op["response"] await identifiers.addEndRole("multisig-ts", "agent", d.agent.i) @@ -93,7 +95,7 @@ async function connect() { let sigTs = aid['state'] let states = [sigPy, kli, sigTs] - identifiers.create("multisig", { + let ires = identifiers.create("multisig", { algo: "group", mhab: aid, delpre: "EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7", toad: 2, @@ -106,5 +108,22 @@ async function connect() { states: states, rstates: states }) + + let serder = ires.serder + let sigs = ires.sigs + let sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + let ims = signify.d(signify.messagize(serder, sigers)) + let atc = ims.substring(serder.size) + let embeds = { + icp: [serder, atc], + } + + let smids = states.map((state) => state['i']) + let recp = [sigPy, kli].map((state) => state['i']) + + await exchanges.send("multisig-ts", "multisig", aid, "/multisig/icp", + {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) + } diff --git a/examples/scripts/create_multisig_aid.py b/examples/scripts/create_multisig_aid.py index 4760509d..c3b1e0db 100644 --- a/examples/scripts/create_multisig_aid.py +++ b/examples/scripts/create_multisig_aid.py @@ -9,7 +9,9 @@ from time import sleep from keri.app.keeping import Algos +from keri.core import eventing, coring from keri.core.coring import Tiers +from keri.peer import exchanging from signify.app.clienting import SignifyClient @@ -23,6 +25,7 @@ def create_multisig_aid(): identifiers = client.identifiers() operations = client.operations() states = client.keyStates() + exchanges = client.exchanges() aid = identifiers.get("multisig-sigpy") sigPy = aid["state"] @@ -37,17 +40,32 @@ def create_multisig_aid(): for state in states: print(json.dumps(state, indent=2)) - op = identifiers.create("multisig", algo=Algos.group, mhab=aid, - delpre="EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7", - toad=2, - wits=[ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" - ], - isith=["1/3", "1/3", "1/3"], nsith=["1/3", "1/3", "1/3"], - states=states, - rstates=rstates) + icp, isigs, op = identifiers.create("multisig", algo=Algos.group, mhab=aid, + delpre="EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7", + toad=2, + wits=[ + "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", + "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", + "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" + ], + isith=["1/3", "1/3", "1/3"], nsith=["1/3", "1/3", "1/3"], + states=states, + rstates=rstates) + + smids = ["EBcIURLpxmVwahksgrsGW6_dUw0zBhyEHYFk17eWrZfk", + "EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ", + "ELViLL4JCh-oktYca-pmPLwkmUaeYjyPmCLxELAKZW8V"] + recp = ["EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ", + "ELViLL4JCh-oktYca-pmPLwkmUaeYjyPmCLxELAKZW8V"] + + embeds = dict( + icp=eventing.messagize(serder=icp, sigers=[coring.Siger(qb64=sig) for sig in isigs]) + ) + + exchanges.send("multisig-sigpy", "multisig", sender=aid, route="/multisig/icp", + payload=dict(gid=icp.pre, smids=smids, rmids=smids), + embeds=embeds, recipients=recp) + print("waiting on multisig creation...") while not op["done"]: op = operations.get(op["name"]) diff --git a/examples/scripts/create_person_aid.py b/examples/scripts/create_person_aid.py index 6ed77a0f..3ee70636 100644 --- a/examples/scripts/create_person_aid.py +++ b/examples/scripts/create_person_aid.py @@ -33,7 +33,7 @@ def create_aid(): "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" ] - op = identifiers.create("multisig-sigpy", bran="0123456789abcdefghijk", wits=wits, toad="2") + _, _, op = identifiers.create("multisig-sigpy", bran="0123456789abcdefghijk", wits=wits, toad="2") while not op["done"]: op = operations.get(op["name"]) diff --git a/examples/scripts/get.py b/examples/scripts/get.py new file mode 100644 index 00000000..17e03e55 --- /dev/null +++ b/examples/scripts/get.py @@ -0,0 +1,27 @@ +# -*- encoding: utf-8 -*- +""" +SIGNIFY +signify.app.clienting module + +Testing clienting with integration tests that require a running KERIA Cloud Agent +""" +from pprint import pprint + +from keri.core.coring import Tiers +from signify.app.clienting import SignifyClient + + +def get(): + url = "http://localhost:3901" + bran = b'9876543210abcdefghijk' + tier = Tiers.low + + client = SignifyClient(passcode=bran, tier=tier, url=url) + + identifiers = client.identifiers() + + aid = identifiers.get("multisig") + pprint(aid) + +if __name__ == "__main__": + get() diff --git a/examples/scripts/list_notifications.py b/examples/scripts/list_notifications.py new file mode 100644 index 00000000..2d59db10 --- /dev/null +++ b/examples/scripts/list_notifications.py @@ -0,0 +1,85 @@ +# -*- encoding: utf-8 -*- +""" +SIGNIFY +signify.app.clienting module + +Testing clienting with integration tests that require a running KERIA Cloud Agent +""" +import json +from pprint import pprint + +from keri.core import coring +from keri.core.coring import Tiers +from keri.core.eventing import messagize, SealEvent +from keri.peer import exchanging +from signify.app.clienting import SignifyClient + + +def list_notifications(): + url = "http://localhost:3901" + bran = b'9876543210abcdefghijk' + tier = Tiers.low + + client = SignifyClient(passcode=bran, tier=tier, url=url) + identifiers = client.identifiers() + notificatons = client.notifications() + groups = client.groups() + registries = client.registries() + + res = notificatons.list() + + for note in res["notes"]: + body = note['a'] + route = body['r'] + match route.split("/"): + case ["", "multisig", "icp"]: + pass + # print(body) + # print(f"Recv: inception request for multisig AID=BLAH") + case ["", "multisig", "vcp"]: + said = body['d'] + res = groups.get_request(said=said) + msg = next(exn for exn in res if exn['exn']['d'] == said) + + sender = msg['sender'] + group = msg["groupName"] + + exn = msg['exn'] + usage = exn['a']["usage"] + print(f"Credential registry inception request for group AID {group}:") + print(f"\tReceived from: {sender}") + print(f"\tPurpose: \"{usage}\"") + yes = input("Approve [Y|n]? ") + + if yes in ('', 'y', 'Y'): + registryName = input("Enter new local name for registry: ") + embeds = exn['e'] + vcp = embeds['vcp'] + ixn = embeds['ixn'] + serder = coring.Serder(ked=ixn) + ghab = identifiers.get(group) + + keeper = client.manager.get(aid=ghab) + sigs = keeper.sign(ser=serder.raw) + + ims = messagize(serder=serder, sigers=[coring.Siger(qb64=sig) for sig in sigs]) + embeds = dict( + vcp=coring.Serder(ked=vcp).raw, + ixn=ims + ) + + sender = ghab["group"]["mhab"] + keeper = client.manager.get(aid=sender) + exn, end = exchanging.exchange(route="/multisig/vcp", + payload={'gid': ghab["prefix"], 'usage': "test"}, + sender=sender["prefix"], embeds=embeds) + + esigs = keeper.sign(ser=exn.raw) + groups.send_request(group, exn.ked, esigs, end) + + return registries.create_from_events(name=group, hab=ghab, registryName=registryName, vcp=vcp, + ixn=ixn, sigs=sigs) + + +if __name__ == "__main__": + list_notifications() diff --git a/examples/scripts/list_notifications.ts b/examples/scripts/list_notifications.ts new file mode 100644 index 00000000..2ae3d241 --- /dev/null +++ b/examples/scripts/list_notifications.ts @@ -0,0 +1,101 @@ + +const prmpt = require("prompt-sync")({ sigint: true }); +// @ts-ignore +let signify: any; + +// @ts-ignore +import('signify-ts').then( + (module) => { + signify = module + signify.ready().then(() => { + console.log("Signify client ready!"); + list_notifications().then(() => { + console.log("Done") + }); + }); + } +) + +async function list_notifications() { + let url = "http://127.0.0.1:3901" + let bran = '0123456789abcdefghijk' + + const client = new signify.SignifyClient(url, bran); + await client.connect() + let d = await client.state() + console.log("Connected: ") + console.log(" Agent: ", d.agent.i, " Controller: ", d.controller.state.i) + + let identifiers = client.identifiers() + let notifications = client.notifications() + let groups = client.groups() + let registries = client.registries() + + let res = await notifications.list() + let notes = res.notes + + for (const note of notes) { + let payload = note.a + let route = payload.r + + if (route === '/multisig/vcp') { + let res = await groups.getRequest(payload.d) + if (res.length == 0) { + console.log("error extracting exns matching nre for " + payload.data) + } + let msg = res[0] + + let sender = msg['sender'] + let group = msg["groupName"] + + let exn = msg['exn'] + let usage = exn['a']["usage"] + console.log("Credential registry inception request for group AID :" + group) + console.log("\tReceived from: " + sender) + console.log("\tPurpose: " + usage) + console.log("\nAuto-creating new registry...") + let yes = prmpt("Approve [Y|n]? ") + if (yes === "y" || yes === "Y" || yes === "") { + try { + let registryName = prmpt("Enter new local name for registry: ") + let embeds = exn['e'] + let vcp = embeds['vcp'] + let ixn = embeds['ixn'] + let serder = new signify.Serder(ixn) + let ghab = await identifiers.get(group) + + let keeper = client.manager.get(ghab) + let sigs = keeper.sign(signify.b(serder.raw)) + let sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + let ims = signify.d(signify.messagize(serder, sigers)) + let atc = ims.substring(serder.size) + embeds = { + vcp: [new signify.Serder(vcp), undefined], + ixn: [serder, atc] + } + + sender = ghab["group"]["mhab"] + keeper = client.manager.get(sender) + let [nexn, end] = signify.exchange("/multisig/vcp", + {'gid': ghab["prefix"], 'usage': "test"}, + sender["prefix"], undefined, undefined, undefined, undefined, embeds) + + console.log(nexn.pretty()) + let esigs = keeper.sign(nexn.raw) + await groups.sendRequest(group, nexn.ked, esigs, signify.d(end)) + + return await registries.createFromEvents(ghab, group, registryName, vcp, ixn, sigs) + } catch(e: any) { + console.log(e) + } + } + + + + } + + } + +} + diff --git a/examples/scripts/package-lock.json b/examples/scripts/package-lock.json index 40a97808..1b73dd02 100644 --- a/examples/scripts/package-lock.json +++ b/examples/scripts/package-lock.json @@ -8,6 +8,7 @@ "name": "signify-scripts-ts", "version": "0.0.0", "dependencies": { + "prompt-sync": "^4.2.0", "signify-ts": "file:../../" }, "devDependencies": { @@ -28,6 +29,7 @@ "buffer": "^6.0.3", "cbor": "^8.0.0", "collections": "^5.1.12", + "jest-fetch-mock": "^3.0.3", "libsodium-wrappers-sumo": "^0.7.9", "lodash": "^4.17.21", "mathjs": "^11.8.2", @@ -36,9 +38,11 @@ "text-encoding": "^0.7.0", "ts-node": "^10.9.1", "urlsafe-base64": "^1.0.0", + "whatwg-fetch": "^3.6.17", "xregexp": "^5.1.0" }, "devDependencies": { + "@mermaid-js/mermaid-cli": "^10.3.0", "@size-limit/preset-small-lib": "^5.0.4", "@types/lodash": "^4.14.185", "@types/node": "^18.11.18", @@ -46,10 +50,13 @@ "@types/urlsafe-base64": "^1.0.28", "husky": "^7.0.2", "jest": "^29.3.1", + "jsdoc": "^4.0.2", + "minami": "^1.2.3", "size-limit": "^5.0.4", "ts-migrate": "^0.1.23", "tsdx": "^0.14.1", "tslib": "^2.3.1", + "typedoc": "^0.24.8", "typescript": "^4.9.4" } }, @@ -1360,6 +1367,33 @@ "node": ">= 0.8.0" } }, + "node_modules/prompt-sync": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", + "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", + "dependencies": { + "strip-ansi": "^5.0.0" + } + }, + "node_modules/prompt-sync/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompt-sync/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -2591,6 +2625,29 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prompt-sync": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", + "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", + "requires": { + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -2660,6 +2717,7 @@ "signify-ts": { "version": "file:../..", "requires": { + "@mermaid-js/mermaid-cli": "^10.3.0", "@size-limit/preset-small-lib": "^5.0.4", "@types/libsodium-wrappers-sumo": "^0.7.5", "@types/lodash": "^4.14.185", @@ -2672,9 +2730,12 @@ "collections": "^5.1.12", "husky": "^7.0.2", "jest": "^29.3.1", + "jest-fetch-mock": "^3.0.3", + "jsdoc": "^4.0.2", "libsodium-wrappers-sumo": "^0.7.9", "lodash": "^4.17.21", "mathjs": "^11.8.2", + "minami": "^1.2.3", "msgpack5": "^5.3.2", "size-limit": "^5.0.4", "structured-headers": "^0.5.0", @@ -2683,8 +2744,10 @@ "ts-node": "^10.9.1", "tsdx": "^0.14.1", "tslib": "^2.3.1", + "typedoc": "^0.24.8", "typescript": "^4.9.4", "urlsafe-base64": "^1.0.0", + "whatwg-fetch": "^3.6.17", "xregexp": "^5.1.0" } }, diff --git a/examples/scripts/package.json b/examples/scripts/package.json index 5d00e0e2..726a60f1 100644 --- a/examples/scripts/package.json +++ b/examples/scripts/package.json @@ -2,9 +2,9 @@ "name": "signify-scripts-ts", "private": true, "version": "0.0.0", - "scripts": { - }, + "scripts": {}, "dependencies": { + "prompt-sync": "^4.2.0", "signify-ts": "file:../../" }, "devDependencies": { diff --git a/src/index.ts b/src/index.ts index 62919ac7..6306d2ca 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,6 +18,7 @@ export * from './keri/app/signify' export * from './keri/app/apping' export * from './keri/app/controller' export * from './keri/app/habery' +export * from './keri/app/exchanging' export * from './keri/app/signify' export * from './keri/core/authing' diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts new file mode 100644 index 00000000..89ec6e67 --- /dev/null +++ b/src/keri/app/exchanging.ts @@ -0,0 +1,84 @@ +import {b, Dict, Ident, Ilks, Serials, versify} from "../core/core"; +import {Serder} from "../core/serder"; +import {nowUTC} from "../core/utils"; +import {Pather} from "../core/pather"; +import {Counter, CtrDex} from "../core/counter"; +import {Saider} from "../core/saider"; + + +export function exchange(route: string, + payload: Dict, + sender: string, + recipient?: string, + date?: string, + dig?: string, + modifiers?: Dict, + embeds?: Dict): [Serder, Uint8Array] { + + + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) + const ilk = Ilks.exn + const dt = date !== undefined ? date : nowUTC().toISOString() + const p = dig !== undefined ? dig : "" + const q = modifiers !== undefined ? modifiers : {} + const ems = embeds != undefined ? embeds : {} + + let e = {} as Dict + let end = "" + Object.entries(ems) + .forEach(([key, value]) => { + let serder = value[0]; + let atc = value[1] + e[key] = serder.ked + + if (atc == undefined) { + return + } + let pathed = "" + let pather = new Pather({}, undefined, ["e", key]) + pathed += pather.qb64 + pathed += atc + + let counter = new Counter({ + code: CtrDex.PathedMaterialQuadlets, + count: Math.floor(pathed.length / 4) + }) + end += counter.qb64 + end += pathed + }) + + if (Object.keys(e).length > 0) { + e["d"] = ""; + [, e] = Saider.saidify(e) + } + + const attrs = {} as Dict + + if (recipient !== undefined) { + attrs['i'] = recipient + } + + let a = { + ...attrs, + ...payload + } + + let _ked = { + v: vs, + t: ilk, + d: "", + i: sender, + p: p, + dt: dt, + r: route, + q: q, + a: a, + e: e + } + let [, ked] = Saider.saidify(_ked) + + let exn = new Serder(ked) + + return [exn, b(end)] + +} \ No newline at end of file diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index f5dee32e..9421c4fc 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -1,20 +1,20 @@ -import { Controller, Agent } from "./controller" -import { Tier } from "../core/salter" -import { Authenticater } from "../core/authing" -import { KeyManager } from "../core/keeping" -import { Algos } from '../core/manager' -import { incept, rotate, interact, reply, messagize } from "../core/eventing" -import { b, Serials, Versionage, Ilks, versify, Ident} from "../core/core" -import { Tholder } from "../core/tholder" -import { MtrDex } from "../core/matter" -import { Saider } from "../core/saider" -import { Serder } from "../core/serder" -import { Siger } from "../core/siger" -import { Prefixer } from "../core/prefixer" -import { Salter } from "../core/salter" -import { randomNonce } from "./apping" -import { parseRangeHeaders } from "../core/httping" -import { TextDecoder } from "util" +import {Agent, Controller} from "./controller" +import {Salter, Tier} from "../core/salter" +import {Authenticater} from "../core/authing" +import {KeyManager} from "../core/keeping" +import {Algos} from '../core/manager' +import {incept, interact, messagize, reply, rotate} from "../core/eventing" +import {b, d, Dict, Ident, Ilks, Serials, versify, Versionage} from "../core/core" +import {Tholder} from "../core/tholder" +import {MtrDex} from "../core/matter" +import {Saider} from "../core/saider" +import {Serder} from "../core/serder" +import {Siger} from "../core/siger" +import {Prefixer} from "../core/prefixer" +import {randomNonce} from "./apping" +import {parseRangeHeaders} from "../core/httping" +import {TextDecoder} from "util" +import {exchange} from "./exchanging"; const DEFAULT_BOOT_URL = "http://localhost:3903" @@ -420,6 +420,22 @@ export class SignifyClient { escrows(): Escrows { return new Escrows(this) } + + /** + * Get groups resource + * @returns {Groups} + */ + groups(): Groups { + return new Groups(this) + } + + /** + * Get groups resource + * @returns {Exchanges} + */ + exchanges(): Exchanges { + return new Exchanges(this) + } } /** Arguments required to create an identfier */ @@ -463,6 +479,31 @@ export interface RotateIdentifierArgs { rstates?: any[] } +export class InceptionResult { + private readonly _serder: Serder + private readonly _sigs: string[] + private readonly promise: Promise + + constructor(serder: Serder, sigs: string[], promise: Promise) { + this._serder = serder + this._sigs = sigs + this.promise = promise + } + + get serder() { + return this._serder + } + + get sigs() { + return this._sigs + } + + async op(): Promise { + let res = await this.promise + return await res.json() + } +} + /** Identifier */ export class Identifier { public client: SignifyClient @@ -523,7 +564,7 @@ export class Identifier { * @param {CreateIdentiferArgs} [kargs] Optional parameters to create the identifier * @returns {Promise} A promise to the long-running operation */ - async create(name: string, kargs:CreateIdentiferArgs={}): Promise { + create(name: string, kargs:CreateIdentiferArgs={}): InceptionResult { const algo = kargs.algo == undefined ? Algos.salty : kargs.algo @@ -577,8 +618,9 @@ export class Identifier { let keeper = this.client.manager!.new(algo, this.client.pidx, xargs) let [keys, ndigs] = keeper!.incept(transferable) wits = wits !== undefined ? wits : [] + let serder: Serder|undefined = undefined if (delpre == undefined) { - var serder = incept({ + serder = incept({ keys: keys!, isith: isith, ndigs: ndigs, @@ -594,7 +636,7 @@ export class Identifier { }) } else { - var serder = incept({ + serder = incept({ keys: keys!, isith: isith, ndigs: ndigs, @@ -620,11 +662,11 @@ export class Identifier { smids: states != undefined ? states.map(state => state.i) : undefined, rmids: rstates != undefined ? rstates.map(state => state.i) : undefined } - jsondata[algo] = keeper.params(), + jsondata[algo] = keeper.params() this.client.pidx = this.client.pidx + 1 - let res = await this.client.fetch("/identifiers", "POST", jsondata) - return await res.json() + let res = this.client.fetch("/identifiers", "POST", jsondata) + return new InceptionResult(serder, sigs, res) } /** @@ -1406,7 +1448,7 @@ export class Registries { let hab = await this.client.identifiers().get(name) let pre: string = hab.prefix - nonce = nonce !== undefined? nonce : randomNonce() + nonce = nonce !== undefined ? nonce : randomNonce() const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) let vcp = { @@ -1430,12 +1472,11 @@ export class Registries { let sigs = [] let state = hab.state + let estOnly = false if (state.c !== undefined && state.c.includes("EO")) { - var estOnly = true - } - else { - var estOnly = false + estOnly = true } + if (estOnly) { // TODO implement rotation event throw new Error("establishment only not implemented") @@ -1445,26 +1486,37 @@ export class Registries { let sn = Number(state.s) let dig = state.d - let data:any = [{ + let data: any = [{ i: prefixer.qb64, s: "0", d: prefixer.qb64 }] - let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) + let serder = interact({pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined}) let keeper = this.client!.manager!.get(hab) sigs = keeper.sign(b(serder.raw)) ixn = serder.ked } + return await this.createFromEvents(hab, name, registryName, vcp, ixn, sigs) + } + + async createFromEvents(hab: Dict, name: string, registryName: string, vcp: Dict, ixn: Dict, sigs: any[]) { + let path = `/identifiers/${name}/registries` let method = 'POST' - let data = { + + let data: any = { name: registryName, vcp: vcp, ixn: ixn!, sigs: sigs } + let keeper = this.client!.manager!.get(hab) + data[keeper.algo] = keeper.params() + + console.log(data) + let res = await this.client.fetch(path, method, data) return await res.json() } @@ -1801,3 +1853,136 @@ export class Escrows { return await res.json() } } + +/** + * Groups + */ +export class Groups { + client: SignifyClient + + /** + * Groups + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * Get group request messages + * @async + * @param {string} [said] SAID of exn message to load + * @returns {Promise} A promise to the list of replay messages + */ + async getRequest(said:string): Promise { + + let path = `/multisig/request/` + said + let method = 'GET' + let res = await this.client.fetch(path, method, null) + return await res.json() + } + + /** + * Send multisig exn request messages to other group members + * @async + * @param {string} [name] human readable name of group AID + * @param {Dict} [exn] exn message to send to other members + * @param {string[]} [sigs] signature of the participant over the exn + * @param {string} [atc] additional attachments from embedded events in exn + * @returns {Promise} A promise to the list of replay messages + */ + async sendRequest(name: string, exn:Dict, sigs: string[], atc: string): Promise { + + let path = `/identifiers/${name}/multisig/request` + let method = 'POST' + let data = { + exn: exn, + sigs: sigs, + atc: atc + } + let res = await this.client.fetch(path, method, data) + return await res.json() + } +} + + +/** + * Exchanges + */ +export class Exchanges { + client: SignifyClient + + /** + * Exchanges + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * Send exn messaget to list of recipients + * @async + * @returns {Promise} A promise to the list of replay messages + * @param sender + * @param route + * @param payload + * @param embeds + */ + createExchangeMessage(sender: Dict, route:string, payload: Dict, embeds: Dict): [Serder, string[], string]{ + let keeper = this.client.manager!.get(sender) + let [exn, end] = exchange(route, + payload, + sender["prefix"], undefined, undefined, undefined, undefined, embeds) + + let sigs = keeper.sign(b(exn.raw)) + return [exn, sigs, d(end)] + } + + /** + * Send exn messaget to list of recipients + * @async + * @returns {Promise} A promise to the list of replay messages + * @param name + * @param topic + * @param sender + * @param route + * @param payload + * @param embeds + * @param recipients + */ + async send(name:string, topic: string, sender: Dict, route:string, payload: Dict, embeds: Dict, + recipients: string[]): Promise { + + let [exn, sigs, atc] = this.createExchangeMessage(sender, route, payload, embeds) + return await this.sendFromEvents(name, topic, exn, sigs, atc, recipients) + + } + + /** + * Send exn messaget to list of recipients + * @async + * @returns {Promise} A promise to the list of replay messages + * @param name + * @param topic + * @param exn + * @param sigs + * @param atc + * @param recipients + */ + async sendFromEvents(name:string, topic: string, exn:Serder, sigs: string[], atc: string, recipients: string[]): Promise { + + let path = `/identifiers/${name}/exchanges` + let method = 'POST' + let data: any = { + tpc: topic, + exn: exn.ked, + sigs: sigs, + atc: atc, + rec: recipients + } + + let res = await this.client.fetch(path, method, data) + return await res.json() + } +} diff --git a/src/keri/core/bexter.ts b/src/keri/core/bexter.ts new file mode 100644 index 00000000..db015faf --- /dev/null +++ b/src/keri/core/bexter.ts @@ -0,0 +1,133 @@ +import {BexDex, Matter, MatterArgs, MtrDex} from "./matter"; +import {EmptyMaterialError} from "./kering"; +import Base64 from "urlsafe-base64"; + +const B64REX = "^[A-Za-z0-9\\-_]*$" +export const Reb64 = new RegExp(B64REX) + + +/* + + Bexter is subclass of Matter, cryptographic material, for variable length + strings that only contain Base64 URL safe characters, i.e. Base64 text (bext). + When created using the 'bext' paramaeter, the encoded matter in qb64 format + in the text domain is more compact than would be the case if the string were + passed in as raw bytes. The text is used as is to form the value part of the + qb64 version not including the leader. + + Due to ambiguity that arises from pre-padding bext whose length is a multiple of + three with one or more 'A' chars. Any bext that starts with an 'A' and whose length + is either a multiple of 3 or 4 may not round trip. Bext with a leading 'A' + whose length is a multiple of four may have the leading 'A' stripped when + round tripping. + + Bexter(bext='ABBB').bext == 'BBB' + Bexter(bext='BBB').bext == 'BBB' + Bexter(bext='ABBB').qb64 == '4AABABBB' == Bexter(bext='BBB').qb64 + + To avoid this problem, only use for applications of base 64 strings that + never start with 'A' + + Examples: base64 text strings: + + bext = "" + qb64 = '4AAA' + + bext = "-" + qb64 = '6AABAAA-' + + bext = "-A" + qb64 = '5AABAA-A' + + bext = "-A-" + qb64 = '4AABA-A-' + + bext = "-A-B" + qb64 = '4AAB-A-B' + + + Example uses: + CESR encoded paths for nested SADs and SAIDs + CESR encoded fractionally weighted threshold expressions + + + Attributes: + + Inherited Properties: (See Matter) + .pad is int number of pad chars given raw + + .code is str derivation code to indicate cypher suite + .raw is bytes crypto material only without code + .index is int count of attached crypto material by context (receipts) + .qb64 is str in Base64 fully qualified with derivation code + crypto mat + .qb64b is bytes in Base64 fully qualified with derivation code + crypto mat + .qb2 is bytes in binary with derivation code + crypto material + .transferable is Boolean, True when transferable derivation code False otherwise + + Properties: + .text is the Base64 text value, .qb64 with text code and leader removed. + + Hidden: + ._pad is method to compute .pad property + ._code is str value for .code property + ._raw is bytes value for .raw property + ._index is int value for .index property + ._infil is method to compute fully qualified Base64 from .raw and .code + ._exfil is method to extract .code and .raw from fully qualified Base64 + + Methods: + + + + + */ + +export class Bexter extends Matter { + constructor({raw, code = MtrDex.StrB64_L0, qb64b, qb64, qb2}: MatterArgs, bext?: string) { + if (raw === undefined && qb64b === undefined && qb64 === undefined && qb2 === undefined) { + if (bext === undefined) + throw new EmptyMaterialError("Missing bext string.") + + let match = Reb64.exec(bext) + if (!match) + throw new Error("Invalid Base64.") + + raw = Bexter._rawify(bext) + } + + super({raw, code, qb64b, qb64, qb2}); + + if (!BexDex.has(this.code)) + throw new Error(`Invalid code = ${this.code} for Bexter.`) + } + + static _rawify(bext: string): Uint8Array { + let ts = bext.length % 4 // bext size mod 4 + let ws = (4 - ts) % 4 // pre conv wad size in chars + let ls = (3 - ts) % 3 // post conv lead size in bytes + let wad = new Array(ws) + wad.fill('A') + let base = wad.join('') + bext // pre pad with wad of zeros in Base64 == 'A' + let raw = Base64.decode(base) // [ls:] // convert and remove leader + + return Uint8Array.from(raw).subarray(ls) // raw binary equivalent of text + + } + + get bext(): string { + let sizage = Matter.Sizes.get(this.code) + let wad = Uint8Array.from(new Array(sizage?.ls).fill(0)) + let bext = Base64.encode(Buffer.from([...wad, ...this.raw])) + + let ws = 0 + if (sizage?.ls === 0 && bext !== undefined) { + if (bext[0] === 'A') { + ws = 1 + } + } else { + ws = (sizage?.ls! + 1) % 4 + } + + return bext.substring(ws) + } +} \ No newline at end of file diff --git a/src/keri/core/matter.ts b/src/keri/core/matter.ts index 30f24e0b..052addd7 100644 --- a/src/keri/core/matter.ts +++ b/src/keri/core/matter.ts @@ -23,6 +23,12 @@ export class MatterCodex extends Codex { X25519_Cipher_Salt: string = '1AAH' // X25519 100 char b64 Cipher of 24 char qb64 Salt Salt_128: string = '0A' // 128 bit random salt or 128 bit number (see Huge) Ed25519_Sig: string = '0B' // Ed25519 signature. + StrB64_L0: string = '4A' //String Base64 Only Lead Size 0 + StrB64_L1: string = '5A' //String Base64 Only Lead Size 1 + StrB64_L2: string = '6A' //String Base64 Only Lead Size 2 + StrB64_Big_L0: string = '7AAA' //String Base64 Only Big Lead Size 0 + StrB64_Big_L1: string = '8AAA' //String Base64 Only Big Lead Size 1 + StrB64_Big_L2: string = '9AAA' //String Base64 Only Big Lead Size 2 } export const MtrDex = new MatterCodex() @@ -71,6 +77,22 @@ export class BexCodex extends Codex { export const BexDex = new BexCodex() +class SmallVarRawSizeCodex extends Codex { + Lead0: string = '4' // First Selector Character for all ls == 0 codes + Lead1: string = '5' // First Selector Character for all ls == 1 codes + Lead2: string = '6' // First Selector Character for all ls == 2 codes +} + +export const SmallVrzDex = new SmallVarRawSizeCodex() + +class LargeVarRawSizeCodex extends Codex { + Lead0_Big: string = '7' // First Selector Character for all ls == 0 codes + Lead1_Big: string = '8' // First Selector Character for all ls == 1 codes + Lead2_Big: string = '9' // First Selector Character for all ls == 2 codes +} + +export const LargeVrzDex = new LargeVarRawSizeCodex() + export class Sizage { public hs: number; public ss: number; @@ -81,7 +103,7 @@ export class Sizage { this.hs = hs; this.ss = ss; this.fs = fs; - this.ls = ls; + this.ls = ls!; } } @@ -91,6 +113,7 @@ export interface MatterArgs { qb64b?: Uint8Array | undefined qb64?: string qb2?: Uint8Array | undefined + rize?: number } export class Matter { @@ -160,7 +183,7 @@ export class Matter { private _size: number = -1; private _raw: Uint8Array = new Uint8Array(0); - constructor({raw, code = MtrDex.Ed25519N, qb64b, qb64, qb2}: MatterArgs) { + constructor({raw, code = MtrDex.Ed25519N, qb64b, qb64, qb2, rize}: MatterArgs) { let size = -1 if (raw != undefined) { @@ -168,13 +191,47 @@ export class Matter { throw new Error("Improper initialization need either (raw and code) or qb64b or qb64 or qb2.") } - // Add support for variable size codes here if needed, this code only works for stable size codes - let sizage = Matter.Sizes.get(code) - if (sizage!.fs == -1) { // invalid - throw new Error(`Unsupported variable size code=${code}`) - } - let rize = Matter._rawSize(code) + if (SmallVrzDex.has(code[0]) || LargeVrzDex.has(code[0])) { + if (rize !== undefined) { + if (rize < 0) + throw new Error(`missing var raw size for code=${code}`) + } else { + rize = raw.length + } + + let ls = (3 - (rize % 3)) % 3 // calc actual lead (pad) size + size = Math.floor((rize + ls) / 3) // calculate value of size in triplets + if (SmallVrzDex.has(code[0])) { + if (size <= (64 ** 2 - 1)) { + let hs = 2 + let s = Object.values(SmallVrzDex)[ls] + code = `${s}${code.substring(1, hs)}` + } else if (size <= (64 ** 4 - 1)) { + let hs = 4 + let s = Object.values(LargeVrzDex)[ls] + code = `${s}${'AAAA'.substring(0, hs - 2)}${code[1]}` + } else { + throw new Error(`Unsupported raw size for code=${code}`) + } + } else { + if (size <= (64 ** 4 - 1)) { + let hs= 4 + let s = Object.values(LargeVrzDex)[ls] + code = `${s}${code.substring(1, hs)}` + } else { + throw new Error(`Unsupported raw size for code=${code}`) + } + } + } else { + let sizage = Matter.Sizes.get(code) + if (sizage!.fs == -1) { // invalid + throw new Error(`Unsupported variable size code=${code}`) + } + + rize = Matter._rawSize(code) + + } raw = raw.slice(0, rize) // copy only exact size from raw stream if (raw.length != rize) { // forbids shorter throw new Error(`Not enougth raw bytes for code=${code} expected ${rize} got ${raw.length}.`) @@ -242,19 +299,43 @@ export class Matter { get both() { let sizage = Matter.Sizes.get(this.code); - return `${this.code}${intToB64(this.size, sizage!.ls)}` + return `${this.code}${intToB64(this.size, sizage!.ss)}` } private _infil() { let code = this.code; + let size = this.size let raw = this.raw; let ps = ((3 - (raw.length % 3)) % 3); // pad size chars or lead size bytes let sizage = Matter.Sizes.get(code); - if (sizage!.fs === -1) { // Variable size code, NOT SUPPORTED - throw new Error("Variable sized codes not supported... yet"); + if (sizage!.fs === undefined) { // Variable size code, NOT SUPPORTED + let cs = sizage!.hs + sizage!.ss + if (cs % 4) { + throw new Error(`Whole code size not multiple of 4 for variable length material. cs=${cs}`) + } + if (size < 0 || size > (64 ** sizage!.ss - 1)) { + throw new Error(`Invalid size=${size} for code=${code}.`) + } + + let both = `${code}${intToB64(size, sizage!.ss)}` + if (both.length % 4 !== ps - sizage!.ls!) { + throw new Error(`Invalid code=${both} for converted raw pad size=${ps}.`) + } + + let bytes = new Uint8Array(sizage!.ls! + raw.length) + for (let i = 0; i < sizage!.ls!; i++) { + bytes[i] = 0; + } + for (let i = 0; i < raw.length; i++) { + let odx = i + ps + bytes[odx] = raw[i]; + } + + return both + Base64.encode(Buffer.from(bytes)) + } else { let both = code let cs = both.length diff --git a/src/keri/core/pather.ts b/src/keri/core/pather.ts new file mode 100644 index 00000000..fd7c21b2 --- /dev/null +++ b/src/keri/core/pather.ts @@ -0,0 +1,91 @@ + +import {Bexter, Reb64} from "./bexter"; +import {MatterArgs, MtrDex} from "./matter"; +import {EmptyMaterialError} from "./kering"; + +/* + Pather is a subclass of Bexter that provides SAD Path language specific functionality + for variable length strings that only contain Base64 URL safe characters. Pather allows + the specification of SAD Paths as a list of field components which will be converted to the + Base64 URL safe character representation. + + Additionally, Pather provides .rawify for extracting and serializing the content targeted by + .path for a SAD, represented as an instance of Serder. Pather enforces Base64 URL character + safety by leveraging the fact that SADs must have static field ordering. Any field label can + be replaced by its field ordinal to allow for path specification and traversal for any field + labels that contain non-Base64 URL safe characters. + + + Examples: strings: + path = [] + text = "-" + qb64 = '6AABAAA-' + + path = ["A"] + text = "-A" + qb64 = '5AABAA-A' + + path = ["A", "B"] + text = "-A-B" + qb64 = '4AAB-A-B' + + path = ["A", 1, "B", 3] + text = "-A-1-B-3" + qb64 = '4AAC-A-1-B-3' + + */ + +export class Pather extends Bexter { + constructor({raw, code = MtrDex.StrB64_L0, qb64b, qb64, qb2}: MatterArgs, bext?: string, path?: string[]) { + if (raw === undefined && bext === undefined && qb64b === undefined && qb64 === undefined && qb2 === undefined) { + if (path === undefined) + throw new EmptyMaterialError("Missing bext string.") + + bext = Pather._bextify(path) + } + + super({raw, code, qb64b, qb64, qb2}, bext); + + } + + // TODO: implement SAD access methods like resolve, root, strip, startswith and tail + + get path(): string[] { + if (!this.bext.startsWith("-")) { + throw new Error("invalid SAD ptr") + } + + let path = this.bext + while(path.charAt(0) === '-') + { + path = path.substring(1); + } + + let apath = path.split("-") + if (apath[0] !== '') { + return apath + } else { + return [] + } + } + + static _bextify(path: any[]): string { + let vath = [] + for (const p of path) { + let sp = "" + if (typeof(p) === "number") { + sp = p.toString() + } else { + sp = p + } + + let match = Reb64.exec(sp) + if (!match) { + throw new Error(`"Non Base64 path component = ${p}.`) + } + + vath.push(sp) + } + return "-" + vath.join("-") + } +} \ No newline at end of file diff --git a/test/core/bexter.test.ts b/test/core/bexter.test.ts new file mode 100644 index 00000000..90130030 --- /dev/null +++ b/test/core/bexter.test.ts @@ -0,0 +1,115 @@ +import {strict as assert} from "assert"; +import {Bexter} from "../../src/keri/core/bexter"; +import {b, MtrDex} from "../../src"; + + +describe("Bexter", () => { + it("should bext-ify stuff (and back again)", () => { + assert.throws(() => { + new Bexter({}) + }) + + let bext = "@!" + assert.throws(() => { + new Bexter({}, bext) + }) + + bext = "" + let bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L0) + assert.equal(bexter.both, '4AAA') + assert.deepStrictEqual(bexter.raw, b('')) + assert.equal(bexter.qb64, '4AAA') + assert.equal(bexter.bext, bext) + + bext = "-" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L2) + assert.equal(bexter.both, '6AAB') + assert.deepStrictEqual(bexter.raw, b('>')) + assert.equal(bexter.qb64, '6AABAAA-') + assert.equal(bexter.bext, bext) + + bext = "-A" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L1) + assert.equal(bexter.both, '5AAB') + assert.deepStrictEqual(bexter.raw, Uint8Array.from([15, 128])) + assert.equal(bexter.qb64, '5AABAA-A') + assert.equal(bexter.bext, bext) + + bext = "-A-" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L0) + assert.equal(bexter.both, '4AAB') + assert.deepStrictEqual(bexter.raw, Uint8Array.from([3, 224, 62])) + assert.equal(bexter.qb64, '4AABA-A-') + assert.equal(bexter.bext, bext) + + bext = "-A-B" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L0) + assert.equal(bexter.both, '4AAB') + assert.deepStrictEqual(bexter.raw, Uint8Array.from([248, 15, 129])) + assert.equal(bexter.qb64, '4AAB-A-B') + assert.equal(bexter.bext, bext) + + bext = "A" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L2) + assert.equal(bexter.both, '6AAB') + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0])) + assert.equal(bexter.qb64, '6AABAAAA') + assert.equal(bexter.bext, bext) + + bext = "AA" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L1) + assert.equal(bexter.both, '5AAB') + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0])) + assert.equal(bexter.qb64, '5AABAAAA') + assert.equal(bexter.bext, bext) + + bext = "AAA" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L0) + assert.equal(bexter.both, '4AAB') + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0, 0])) + assert.equal(bexter.qb64, '4AABAAAA') + assert.equal(bexter.bext, bext) + + bext = "AAAA" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L0) + assert.equal(bexter.both, '4AAB') + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0, 0])) + assert.equal(bexter.qb64, '4AABAAAA') + assert.equal(bexter.bext, "AAA") + assert.notEqual(bexter.bext, bext) + + bext = "ABB" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L0) + assert.equal(bexter.both, '4AAB') + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0, 65])) + assert.equal(bexter.qb64, '4AABAABB') + assert.equal(bexter.bext, bext) + + bext = "BBB" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L0) + assert.equal(bexter.both, '4AAB') + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 16, 65])) + assert.equal(bexter.qb64, '4AABABBB') + assert.equal(bexter.bext, bext) + + bext = "ABBB" + bexter = new Bexter({}, bext) + assert.equal(bexter.code, MtrDex.StrB64_L0) + assert.equal(bexter.both, '4AAB') + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 16, 65])) + assert.equal(bexter.qb64, '4AABABBB') + assert.equal(bexter.bext, 'BBB') + assert.notEqual(bexter.bext, bext) + }) +}) \ No newline at end of file diff --git a/test/core/exchanging.test.ts b/test/core/exchanging.test.ts new file mode 100644 index 00000000..f2f75f41 --- /dev/null +++ b/test/core/exchanging.test.ts @@ -0,0 +1,109 @@ +import {strict as assert} from "assert"; +import {b, d, Dict, Diger, exchange, Ilks, MtrDex, Salter, Serder, Tier} from "../../src"; +import libsodium from "libsodium-wrappers-sumo"; + + +describe("exchange", () => { + it("should create an exchange message with no transposed attachments", async () => { + await libsodium.ready + let dt = "2023-08-30T17:22:54.183Z" + + let [exn, end] = exchange("/multisig/vcp", {}, "test", undefined, dt) + assert.deepStrictEqual(exn.ked, { + "a": {}, "d": "EMhxioc6Ud9b3JZ4X9o79uytSRIXXNDUf27ruwiOmNdQ", "dt": "2023-08-30T17:22:54.183Z", "e": {}, + "i": "test", + "p": "", "q": {}, "r": "/multisig/vcp", "t": "exn", "v": "KERI10JSON0000b1_" + } + ) + assert.deepStrictEqual(end, new Uint8Array()) + + let sith = 1 + let nsith = 1 + let sn = 0 + let toad = 0 + + let raw = new Uint8Array([5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, 117]) + let salter = new Salter({raw: raw}) + let skp0 = salter.signer(MtrDex.Ed25519_Seed, true, "A", Tier.low, true) + let keys = [skp0.verfer.qb64] + + let skp1 = salter.signer(MtrDex.Ed25519_Seed, true, "N", Tier.low, true) + let ndiger = new Diger({}, skp1.verfer.qb64b) + let nxt = [ndiger.qb64] + assert.deepStrictEqual(nxt, ['EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj']) + + let ked0 = { + v: "KERI10JSON000000_", + t: Ilks.icp, + d: "", + i: "", + s: sn.toString(16), + kt: sith.toString(16), + k: keys, + nt: nsith.toString(16), + n: nxt, + bt: toad.toString(16), + b: [], + c: [], + a: [], + } as Dict + + let serder = new Serder(ked0) + let siger = skp0.sign(b(serder.raw), 0) + assert.equal(siger.qb64, "AAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI") + + let ked1 = { + v: "KERI10JSON000000_", + t: Ilks.vcp, + d: "", + i: "", + s: "0", + bt: toad.toString(16), + b: [] + } as Dict + let vcp = new Serder(ked1) + + + let embeds = { + icp: [serder.ked, siger.qb64], + vcp: [vcp.ked, undefined] + } as Dict + + [exn, end] = exchange("/multisig/vcp", {}, "test", undefined, dt, undefined, undefined, embeds) + + assert.deepStrictEqual(exn.ked, { + "a": {}, + "d": "EHDEXQx-i0KlQ8iVnITMLa144dAb7Kjq2KDTufDUyLcm", + "dt": "2023-08-30T17:22:54.183Z", + "e": { + "d": "EDPWpKtMoPwro_Of8TQzpNMGdtmfyWzqTcRKQ01fGFRi", + "icp": { + "a": [], + "b": [], + "bt": "0", + "c": [], + "d": "", + "i": "", + "k": ["DAUDqkmn-hqlQKD8W-FAEa5JUvJC2I9yarEem-AAEg3e"], + "kt": "1", + "n": ["EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj"], + "nt": "1", + "s": "0", + "t": "icp", + "v": "KERI10JSON0000d3_" + }, + "vcp": {"b": [], "bt": "0", "d": "", "i": "", "s": "0", "t": "vcp", "v": "KERI10JSON000049_"} + }, + "i": "test", + "p": "", + "q": {}, + "r": "/multisig/vcp", + "t": "exn", + "v": "KERI10JSON00020d_" + }) + assert.equal(d(end), "-LAD5AACAA-e-icpAAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJE" + + "C1IOpEGkEnjZfxxIleoI") + + + }) +}) \ No newline at end of file diff --git a/test/core/pather.test.ts b/test/core/pather.test.ts new file mode 100644 index 00000000..5cc927dc --- /dev/null +++ b/test/core/pather.test.ts @@ -0,0 +1,46 @@ +import {strict as assert} from "assert"; +import {Pather} from "../../src/keri/core/pather"; +import {b} from "../../src"; + + +describe("Pather", () => { + it("should path-ify stuff (and back again)", () => { + assert.throws(() => { + new Pather({}) + }) + + let path: string[] = [] + let pather = new Pather({}, undefined, path) + assert.equal(pather.bext, "-") + assert.equal(pather.qb64, "6AABAAA-") + assert.deepStrictEqual(pather.raw, b('>')) + assert.deepStrictEqual(pather.path, path) + + path = ["a", "b", "c"] + pather = new Pather({}, undefined, path) + assert.equal(pather.bext, "-a-b-c") + assert.equal(pather.qb64, "5AACAA-a-b-c") + assert.deepStrictEqual(pather.raw, new Uint8Array( [15, 154, 249, 191, 156])) + assert.deepStrictEqual(pather.path, path) + + path = ["0", "1", "2"] + pather = new Pather({}, undefined, path) + assert.equal(pather.bext, "-0-1-2") + assert.equal(pather.qb64, "5AACAA-0-1-2") + assert.deepStrictEqual(pather.raw, new Uint8Array( [15, 180, 251, 95, 182])) + assert.deepStrictEqual(pather.path, path) + + path = ["field0", "1", "0"] + pather = new Pather({}, undefined, path) + assert.equal(pather.bext, "-field0-1-0") + assert.equal(pather.qb64, "4AADA-field0-1-0") + assert.deepStrictEqual(pather.raw, new Uint8Array( [3, 231, 226, 122, 87, 116, 251, 95, 180])) + assert.deepStrictEqual(pather.path, path) + + path = ["Not$Base64", "@moreso", "*again"] + assert.throws(() => { + new Pather({}, undefined, path) + }) + + }) +}) \ No newline at end of file diff --git a/test/core/signer.test.ts b/test/core/signer.test.ts index e1255940..a38b98dc 100644 --- a/test/core/signer.test.ts +++ b/test/core/signer.test.ts @@ -1,9 +1,9 @@ import {strict as assert} from "assert"; import libsodium from "libsodium-wrappers-sumo"; -import { Signer } from '../../src/keri/core/signer'; -import {Matter, MtrDex} from "../../src/keri/core/matter"; -import {b} from "../../src/keri/core/core"; +import { Signer } from '../../src'; +import {Matter, MtrDex} from "../../src"; +import {b} from "../../src"; describe('Signer', () => { it('should sign things', async () => { From 7e1d3fb91664aef2eb29539ac07061769b1c3788 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Mon, 4 Sep 2023 14:24:35 -0700 Subject: [PATCH 010/186] Updated tests --- test/core/exchanging.test.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/core/exchanging.test.ts b/test/core/exchanging.test.ts index f2f75f41..e454720f 100644 --- a/test/core/exchanging.test.ts +++ b/test/core/exchanging.test.ts @@ -65,8 +65,8 @@ describe("exchange", () => { let embeds = { - icp: [serder.ked, siger.qb64], - vcp: [vcp.ked, undefined] + icp: [serder, siger.qb64], + vcp: [vcp, undefined] } as Dict [exn, end] = exchange("/multisig/vcp", {}, "test", undefined, dt, undefined, undefined, embeds) @@ -101,8 +101,7 @@ describe("exchange", () => { "t": "exn", "v": "KERI10JSON00020d_" }) - assert.equal(d(end), "-LAD5AACAA-e-icpAAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJE" + - "C1IOpEGkEnjZfxxIleoI") + assert.equal(d(end), "-LAZ5AACAA-e-icpAAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI") }) From 39a91d8a8581144d19fa7ddce1bb58cdf08fa83b Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Tue, 5 Sep 2023 10:28:26 -0300 Subject: [PATCH 011/186] salty --- examples/integration-scripts/salty.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/integration-scripts/salty.ts b/examples/integration-scripts/salty.ts index 35291b49..4e1082cd 100644 --- a/examples/integration-scripts/salty.ts +++ b/examples/integration-scripts/salty.ts @@ -27,7 +27,8 @@ async function run() { const state1 = await client1.state() console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - let op = await client1.identifiers().create('aid1', {bran: '0123456789abcdefghijk'}) + let icpResult = client1.identifiers().create('aid1', {bran: '0123456789abcdefghijk'}) + let op = await icpResult.op() assert.equal(op['done'], true) const aid1 = op['response'] const icp = new signify.Serder(aid1) @@ -47,7 +48,8 @@ async function run() { assert.equal(salt.stem, 'signify:aid') assert.equal(aid.prefix, icp.pre) - op = await client1.identifiers().create('aid2', {count:3, ncount:3, isith:"2", nsith:"2", bran:"0123456789lmnopqrstuv"}) + icpResult = client1.identifiers().create('aid2', {count:3, ncount:3, isith:"2", nsith:"2", bran:"0123456789lmnopqrstuv"}) + op = await icpResult.op() assert.equal(op['done'], true) const aid2 = op['response'] const icp2 = new signify.Serder(aid2) From 95365730a8adc651d8214f3b9069038affc30244 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Tue, 5 Sep 2023 12:17:22 -0300 Subject: [PATCH 012/186] randy --- examples/integration-scripts/randy.ts | 3 ++- src/keri/app/signify.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/integration-scripts/randy.ts b/examples/integration-scripts/randy.ts index bb5a20ac..0ed53017 100644 --- a/examples/integration-scripts/randy.ts +++ b/examples/integration-scripts/randy.ts @@ -27,7 +27,8 @@ async function run() { const state1 = await client1.state() console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - let op = await client1.identifiers().create('aid1', {algo: signify.Algos.randy}) + let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.randy}) + let op = await icpResult.op() assert.equal(op['done'], true) let aid = op['response'] const icp = new signify.Serder(aid) diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index 9421c4fc..0eb2db1c 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -562,7 +562,7 @@ export class Identifier { * @async * @param {string} name Name or alias of the identifier * @param {CreateIdentiferArgs} [kargs] Optional parameters to create the identifier - * @returns {Promise} A promise to the long-running operation + * @returns {InceptionResult} The inception result */ create(name: string, kargs:CreateIdentiferArgs={}): InceptionResult { From aafa9d21e5bfff573bd3da406f3afb233a9bb54b Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Tue, 5 Sep 2023 12:18:58 -0300 Subject: [PATCH 013/186] witness --- examples/integration-scripts/witness.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/integration-scripts/witness.ts b/examples/integration-scripts/witness.ts index 5889be22..c91dfeec 100644 --- a/examples/integration-scripts/witness.ts +++ b/examples/integration-scripts/witness.ts @@ -39,10 +39,11 @@ async function run() { console.log("Witness OOBI resolved") // Client 1 creates AID with 1 witness - op1 = await client1.identifiers().create('aid1',{ + let icpResult1 = await client1.identifiers().create('aid1',{ toad: 1, wits: ["BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha"] }) + op1 = await icpResult1.op() while (!op1["done"] ) { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); From b23b3aaa7d09693f9ee6c29cd18cdefdfad18178 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Tue, 5 Sep 2023 12:21:44 -0300 Subject: [PATCH 014/186] delegation --- examples/integration-scripts/delegation.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/integration-scripts/delegation.ts b/examples/integration-scripts/delegation.ts index d9921ccf..8563fde1 100644 --- a/examples/integration-scripts/delegation.ts +++ b/examples/integration-scripts/delegation.ts @@ -34,13 +34,14 @@ async function run() { console.log("Client 2 connected. Client AID:",state2.controller.state.i,"Agent AID: ", state2.agent.i) // Client 1 create delegator AID - let op1 = await client1.identifiers().create('delegator',{ + let icpResult1 = await client1.identifiers().create('delegator',{ toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] }) + let op1 = await icpResult1.op() while (!op1["done"] ) { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); @@ -60,7 +61,8 @@ async function run() { console.log("OOBI resolved") // Client 2 creates delegate AID - op2 = await client2.identifiers().create('delegate',{delpre: aid1.prefix}) + let icpResult2 = await client2.identifiers().create('delegate',{delpre: aid1.prefix}) + op2 = await icpResult2.op() let delegatePrefix = op2.name.split(".")[1] console.log("Delegate's prefix:", delegatePrefix) console.log("Delegate waiting for approval...") From 85032ee81ebfe078168ca612aa2e3658b478d805 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 6 Sep 2023 11:39:21 -0300 Subject: [PATCH 015/186] multisig --- examples/integration-scripts/credentials.ts | 60 +++++++++++++------- examples/integration-scripts/multisig.ts | 63 +++++++++++++++++++-- src/keri/app/signify.ts | 4 +- 3 files changed, 97 insertions(+), 30 deletions(-) diff --git a/examples/integration-scripts/credentials.ts b/examples/integration-scripts/credentials.ts index fe067de5..772aea7f 100644 --- a/examples/integration-scripts/credentials.ts +++ b/examples/integration-scripts/credentials.ts @@ -41,13 +41,14 @@ async function run() { // Create two identifiers, one for each client - let op1 = await client1.identifiers().create('issuer', { + let icpResult1 = client1.identifiers().create('issuer', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] }) + let op1 = await icpResult1.op() while (!op1["done"] ) { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); @@ -56,13 +57,14 @@ async function run() { await client1.identifiers().addEndRole("issuer", 'agent', client1!.agent!.pre) console.log("Issuer's AID:", aid1.prefix) - let op2 = await client2.identifiers().create('recipient', { + let icpResult2 = await client2.identifiers().create('recipient', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] }) + let op2 = await icpResult2.op() while (!op2["done"] ) { op2 = await client2.operations().get(op2.name); await new Promise(resolve => setTimeout(resolve, 1000)); @@ -71,13 +73,14 @@ async function run() { await client2.identifiers().addEndRole("recipient", 'agent', client2!.agent!.pre) console.log("Recipient's AID:", aid2.prefix) - let op3 = await client3.identifiers().create('verifier', { + let icpResult3 = await client3.identifiers().create('verifier', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] }) + let op3 = await icpResult3.op() while (!op3["done"] ) { op3 = await client3.operations().get(op3.name); await new Promise(resolve => setTimeout(resolve, 1000)); @@ -179,11 +182,25 @@ async function run() { console.log("Credential issued") // Recipient check issued credential - let creds2 = await client2.credentials().list('recipient') - assert.equal(creds2.length, 1) - assert.equal(creds2[0].sad.s, schemaSAID) - assert.equal(creds2[0].sad.i, aid1.prefix) - assert.equal(creds2[0].status.s, "0") // 0 = issued + let credentialReceived = false + while (!credentialReceived) { + let notifications = await client2.notifications().list() + for (let notif of notifications.notes){ + if (notif.a.r == '/exn//credential/issue') { + credentialReceived = true + await client2.notifications().mark(notif.i) + } + } + await new Promise(resolve => setTimeout(resolve, 1000)); + } + + // Credetials are no longer accepted by default + // pending implementation in KERI to accept them + // let creds2 = await client2.credentials().list('recipient') + // assert.equal(creds2.length, 1) + // assert.equal(creds2[0].sad.s, schemaSAID) + // assert.equal(creds2[0].sad.i, aid1.prefix) + // assert.equal(creds2[0].status.s, "0") // 0 = issued console.log("Credential received by recipient") // Present credential @@ -210,19 +227,20 @@ async function run() { console.log("Credential revoked") // Recipient check revoked credential - let revoked = false - while (!revoked) { - let cred2 = await client2.credentials().get('recipient', creds1[0].sad.d) - if (cred2.status.s == "1") { - revoked = true - } - } - creds2 = await client2.credentials().list('recipient') - assert.equal(creds2.length, 1) - assert.equal(creds2[0].sad.s, schemaSAID) - assert.equal(creds2[0].sad.i, aid1.prefix) - assert.equal(creds2[0].status.s, "1") // 1 = revoked - console.log("Revocation received by recipient") + // credentialReceived = false + // let revoked = false + // while (!revoked) { + // let cred2 = await client2.credentials().get('recipient', creds1[0].sad.d) + // if (cred2.status.s == "1") { + // revoked = true + // } + // } + // let creds2 = await client2.credentials().list('recipient') + // assert.equal(creds2.length, 1) + // assert.equal(creds2[0].sad.s, schemaSAID) + // assert.equal(creds2[0].sad.i, aid1.prefix) + // assert.equal(creds2[0].status.s, "1") // 1 = revoked + // console.log("Revocation received by recipient") // Present revoked credential await client1.credentials().present('issuer', creds1[0].sad.d, 'verifier', true) diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index ea59b32a..9f185cd1 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -41,13 +41,14 @@ async function run() { // Create two identifiers, one for each client - let op1 = await client1.identifiers().create('multisig1', { + let icpResult1 = client1.identifiers().create('multisig1', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] }) + let op1 = await icpResult1.op() while (!op1["done"] ) { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); @@ -56,13 +57,14 @@ async function run() { await client1.identifiers().addEndRole("multisig1", 'agent', client1!.agent!.pre) console.log("Multisig1's AID:", aid1.prefix) - let op2 = await client2.identifiers().create('multisig2', { + let icpResult2 = client2.identifiers().create('multisig2', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] }) + let op2 = await icpResult2.op() while (!op2["done"] ) { op2 = await client2.operations().get(op2.name); await new Promise(resolve => setTimeout(resolve, 1000)); @@ -71,13 +73,14 @@ async function run() { await client2.identifiers().addEndRole("multisig2", 'agent', client2!.agent!.pre) console.log("Multisig2's AID:", aid2.prefix) - let op3 = await client3.identifiers().create('multisig3', { + let icpResult3 = client3.identifiers().create('multisig3', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] }) + let op3 = await icpResult3.op() while (!op3["done"] ) { op3 = await client3.operations().get(op3.name); await new Promise(resolve => setTimeout(resolve, 1000)); @@ -131,7 +134,7 @@ async function run() { // Create a multisig identifier let rstates = [aid1["state"], aid2["state"], aid3["state"]] let states = rstates - op1 = await client1.identifiers().create("multisig",{ + icpResult1 = client1.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid1, isith: 3, @@ -144,9 +147,25 @@ async function run() { states: states, rstates: rstates }) + op1 = await icpResult1.op() + let serder = icpResult1.serder + let sigs = icpResult1.sigs + let sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + let ims = signify.d(signify.messagize(serder, sigers)) + let atc = ims.substring(serder.size) + let embeds = { + icp: [serder, atc], + } + + let smids = states.map((state) => state['i']) + let recp = [aid2["state"], aid3["state"]].map((state) => state['i']) + + await client1.exchanges().send("multisig1", "multisig", aid1, "/multisig/icp", + {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) console.log("Multisig1 joined multisig waiting for others...") - op2 = await client2.identifiers().create("multisig",{ + icpResult2 = client2.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid2, isith: 3, @@ -159,9 +178,25 @@ async function run() { states: states, rstates: rstates }) + op2 = await icpResult2.op() + serder = icpResult2.serder + sigs = icpResult2.sigs + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + ims = signify.d(signify.messagize(serder, sigers)) + atc = ims.substring(serder.size) + embeds = { + icp: [serder, atc], + } + + smids = states.map((state) => state['i']) + recp = [aid1["state"], aid3["state"]].map((state) => state['i']) + + await client2.exchanges().send("multisig2", "multisig", aid2, "/multisig/icp", + {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) console.log("Multisig2 joined multisig waiting for others...") - op3 = await client3.identifiers().create("multisig",{ + icpResult3 = client3.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid3, isith: 3, @@ -174,6 +209,22 @@ async function run() { states: states, rstates: rstates }) + op3 = await icpResult3.op() + serder = icpResult3.serder + sigs = icpResult3.sigs + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + ims = signify.d(signify.messagize(serder, sigers)) + atc = ims.substring(serder.size) + embeds = { + icp: [serder, atc], + } + + smids = states.map((state) => state['i']) + recp = [aid1["state"], aid2["state"]].map((state) => state['i']) + + await client3.exchanges().send("multisig3", "multisig", aid3, "/multisig/icp", + {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) console.log("Multisig3 joined multisig waiting for others...") while (!op1["done"]) { diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index 0eb2db1c..b7243434 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -1515,8 +1515,6 @@ export class Registries { let keeper = this.client!.manager!.get(hab) data[keeper.algo] = keeper.params() - console.log(data) - let res = await this.client.fetch(path, method, data) return await res.json() } @@ -1921,7 +1919,7 @@ export class Exchanges { } /** - * Send exn messaget to list of recipients + * Create exn message * @async * @returns {Promise} A promise to the list of replay messages * @param sender From 361325e89cabb937324fc30f9346916cf0835032 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Thu, 7 Sep 2023 10:18:42 -0300 Subject: [PATCH 016/186] multisig with notif --- examples/integration-scripts/multisig.ts | 70 +++++++++++++++++------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index 9f185cd1..8ea2d0a7 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -131,7 +131,7 @@ async function run() { } console.log("Multisig3 resolved 2 OOBIs") - // Create a multisig identifier + // First member start the creation of a multisig identifier let rstates = [aid1["state"], aid2["state"], aid3["state"]] let states = rstates icpResult1 = client1.identifiers().create("multisig",{ @@ -163,18 +163,33 @@ async function run() { await client1.exchanges().send("multisig1", "multisig", aid1, "/multisig/icp", {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) - console.log("Multisig1 joined multisig waiting for others...") + console.log("Multisig1 create multisig, waiting for others...") + // Second member check notifications and join the multisig + let msgSaid = "" + while (msgSaid=="") { + let notifications = await client2.notifications().list() + for (let notif of notifications.notes){ + if (notif.a.r == '/multisig/icp') { + msgSaid = notif.a.d + await client2.notifications().mark(notif.i) + console.log("Multisig2 received request to join multisig") + } + } + await new Promise(resolve => setTimeout(resolve, 1000)); + } + + let res = await client2.groups().getRequest(msgSaid) + let exn = res[0].exn + let icp = exn.e.icp + icpResult2 = client2.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid2, - isith: 3, - nsith: 3, - toad: 3, - wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"], + isith: icp.kt, + nsith: icp.nt, + toad: parseInt(icp.bt), + wits: icp.b, states: states, rstates: rstates }) @@ -189,23 +204,38 @@ async function run() { icp: [serder, atc], } - smids = states.map((state) => state['i']) + smids = exn.a.smids recp = [aid1["state"], aid3["state"]].map((state) => state['i']) await client2.exchanges().send("multisig2", "multisig", aid2, "/multisig/icp", {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) - console.log("Multisig2 joined multisig waiting for others...") + console.log("Multisig2 joined multisig, waiting for others...") + + // Third member check notifications and join the multisig + msgSaid = "" + while (msgSaid=="") { + let notifications = await client3.notifications().list() + for (let notif of notifications.notes){ + if (notif.a.r == '/multisig/icp') { + msgSaid = notif.a.d + await client3.notifications().mark(notif.i) + console.log("Multisig3 received request to join multisig") + } + } + await new Promise(resolve => setTimeout(resolve, 1000)); + } + + res = await client3.groups().getRequest(msgSaid) + exn = res[0].exn + icp = exn.e.icp icpResult3 = client3.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid3, - isith: 3, - nsith: 3, - toad: 3, - wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"], + isith: icp.kt, + nsith: icp.nt, + toad: parseInt(icp.bt), + wits: icp.b, states: states, rstates: rstates }) @@ -220,12 +250,12 @@ async function run() { icp: [serder, atc], } - smids = states.map((state) => state['i']) + smids = exn.a.smids recp = [aid1["state"], aid2["state"]].map((state) => state['i']) await client3.exchanges().send("multisig3", "multisig", aid3, "/multisig/icp", {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) - console.log("Multisig3 joined multisig waiting for others...") + console.log("Multisig3 joined, multisig waiting for others...") while (!op1["done"]) { op1 = await client1.operations().get(op1.name); From c9adaecafb2864c02d4cdcbbd7b6d647943a1581 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Thu, 7 Sep 2023 15:46:30 -0300 Subject: [PATCH 017/186] EventResponse on rot and ixn --- examples/integration-scripts/salty.ts | 6 ++++-- src/keri/app/signify.ts | 31 +++++++++++++-------------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/examples/integration-scripts/salty.ts b/examples/integration-scripts/salty.ts index 4e1082cd..cd39a643 100644 --- a/examples/integration-scripts/salty.ts +++ b/examples/integration-scripts/salty.ts @@ -89,7 +89,8 @@ async function run() { aid = aids.aids[0] assert.equal(aid.name, 'aid3') - op = await client1.identifiers().rotate('aid1') + icpResult = await client1.identifiers().rotate('aid1') + op = await icpResult.op() assert.equal(op['done'], true) let ked = op['response'] let rot = new signify.Serder(ked) @@ -100,7 +101,8 @@ async function run() { assert.equal(rot.verfers[0].qb64, 'DHgomzINlGJHr-XP3sv2ZcR9QsIEYS3LJhs4KRaZYKly') assert.equal(rot.digers[0].qb64, 'EJMovBlrBuD6BVeUsGSxLjczbLEbZU9YnTSud9K4nVzk') - op = await client1.identifiers().interact("aid1", [icp.pre]) + icpResult = await client1.identifiers().interact("aid1", [icp.pre]) + op = await icpResult.op() assert.equal(op['done'], true) ked = op['response'] let ixn = new signify.Serder(ked) diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index b7243434..43ac4178 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -24,7 +24,7 @@ export class CredentialTypes { static received = "received" } -/** Starte of the client */ +/** State of the client */ class State { agent: any | null controller: any | null @@ -430,7 +430,7 @@ export class SignifyClient { } /** - * Get groups resource + * Get exchange resource * @returns {Exchanges} */ exchanges(): Exchanges { @@ -479,7 +479,7 @@ export interface RotateIdentifierArgs { rstates?: any[] } -export class InceptionResult { +export class EventResult { private readonly _serder: Serder private readonly _sigs: string[] private readonly promise: Promise @@ -562,9 +562,9 @@ export class Identifier { * @async * @param {string} name Name or alias of the identifier * @param {CreateIdentiferArgs} [kargs] Optional parameters to create the identifier - * @returns {InceptionResult} The inception result + * @returns {EventResult} The inception result */ - create(name: string, kargs:CreateIdentiferArgs={}): InceptionResult { + create(name: string, kargs:CreateIdentiferArgs={}): EventResult { const algo = kargs.algo == undefined ? Algos.salty : kargs.algo @@ -666,7 +666,7 @@ export class Identifier { this.client.pidx = this.client.pidx + 1 let res = this.client.fetch("/identifiers", "POST", jsondata) - return new InceptionResult(serder, sigs, res) + return new EventResult(serder, sigs, res) } /** @@ -674,9 +674,9 @@ export class Identifier { * @async * @param {string} name Name or alias of the identifier * @param {any} [data] Option data to be anchored in the interaction event - * @returns {Promise} A promise to the long-running operation + * @returns {Promise} A promise to the interaction event result */ - async interact(name: string, data?: any): Promise { + async interact(name: string, data?: any): Promise { let hab = await this.get(name) let pre: string = hab.prefix @@ -697,8 +697,8 @@ export class Identifier { } jsondata[keeper.algo] = keeper.params() - let res = await this.client.fetch("/identifiers/" + name + "?type=ixn", "PUT", jsondata) - return await res.json() + let res = this.client.fetch("/identifiers/" + name + "?type=ixn", "PUT", jsondata) + return new EventResult(serder, sigs, res) } @@ -706,15 +706,14 @@ export class Identifier { * Generate a rotation event in a managed identifier * @param {string} name Name or alias of the identifier * @param {RotateIdentifierArgs} [kargs] Optional parameters requiered to generate the rotation event - * @returns {Promise} + * @returns {Promise} A promise to the rotation event result */ - async rotate(name: string, kargs: RotateIdentifierArgs={}): Promise { + async rotate(name: string, kargs: RotateIdentifierArgs={}): Promise { let transferable = kargs.transferable ?? true let ncode = kargs.ncode ?? MtrDex.Ed25519_Seed let ncount = kargs.ncount ?? 1 - let hab = await this.get(name) let pre = hab.prefix @@ -774,8 +773,8 @@ export class Identifier { } jsondata[keeper.algo] = keeper.params() - let res = await this.client.fetch("/identifiers/" + name, "PUT", jsondata) - return await res.json() + let res = this.client.fetch("/identifiers/" + name, "PUT", jsondata) + return new EventResult(serder, sigs, res) } /** @@ -1938,7 +1937,7 @@ export class Exchanges { } /** - * Send exn messaget to list of recipients + * Send exn messages to list of recipients * @async * @returns {Promise} A promise to the list of replay messages * @param name From 3c03046be372004cb3160fcf82c6d0c1b9f89e6a Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Thu, 7 Sep 2023 15:48:08 -0300 Subject: [PATCH 018/186] randy and salty --- examples/integration-scripts/randy.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/integration-scripts/randy.ts b/examples/integration-scripts/randy.ts index 0ed53017..2b43323e 100644 --- a/examples/integration-scripts/randy.ts +++ b/examples/integration-scripts/randy.ts @@ -44,7 +44,8 @@ async function run() { assert.equal(aid.name, 'aid1') assert.equal(aid.prefix, icp.pre) - op = await client1.identifiers().interact("aid1", [icp.pre]) + icpResult = await client1.identifiers().interact("aid1", [icp.pre]) + op = await icpResult.op() assert.equal(op['done'], true) let ked = op['response'] let ixn = new signify.Serder(ked) @@ -59,7 +60,8 @@ async function run() { let log = await events.get(aid["prefix"]) assert.equal(log.length, 2) - op = await client1.identifiers().rotate('aid1') + icpResult = await client1.identifiers().rotate('aid1') + op = await icpResult.op() assert.equal(op['done'], true) ked = op['response'] let rot = new signify.Serder(ked) From d4db431cb239ee75cee0a32c2cdcc7e60260f112 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Thu, 7 Sep 2023 22:12:21 -0300 Subject: [PATCH 019/186] mulltisig interaction --- examples/integration-scripts/challenge.ts | 6 +- examples/integration-scripts/multisig.ts | 196 +++++++++++++++++----- 2 files changed, 158 insertions(+), 44 deletions(-) diff --git a/examples/integration-scripts/challenge.ts b/examples/integration-scripts/challenge.ts index 0c9215e0..e5f7ecd1 100644 --- a/examples/integration-scripts/challenge.ts +++ b/examples/integration-scripts/challenge.ts @@ -40,13 +40,14 @@ async function run() { assert.equal(challenge1_big.words.length, 24) // Create two identifiers, one for each client - let op1 = await client1.identifiers().create('alice', { + let icpResult1 = await client1.identifiers().create('alice', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] }) + let op1 = await icpResult1.op() while (!op1["done"] ) { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); @@ -55,13 +56,14 @@ async function run() { await client1.identifiers().addEndRole("alice", 'agent', client1!.agent!.pre) console.log("Alice's AID:", aid1.i) - let op2 = await client2.identifiers().create('bob', { + let icpResult2 = await client2.identifiers().create('bob', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] }) + let op2 = await icpResult2.op() while (!op2["done"] ) { op2 = await client2.operations().get(op2.name); await new Promise(resolve => setTimeout(resolve, 1000)); diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index 8ea2d0a7..ed4ece69 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -40,8 +40,8 @@ async function run() { console.log("Client 3 connected. Client AID:",state3.controller.state.i,"Agent AID: ", state3.agent.i) - // Create two identifiers, one for each client - let icpResult1 = client1.identifiers().create('multisig1', { + // Create three identifiers, one for each client + let icpResult1 = client1.identifiers().create('member1', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", @@ -53,11 +53,11 @@ async function run() { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - const aid1 = await client1.identifiers().get("multisig1") - await client1.identifiers().addEndRole("multisig1", 'agent', client1!.agent!.pre) - console.log("Multisig1's AID:", aid1.prefix) + const aid1 = await client1.identifiers().get("member1") + await client1.identifiers().addEndRole("member1", 'agent', client1!.agent!.pre) + console.log("Member1's AID:", aid1.prefix) - let icpResult2 = client2.identifiers().create('multisig2', { + let icpResult2 = client2.identifiers().create('member2', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", @@ -69,11 +69,11 @@ async function run() { op2 = await client2.operations().get(op2.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - const aid2 = await client2.identifiers().get("multisig2") - await client2.identifiers().addEndRole("multisig2", 'agent', client2!.agent!.pre) - console.log("Multisig2's AID:", aid2.prefix) + const aid2 = await client2.identifiers().get("member2") + await client2.identifiers().addEndRole("member2", 'agent', client2!.agent!.pre) + console.log("Member2's AID:", aid2.prefix) - let icpResult3 = client3.identifiers().create('multisig3', { + let icpResult3 = client3.identifiers().create('member3', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", @@ -85,51 +85,51 @@ async function run() { op3 = await client3.operations().get(op3.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - const aid3 = await client3.identifiers().get("multisig3") - await client3.identifiers().addEndRole("multisig3", 'agent', client3!.agent!.pre) - console.log("Multisig3's AID:", aid3.prefix) + const aid3 = await client3.identifiers().get("member3") + await client3.identifiers().addEndRole("member3", 'agent', client3!.agent!.pre) + console.log("Member3's AID:", aid3.prefix) // Exchenge OOBIs console.log("Resolving OOBIs") - let oobi1 = await client1.oobis().get("multisig1","agent") - let oobi2 = await client2.oobis().get("multisig2","agent") - let oobi3 = await client3.oobis().get("multisig3","agent") + let oobi1 = await client1.oobis().get("member1","agent") + let oobi2 = await client2.oobis().get("member2","agent") + let oobi3 = await client3.oobis().get("member3","agent") - op1 = await client1.oobis().resolve(oobi2.oobis[0],"multisig2") + op1 = await client1.oobis().resolve(oobi2.oobis[0],"member2") while (!op1["done"]) { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - op1 = await client1.oobis().resolve(oobi3.oobis[0],"multisig3") + op1 = await client1.oobis().resolve(oobi3.oobis[0],"member3") while (!op1["done"]) { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - console.log("Multisig1 resolved 2 OOBIs") + console.log("Member1 resolved 2 OOBIs") - op2 = await client2.oobis().resolve(oobi1.oobis[0],"multisig1") + op2 = await client2.oobis().resolve(oobi1.oobis[0],"member1") while (!op2["done"]) { op2 = await client2.operations().get(op2.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - op2 = await client2.oobis().resolve(oobi3.oobis[0],"multisig3") + op2 = await client2.oobis().resolve(oobi3.oobis[0],"member3") while (!op2["done"]) { op2 = await client2.operations().get(op2.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - console.log("Multisig2 resolved 2 OOBIs") + console.log("Member2 resolved 2 OOBIs") - op3 = await client3.oobis().resolve(oobi1.oobis[0],"multisig1") + op3 = await client3.oobis().resolve(oobi1.oobis[0],"member1") while (!op3["done"]) { op3 = await client3.operations().get(op3.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - op3 = await client3.oobis().resolve(oobi2.oobis[0],"multisig2") + op3 = await client3.oobis().resolve(oobi2.oobis[0],"member2") while (!op3["done"]) { op3 = await client3.operations().get(op3.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - console.log("Multisig3 resolved 2 OOBIs") + console.log("Member3 resolved 2 OOBIs") // First member start the creation of a multisig identifier let rstates = [aid1["state"], aid2["state"], aid3["state"]] @@ -161,9 +161,9 @@ async function run() { let smids = states.map((state) => state['i']) let recp = [aid2["state"], aid3["state"]].map((state) => state['i']) - await client1.exchanges().send("multisig1", "multisig", aid1, "/multisig/icp", + await client1.exchanges().send("member1", "multisig", aid1, "/multisig/icp", {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) - console.log("Multisig1 create multisig, waiting for others...") + console.log("Member1 create multisig, waiting for others...") // Second member check notifications and join the multisig let msgSaid = "" @@ -173,7 +173,7 @@ async function run() { if (notif.a.r == '/multisig/icp') { msgSaid = notif.a.d await client2.notifications().mark(notif.i) - console.log("Multisig2 received request to join multisig") + console.log("Member2 received request to join multisig") } } await new Promise(resolve => setTimeout(resolve, 1000)); @@ -207,9 +207,9 @@ async function run() { smids = exn.a.smids recp = [aid1["state"], aid3["state"]].map((state) => state['i']) - await client2.exchanges().send("multisig2", "multisig", aid2, "/multisig/icp", + await client2.exchanges().send("member2", "multisig", aid2, "/multisig/icp", {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) - console.log("Multisig2 joined multisig, waiting for others...") + console.log("Member2 joined multisig, waiting for others...") // Third member check notifications and join the multisig @@ -220,7 +220,7 @@ async function run() { if (notif.a.r == '/multisig/icp') { msgSaid = notif.a.d await client3.notifications().mark(notif.i) - console.log("Multisig3 received request to join multisig") + console.log("Member3 received request to join multisig") } } await new Promise(resolve => setTimeout(resolve, 1000)); @@ -253,9 +253,9 @@ async function run() { smids = exn.a.smids recp = [aid1["state"], aid2["state"]].map((state) => state['i']) - await client3.exchanges().send("multisig3", "multisig", aid3, "/multisig/icp", + await client3.exchanges().send("member3", "multisig", aid3, "/multisig/icp", {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) - console.log("Multisig3 joined, multisig waiting for others...") + console.log("Member3 joined, multisig waiting for others...") while (!op1["done"]) { op1 = await client1.operations().get(op1.name); @@ -273,21 +273,133 @@ async function run() { const identifiers1 = await client1.identifiers().list() assert.equal(identifiers1.aids.length, 2) - assert.equal(identifiers1.aids[0].name, "multisig") - assert.equal(identifiers1.aids[1].name, "multisig1") + assert.equal(identifiers1.aids[0].name, "member1") + assert.equal(identifiers1.aids[1].name, "multisig") const identifiers2 = await client2.identifiers().list() assert.equal(identifiers2.aids.length, 2) - assert.equal(identifiers2.aids[0].name, "multisig") - assert.equal(identifiers2.aids[1].name, "multisig2") + assert.equal(identifiers2.aids[0].name, "member2") + assert.equal(identifiers2.aids[1].name, "multisig") const identifiers3 = await client3.identifiers().list() assert.equal(identifiers3.aids.length, 2) - assert.equal(identifiers3.aids[0].name, "multisig") - assert.equal(identifiers3.aids[1].name, "multisig3") + assert.equal(identifiers3.aids[0].name, "member3") + assert.equal(identifiers3.aids[1].name, "multisig") - console.log("Client 1 identifiers:", identifiers1.aids[0].name, identifiers1.aids[1].name) - console.log("Client 2 identifiers:", identifiers2.aids[0].name, identifiers2.aids[1].name) - console.log("Client 3 identifiers:", identifiers3.aids[0].name, identifiers3.aids[1].name) + console.log("Client 1 managed AIDs:", identifiers1.aids[0].name, identifiers1.aids[1].name) + console.log("Client 2 managed AIDs:", identifiers2.aids[0].name, identifiers2.aids[1].name) + console.log("Client 3 managed AIDs:", identifiers3.aids[0].name, identifiers3.aids[1].name) + + // Join an interaction event with the group + + // Member1 propose an interaction event + let data = {"i": "EE77q3_zWb5ojgJr-R1vzsL5yiL4Nzm-bfSOQzQl02dy"} + let eventResponse1 = await client1.identifiers().interact("multisig", data) + op1 = await eventResponse1.op() + serder = eventResponse1.serder + sigs = eventResponse1.sigs + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + ims = signify.d(signify.messagize(serder, sigers)) + atc = ims.substring(serder.size) + let xembeds = { + ixn: [serder, atc], + } + + smids = states.map((state) => state['i']) + recp = [aid2["state"], aid3["state"]].map((state) => state['i']) + + await client1.exchanges().send("member1", "multisig", aid1, "/multisig/ixn", + {'gid': serder.pre, smids: smids, rmids: smids}, xembeds, recp) + console.log("Member1 initiates interaction event, waiting for others...") + + // Member2 check for notifications and join the interaction event + msgSaid = "" + while (msgSaid=="") { + let notifications = await client2.notifications().list() + for (let notif of notifications.notes){ + if (notif.a.r == '/multisig/ixn') { + msgSaid = notif.a.d + await client2.notifications().mark(notif.i) + console.log("Member2 received request to join the interaction event") + } + } + await new Promise(resolve => setTimeout(resolve, 1000)); + } + res = await client2.groups().getRequest(msgSaid) + exn = res[0].exn + let ixn = exn.e.ixn + data = ixn.a + + icpResult2 = await client2.identifiers().interact("multisig",data) + op2 = await icpResult2.op() + serder = icpResult2.serder + sigs = icpResult2.sigs + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + ims = signify.d(signify.messagize(serder, sigers)) + atc = ims.substring(serder.size) + xembeds = { + ixn: [serder, atc], + } + + smids = exn.a.smids + recp = [aid1["state"], aid3["state"]].map((state) => state['i']) + + await client2.exchanges().send("member2", "multisig", aid2, "/multisig/ixn", + {'gid': serder.pre, smids: smids, rmids: smids}, xembeds, recp) + console.log("Member2 joins interaction event, waiting for others...") + + // Member3 check for notifications and join the interaction event + msgSaid = "" + while (msgSaid=="") { + let notifications = await client3.notifications().list() + for (let notif of notifications.notes){ + if (notif.a.r == '/multisig/ixn') { + msgSaid = notif.a.d + await client3.notifications().mark(notif.i) + console.log("Member3 received request to join the interaction event") + } + } + await new Promise(resolve => setTimeout(resolve, 1000)); + } + res = await client3.groups().getRequest(msgSaid) + exn = res[0].exn + ixn = exn.e.ixn + data = ixn.a + + icpResult3 = await client3.identifiers().interact("multisig",data) + op3 = await icpResult3.op() + serder = icpResult3.serder + sigs = icpResult3.sigs + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + ims = signify.d(signify.messagize(serder, sigers)) + atc = ims.substring(serder.size) + xembeds = { + ixn: [serder, atc], + } + + smids = exn.a.smids + recp = [aid1["state"], aid2["state"]].map((state) => state['i']) + + await client3.exchanges().send("member3", "multisig", aid3, "/multisig/ixn", + {'gid': serder.pre, smids: smids, rmids: smids}, xembeds, recp) + console.log("Member3 joins interaction event, waiting for others...") + + // Check for completion + while (!op1["done"]) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + while (!op2["done"]) { + op2 = await client2.operations().get(op2.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + while (!op3["done"]) { + op3 = await client3.operations().get(op3.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + console.log("Multisig interaction comlpeted!") } \ No newline at end of file From 1ad71ec76ddb302acaf83e28207601ca4a1d81dd Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 13:09:41 +0300 Subject: [PATCH 020/186] re-factor to enable strong typing --- examples/scripts/client.ts | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/examples/scripts/client.ts b/examples/scripts/client.ts index fc6e1716..af503d23 100644 --- a/examples/scripts/client.ts +++ b/examples/scripts/client.ts @@ -1,23 +1,12 @@ -// @ts-ignore -let signify: any; - -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("Signify client ready!"); - connect().then(() => { - console.log("Done") - }); - }); - } -) +import signify from "signify-ts"; + +await connect(); async function connect() { let url = "http://127.0.0.1:3901" let bran = '0123456789abcdefghijk' + await signify.ready(); const client = new signify.SignifyClient(url, bran); console.log(client.controller.pre) const [evt, sign] = client.controller?.event ?? []; @@ -96,7 +85,7 @@ async function connect() { let states = [sigPy, kli, sigTs] let ires = identifiers.create("multisig", { - algo: "group", mhab: aid, + algo: signify.Algos.group, mhab: aid, delpre: "EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7", toad: 2, wits: [ From 552040faf52a24bb872d9f1dad42669c7241422c Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 13:10:12 +0300 Subject: [PATCH 021/186] updates to enable ES modules --- examples/scripts/multisig-sigts.sh | 2 +- examples/scripts/package.json | 1 + examples/scripts/tsconfig.node.json | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/scripts/multisig-sigts.sh b/examples/scripts/multisig-sigts.sh index 857b68ce..9118847c 100755 --- a/examples/scripts/multisig-sigts.sh +++ b/examples/scripts/multisig-sigts.sh @@ -1,7 +1,7 @@ #!/bin/bash -npx --package=signify-ts ts-node client.ts +npx --package=signify-ts ts-node --esm client.ts read -n 1 -r -p "Press any key to create endpoints for multisig AID..." diff --git a/examples/scripts/package.json b/examples/scripts/package.json index 726a60f1..78dd8658 100644 --- a/examples/scripts/package.json +++ b/examples/scripts/package.json @@ -1,5 +1,6 @@ { "name": "signify-scripts-ts", + "type": "module", "private": true, "version": "0.0.0", "scripts": {}, diff --git a/examples/scripts/tsconfig.node.json b/examples/scripts/tsconfig.node.json index 61c424ba..b1035cbd 100644 --- a/examples/scripts/tsconfig.node.json +++ b/examples/scripts/tsconfig.node.json @@ -2,6 +2,7 @@ "compilerOptions": { "composite": true, "skipLibCheck": true, + "target": "ESNext", "module": "ESNext", "moduleResolution": "bundler", "allowSyntheticDefaultImports": true From c6546562c571f16d84900ce5a1213831cecb3bff Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 13:59:11 +0300 Subject: [PATCH 022/186] re-factor to use import signify --- examples/scripts/list_notifications.ts | 19 ++++--------------- examples/scripts/make_endroles.ts | 18 +++--------------- 2 files changed, 7 insertions(+), 30 deletions(-) diff --git a/examples/scripts/list_notifications.ts b/examples/scripts/list_notifications.ts index 2ae3d241..33c6f48e 100644 --- a/examples/scripts/list_notifications.ts +++ b/examples/scripts/list_notifications.ts @@ -1,25 +1,14 @@ +import signify from "signify-ts"; const prmpt = require("prompt-sync")({ sigint: true }); -// @ts-ignore -let signify: any; - -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("Signify client ready!"); - list_notifications().then(() => { - console.log("Done") - }); - }); - } -) + +await list_notifications(); async function list_notifications() { let url = "http://127.0.0.1:3901" let bran = '0123456789abcdefghijk' + await signify.ready(); const client = new signify.SignifyClient(url, bran); await client.connect() let d = await client.state() diff --git a/examples/scripts/make_endroles.ts b/examples/scripts/make_endroles.ts index 6e70204f..386a4d4f 100644 --- a/examples/scripts/make_endroles.ts +++ b/examples/scripts/make_endroles.ts @@ -1,24 +1,12 @@ +import signify from "signify-ts"; -// @ts-ignore -let signify: any; - -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("Signify client ready!"); - makeends().then(() => { - console.log("Done") - }); - }); - } -) +await makeends(); async function makeends() { let url = "http://127.0.0.1:3901" let bran = '0123456789abcdefghijk' + await signify.ready(); const client = new signify.SignifyClient(url, bran); await client.connect() let d = await client.state() From e0158d84424bfe3b7e671fcd11a3ca11ab43dfdc Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 14:00:34 +0300 Subject: [PATCH 023/186] fix compile errors, one error remains --- examples/scripts/list_notifications.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/scripts/list_notifications.ts b/examples/scripts/list_notifications.ts index 33c6f48e..c9aa341d 100644 --- a/examples/scripts/list_notifications.ts +++ b/examples/scripts/list_notifications.ts @@ -53,7 +53,7 @@ async function list_notifications() { let serder = new signify.Serder(ixn) let ghab = await identifiers.get(group) - let keeper = client.manager.get(ghab) + let keeper = client.manager!.get(ghab) let sigs = keeper.sign(signify.b(serder.raw)) let sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) @@ -65,7 +65,7 @@ async function list_notifications() { } sender = ghab["group"]["mhab"] - keeper = client.manager.get(sender) + keeper = client.manager!.get(sender) let [nexn, end] = signify.exchange("/multisig/vcp", {'gid': ghab["prefix"], 'usage': "test"}, sender["prefix"], undefined, undefined, undefined, undefined, embeds) From d932c478db25c597d32ecc639c268d3221cfd806 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 11:19:17 +0300 Subject: [PATCH 024/186] contacts list should use filter_field and filter_value parameters --- test/app/signify.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/app/signify.test.ts b/test/app/signify.test.ts index 52e978d7..f3024a37 100644 --- a/test/app/signify.test.ts +++ b/test/app/signify.test.ts @@ -613,7 +613,7 @@ describe('SignifyClient', () => { await contacts.list("mygroup","company","mycompany") let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/contacts?group=mygroup&company=mycompany') + assert.equal(lastCall[0]!,url+'/contacts?group=mygroup&filter_field=company&filter_value=mycompany') assert.equal(lastCall[1]!.method,'GET') From a54019bc1b197b56cc352db31fdb38f46e2fd251 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 11:20:03 +0300 Subject: [PATCH 025/186] fix contacts.list to use filter_field and filter_value --- src/keri/app/signify.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index b7243434..af582237 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -1682,7 +1682,10 @@ export class Contacts { async list(group?:string, filterField?:string, filterValue?:string): Promise { let params = new URLSearchParams() if (group !== undefined) {params.append('group', group)} - if (filterField !== undefined && filterValue !== undefined) {params.append(filterField, filterValue)} + if (filterField !== undefined && filterValue !== undefined) { + params.append("filter_field", filterField); + params.append("filter_value", filterValue); + } let path = `/contacts`+ '?' + params.toString() let method = 'GET' From 8332406de6f41eb1814331ffbf91b69d71d6d4e6 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 11:44:59 +0300 Subject: [PATCH 026/186] array of string should be assignable to isith and nsith --- test/app/apping.test.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test/app/apping.test.ts b/test/app/apping.test.ts index 8784df30..7759f2d0 100644 --- a/test/app/apping.test.ts +++ b/test/app/apping.test.ts @@ -1,6 +1,7 @@ import {strict as assert} from "assert"; import {randomPasscode, randomNonce} from '../../src/keri/app/apping' import libsodium from "libsodium-wrappers-sumo" +import {CreateIdentiferArgs, RotateIdentifierArgs} from "../../src/keri/app/signify"; describe('Controller', () => { it('Random passcode', async () => { @@ -15,6 +16,34 @@ describe('Controller', () => { assert.equal(nonce.length, 44) }) + it('CreateIdentiferArgs', () => { + let args: CreateIdentiferArgs; + args = { + isith: 1, + nsith: 1 + }; + args = { + isith: "1", + nsith: "1" + }; + args = { + isith: ["1"], + nsith: ["1"] + }; + }) + + it('RotateIdentifierArgs', () => { + let args: RotateIdentifierArgs; + args = { + nsith: 1 + }; + args = { + nsith: "1" + }; + args = { + nsith: ["1"] + }; + }) }) \ No newline at end of file From 499d060af45db977a4313e220d7f4e52b4c912bb Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 12:11:13 +0300 Subject: [PATCH 027/186] avoid TS6133 --- test/app/apping.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/app/apping.test.ts b/test/app/apping.test.ts index 7759f2d0..0ea0a9f3 100644 --- a/test/app/apping.test.ts +++ b/test/app/apping.test.ts @@ -30,6 +30,7 @@ describe('Controller', () => { isith: ["1"], nsith: ["1"] }; + args !== null; // avoids TS6133 }) it('RotateIdentifierArgs', () => { @@ -43,6 +44,7 @@ describe('Controller', () => { args = { nsith: ["1"] }; + args !== null; // avoids TS6133 }) From 51db099b149a6bcdfac49aad3cd296bc66bd1e18 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 12:12:04 +0300 Subject: [PATCH 028/186] add string[] to type union of isith and nsith --- src/keri/app/signify.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts index af582237..4c485faf 100644 --- a/src/keri/app/signify.ts +++ b/src/keri/app/signify.ts @@ -441,8 +441,8 @@ export class SignifyClient { /** Arguments required to create an identfier */ export interface CreateIdentiferArgs { transferable?: boolean, - isith?: string | number, - nsith?: string | number, + isith?: string | number | string[], + nsith?: string | number | string[], wits?: string[], toad?: number, proxy?: string, @@ -467,7 +467,7 @@ export interface CreateIdentiferArgs { /** Arguments required to rotate an identfier */ export interface RotateIdentifierArgs { transferable?: boolean, - nsith?: string | number, + nsith?: string | number | string[], toad?: number, cuts?: string[], adds?: string[], From cc61799ef47fc8c84419ad5af5b72422ee317da4 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 18:23:48 +0300 Subject: [PATCH 029/186] using prompt-sync as module, fix compile error --- examples/scripts/list_notifications.ts | 5 +++-- examples/scripts/package-lock.json | 13 +++++++++++++ examples/scripts/package.json | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/examples/scripts/list_notifications.ts b/examples/scripts/list_notifications.ts index c9aa341d..ead6dfb4 100644 --- a/examples/scripts/list_notifications.ts +++ b/examples/scripts/list_notifications.ts @@ -1,6 +1,7 @@ import signify from "signify-ts"; +import promptSync from 'prompt-sync'; -const prmpt = require("prompt-sync")({ sigint: true }); +const prmpt = promptSync({ sigint: true }); await list_notifications(); @@ -71,7 +72,7 @@ async function list_notifications() { sender["prefix"], undefined, undefined, undefined, undefined, embeds) console.log(nexn.pretty()) - let esigs = keeper.sign(nexn.raw) + let esigs = keeper.sign(signify.b(nexn.raw)) await groups.sendRequest(group, nexn.ked, esigs, signify.d(end)) return await registries.createFromEvents(ghab, group, registryName, vcp, ixn, sigs) diff --git a/examples/scripts/package-lock.json b/examples/scripts/package-lock.json index 1b73dd02..3bfadcec 100644 --- a/examples/scripts/package-lock.json +++ b/examples/scripts/package-lock.json @@ -12,6 +12,7 @@ "signify-ts": "file:../../" }, "devDependencies": { + "@types/prompt-sync": "^4.2.0", "@typescript-eslint/eslint-plugin": "^5.57.1", "@typescript-eslint/parser": "^5.57.1", "eslint": "^8.38.0", @@ -199,6 +200,12 @@ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, + "node_modules/@types/prompt-sync": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.0.tgz", + "integrity": "sha512-5RPQYDT7MNkt+vq6xp58tSPx4THANyQcBSaw3Ni+KV7MUAgvUUbmCsQmcPVrcc8dwuURSPixz2qTJdJF6ABSKw==", + "dev": true + }, "node_modules/@types/semver": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", @@ -1790,6 +1797,12 @@ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, + "@types/prompt-sync": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.0.tgz", + "integrity": "sha512-5RPQYDT7MNkt+vq6xp58tSPx4THANyQcBSaw3Ni+KV7MUAgvUUbmCsQmcPVrcc8dwuURSPixz2qTJdJF6ABSKw==", + "dev": true + }, "@types/semver": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", diff --git a/examples/scripts/package.json b/examples/scripts/package.json index 78dd8658..9de00e60 100644 --- a/examples/scripts/package.json +++ b/examples/scripts/package.json @@ -9,6 +9,7 @@ "signify-ts": "file:../../" }, "devDependencies": { + "@types/prompt-sync": "^4.2.0", "@typescript-eslint/eslint-plugin": "^5.57.1", "@typescript-eslint/parser": "^5.57.1", "eslint": "^8.38.0", From 6cd0a10f3ee78bc3b98d8c7902c4bfb2de6cdb55 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 8 Sep 2023 18:40:40 +0300 Subject: [PATCH 030/186] add --esm switch --- examples/scripts/multisig-sigts.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/scripts/multisig-sigts.sh b/examples/scripts/multisig-sigts.sh index 9118847c..4f2e0d7a 100755 --- a/examples/scripts/multisig-sigts.sh +++ b/examples/scripts/multisig-sigts.sh @@ -5,4 +5,4 @@ npx --package=signify-ts ts-node --esm client.ts read -n 1 -r -p "Press any key to create endpoints for multisig AID..." -npx --package=signify-ts ts-node make_endroles.ts \ No newline at end of file +npx --package=signify-ts ts-node --esm make_endroles.ts \ No newline at end of file From 536c3b995cecbbb57ea2be56d9693cd88123ccb5 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 9 Sep 2023 16:11:37 -0300 Subject: [PATCH 031/186] multisig with notif --- examples/integration-scripts/multisig.ts | 221 +++++++++++++++--- .../integration-scripts/tsconfig.node.json | 1 + examples/integration-scripts/witness.ts | 30 ++- src/keri/core/eventing.ts | 7 +- 4 files changed, 212 insertions(+), 47 deletions(-) diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index ed4ece69..addcc93d 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -1,24 +1,13 @@ import { strict as assert } from "assert"; +import signify from "signify-ts"; -let signify: any; const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("*** Starting MULTISIG test ***"); - run().then(() => { - console.log("*** Test complete ***") - }); - }); - } -) +await run() async function run() { - + await signify.ready() // Boot three clients const bran1 = signify.randomPasscode() const bran2 = signify.randomPasscode() @@ -53,7 +42,7 @@ async function run() { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - const aid1 = await client1.identifiers().get("member1") + let aid1 = await client1.identifiers().get("member1") await client1.identifiers().addEndRole("member1", 'agent', client1!.agent!.pre) console.log("Member1's AID:", aid1.prefix) @@ -69,7 +58,7 @@ async function run() { op2 = await client2.operations().get(op2.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - const aid2 = await client2.identifiers().get("member2") + let aid2 = await client2.identifiers().get("member2") await client2.identifiers().addEndRole("member2", 'agent', client2!.agent!.pre) console.log("Member2's AID:", aid2.prefix) @@ -85,11 +74,11 @@ async function run() { op3 = await client3.operations().get(op3.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - const aid3 = await client3.identifiers().get("member3") + let aid3 = await client3.identifiers().get("member3") await client3.identifiers().addEndRole("member3", 'agent', client3!.agent!.pre) console.log("Member3's AID:", aid3.prefix) - // Exchenge OOBIs + // Exchange OOBIs console.log("Resolving OOBIs") let oobi1 = await client1.oobis().get("member1","agent") let oobi2 = await client2.oobis().get("member2","agent") @@ -163,7 +152,7 @@ async function run() { await client1.exchanges().send("member1", "multisig", aid1, "/multisig/icp", {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) - console.log("Member1 create multisig, waiting for others...") + console.log("Member1 initiated multisig, waiting for others to join...") // Second member check notifications and join the multisig let msgSaid = "" @@ -173,7 +162,7 @@ async function run() { if (notif.a.r == '/multisig/icp') { msgSaid = notif.a.d await client2.notifications().mark(notif.i) - console.log("Member2 received request to join multisig") + console.log("Member2 received exchange message to join multisig") } } await new Promise(resolve => setTimeout(resolve, 1000)); @@ -220,7 +209,7 @@ async function run() { if (notif.a.r == '/multisig/icp') { msgSaid = notif.a.d await client3.notifications().mark(notif.i) - console.log("Member3 received request to join multisig") + console.log("Member3 received exchange message to join multisig") } } await new Promise(resolve => setTimeout(resolve, 1000)); @@ -257,6 +246,7 @@ async function run() { {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) console.log("Member3 joined, multisig waiting for others...") + // Check for completion while (!op1["done"]) { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); @@ -291,9 +281,9 @@ async function run() { console.log("Client 3 managed AIDs:", identifiers3.aids[0].name, identifiers3.aids[1].name) - // Join an interaction event with the group + // MultiSig Interaction - // Member1 propose an interaction event + // Member1 initiates an interaction event let data = {"i": "EE77q3_zWb5ojgJr-R1vzsL5yiL4Nzm-bfSOQzQl02dy"} let eventResponse1 = await client1.identifiers().interact("multisig", data) op1 = await eventResponse1.op() @@ -312,7 +302,7 @@ async function run() { await client1.exchanges().send("member1", "multisig", aid1, "/multisig/ixn", {'gid': serder.pre, smids: smids, rmids: smids}, xembeds, recp) - console.log("Member1 initiates interaction event, waiting for others...") + console.log("Member1 initiates interaction event, waiting for others to join...") // Member2 check for notifications and join the interaction event msgSaid = "" @@ -322,7 +312,7 @@ async function run() { if (notif.a.r == '/multisig/ixn') { msgSaid = notif.a.d await client2.notifications().mark(notif.i) - console.log("Member2 received request to join the interaction event") + console.log("Member2 received exchange message to join the interaction event") } } await new Promise(resolve => setTimeout(resolve, 1000)); @@ -359,7 +349,7 @@ async function run() { if (notif.a.r == '/multisig/ixn') { msgSaid = notif.a.d await client3.notifications().mark(notif.i) - console.log("Member3 received request to join the interaction event") + console.log("Member3 received exchange message to join the interaction event") } } await new Promise(resolve => setTimeout(resolve, 1000)); @@ -401,5 +391,182 @@ async function run() { op3 = await client3.operations().get(op3.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - console.log("Multisig interaction comlpeted!") + console.log("Multisig interaction completed!") + + // Members agree out of band to rotate keys + console.log("Members agree out of band to rotate keys") + icpResult1 = await client1.identifiers().rotate('member1') + op1 = await icpResult1.op() + while (!op1["done"]) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + aid1 = await client1.identifiers().get("member1") + + console.log("Member1 rotated keys") + icpResult2 = await client2.identifiers().rotate('member2') + op2 = await icpResult2.op() + while (!op2["done"]) { + op2 = await client2.operations().get(op2.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + aid2 = await client2.identifiers().get("member2") + console.log("Member2 rotated keys") + icpResult3 = await client3.identifiers().rotate('member3') + op3 = await icpResult3.op() + while (!op3["done"]) { + op3 = await client3.operations().get(op3.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + aid3 = await client3.identifiers().get("member3") + console.log("Member3 rotated keys") + + // Update new key states + op1 = await client1.keyStates().query(aid2.prefix,1) + while (!op1["done"]) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + let aid2State = op1["response"] + op1 = await client1.keyStates().query(aid3.prefix,1) + while (!op1["done"]) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + let aid3State = op1["response"] + + op2 = await client2.keyStates().query(aid3.prefix,1) + while (!op2["done"]) { + op2 = await client2.operations().get(op2.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + op2 = await client2.keyStates().query(aid1.prefix,1) + while (!op2["done"]) { + op2 = await client2.operations().get(op2.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + let aid1State = op2["response"] + + op3 = await client3.keyStates().query(aid1.prefix,1) + while (!op3["done"]) { + op3 = await client3.operations().get(op3.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + op3 = await client3.keyStates().query(aid2.prefix,1) + while (!op3["done"]) { + op3 = await client3.operations().get(op3.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + + rstates = [aid1State, aid2State, aid3State] + states = rstates + + // Multisig Rotation + + // Member1 initiates a rotation event + eventResponse1 = await client1.identifiers().rotate("multisig",{states: states,rstates: rstates}) + op1 = await eventResponse1.op() + serder = eventResponse1.serder + sigs = eventResponse1.sigs + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + ims = signify.d(signify.messagize(serder, sigers)) + atc = ims.substring(serder.size) + let rembeds = { + rot: [serder, atc], + } + + smids = states.map((state) => state['i']) + recp = [aid2State, aid3State].map((state) => state['i']) + + await client1.exchanges().send("member1", "multisig", aid1 , "/multisig/rot", + {'gid': serder.pre, smids: smids, rmids: smids}, rembeds, recp) + console.log("Member1 initiates rotation event, waiting for others to join...") + + // Member2 check for notifications and join the rotation event + msgSaid = "" + while (msgSaid=="") { + let notifications = await client2.notifications().list() + for (let notif of notifications.notes){ + if (notif.a.r == '/multisig/rot') { + msgSaid = notif.a.d + await client2.notifications().mark(notif.i) + console.log("Member2 received exchange message to join the rotation event") + } + } + await new Promise(resolve => setTimeout(resolve, 1000)); + } + + await new Promise(resolve => setTimeout(resolve, 5000)); + res = await client2.groups().getRequest(msgSaid) + exn = res[0].exn + + icpResult2 = await client2.identifiers().rotate("multisig",{states: states,rstates: rstates}) + op2 = await icpResult2.op() + serder = icpResult2.serder + sigs = icpResult2.sigs + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + ims = signify.d(signify.messagize(serder, sigers)) + atc = ims.substring(serder.size) + rembeds = { + rot: [serder, atc], + } + + smids = exn.a.smids + recp = [aid1State, aid3State].map((state) => state['i']) + + await client2.exchanges().send("member2", "multisig", aid2, "/multisig/ixn", + {'gid': serder.pre, smids: smids, rmids: smids}, rembeds, recp) + console.log("Member2 joins rotation event, waiting for others...") + + // Member3 check for notifications and join the rotation event + msgSaid = "" + while (msgSaid=="") { + let notifications = await client3.notifications().list(1) + for (let notif of notifications.notes){ + if (notif.a.r == '/multisig/rot') { + msgSaid = notif.a.d + await client3.notifications().mark(notif.i) + console.log("Member3 received exchange message to join the rotation event") + } + } + await new Promise(resolve => setTimeout(resolve, 1000)); + } + res = await client3.groups().getRequest(msgSaid) + exn = res[0].exn + + icpResult3 = await client3.identifiers().rotate("multisig",{states: states,rstates: rstates}) + op3 = await icpResult3.op() + serder = icpResult3.serder + sigs = icpResult3.sigs + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + ims = signify.d(signify.messagize(serder, sigers)) + atc = ims.substring(serder.size) + rembeds = { + rot: [serder, atc], + } + + smids = exn.a.smids + recp = [aid1State, aid2State].map((state) => state['i']) + + await client3.exchanges().send("member3", "multisig", aid3, "/multisig/ixn", + {'gid': serder.pre, smids: smids, rmids: smids}, rembeds, recp) + console.log("Member3 joins rotation event, waiting for others...") + + // Check for completion + while (!op1["done"]) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + while (!op2["done"]) { + op2 = await client2.operations().get(op2.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + while (!op3["done"]) { + op3 = await client3.operations().get(op3.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + console.log("Multisig rotation completed!") } \ No newline at end of file diff --git a/examples/integration-scripts/tsconfig.node.json b/examples/integration-scripts/tsconfig.node.json index 61c424ba..b1035cbd 100644 --- a/examples/integration-scripts/tsconfig.node.json +++ b/examples/integration-scripts/tsconfig.node.json @@ -2,6 +2,7 @@ "compilerOptions": { "composite": true, "skipLibCheck": true, + "target": "ESNext", "module": "ESNext", "moduleResolution": "bundler", "allowSyntheticDefaultImports": true diff --git a/examples/integration-scripts/witness.ts b/examples/integration-scripts/witness.ts index c91dfeec..e192a7b4 100644 --- a/examples/integration-scripts/witness.ts +++ b/examples/integration-scripts/witness.ts @@ -1,25 +1,13 @@ // This scrip also work if you start keria with no config file with witness urls import { strict as assert } from "assert"; +import signify from "signify-ts"; -let signify: any; const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("*** Starting WITNESS test ***"); - run().then(() => { - console.log("*** Test complete ***") - }); - }); - } -) - +await run() async function run() { - + await signify.ready() // Boot client const bran1 = signify.randomPasscode() const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); @@ -48,9 +36,19 @@ async function run() { op1 = await client1.operations().get(op1.name); await new Promise(resolve => setTimeout(resolve, 1000)); } - const aid1 = await client1.identifiers().get("aid1") + let aid1 = await client1.identifiers().get("aid1") console.log("AID:",aid1.prefix) assert.equal(aid1.state.b.length, 1) assert.equal(aid1.state.b[0], witness) + icpResult1 = await client1.identifiers().rotate('aid1') + op1 = await icpResult1.op() + while (!op1["done"] ) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + aid1 = await client1.identifiers().get("aid1") + assert.equal(aid1.state.b.length, 1) + assert.equal(aid1.state.b[0], witness) + } \ No newline at end of file diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index 32e61ad8..58648b2c 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -148,10 +148,9 @@ export function rotate({ throw new Error(`Invalid member combination among cuts = ${cuts}, and adds = ${adds}.`) } - let newitsetdiff = new Set([...witset].filter(x => cutset.has(x))) - let newitset = new Set() - newitsetdiff.forEach(newitset.add, newitset) - addset.forEach(newitset.add, newitset) + let newitsetdiff = new Set(_wits) + _cuts.forEach(function(v) {newitsetdiff.delete(v) }) + let newitset = new Set(function*() { yield* newitsetdiff; yield* addset; }()) if (newitset.size != (witset.size - cutset.size + addset.size)) { throw new Error(`Invalid member combination among wits = ${wits}, cuts = ${cuts}, and adds = ${adds}.`) From d3aaa4980e40ad73c0eea2d1dcc6a83398c8857b Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 9 Sep 2023 16:15:10 -0300 Subject: [PATCH 032/186] fix antipatern --- examples/integration-scripts/challenge.ts | 19 ++++--------------- examples/integration-scripts/credentials.ts | 19 ++++--------------- examples/integration-scripts/delegation.ts | 19 ++++--------------- examples/integration-scripts/multisig.ts | 4 ++-- examples/integration-scripts/randy.ts | 19 ++++--------------- .../integration-scripts/request-present.ts | 19 ++++--------------- examples/integration-scripts/salty.ts | 19 ++++--------------- 7 files changed, 26 insertions(+), 92 deletions(-) diff --git a/examples/integration-scripts/challenge.ts b/examples/integration-scripts/challenge.ts index e5f7ecd1..b8398d42 100644 --- a/examples/integration-scripts/challenge.ts +++ b/examples/integration-scripts/challenge.ts @@ -1,24 +1,13 @@ -import { strict as assert } from "assert"; +import { strict as assert } from "assert" +import signify from "signify-ts" -let signify: any; const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("*** Starting CHALLENGE test ***"); - run().then(() => { - console.log("*** Test complete ***") - }); - }); - } -) +await run() async function run() { - + await signify.ready() // Boot two clients const bran1 = signify.randomPasscode() const bran2 = signify.randomPasscode() diff --git a/examples/integration-scripts/credentials.ts b/examples/integration-scripts/credentials.ts index 772aea7f..ad28c718 100644 --- a/examples/integration-scripts/credentials.ts +++ b/examples/integration-scripts/credentials.ts @@ -1,24 +1,13 @@ -import { strict as assert } from "assert"; +import { strict as assert } from "assert" +import signify from "signify-ts" -let signify: any; const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("*** Starting CREDENTIALS test ***"); - run().then(() => { - console.log("*** Test complete ***") - }); - }); - } -) +await run() async function run() { - + await signify.ready() // Boot three clients const bran1 = signify.randomPasscode() const bran2 = signify.randomPasscode() diff --git a/examples/integration-scripts/delegation.ts b/examples/integration-scripts/delegation.ts index 8563fde1..3c6dc821 100644 --- a/examples/integration-scripts/delegation.ts +++ b/examples/integration-scripts/delegation.ts @@ -1,24 +1,13 @@ -import { strict as assert } from "assert"; +import { strict as assert } from "assert" +import signify from "signify-ts" -let signify: any; const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("*** Starting DELEGATION test ***"); - run().then(() => { - console.log("*** Test complete ***") - }); - }); - } -) +await run() async function run() { - + await signify.ready() // Boot two clients const bran1 = signify.randomPasscode() const bran2 = signify.randomPasscode() diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index addcc93d..273ffce8 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -1,5 +1,5 @@ -import { strict as assert } from "assert"; -import signify from "signify-ts"; +import { strict as assert } from "assert" +import signify from "signify-ts" const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" diff --git a/examples/integration-scripts/randy.ts b/examples/integration-scripts/randy.ts index 2b43323e..caa1ad7a 100644 --- a/examples/integration-scripts/randy.ts +++ b/examples/integration-scripts/randy.ts @@ -1,24 +1,13 @@ -import { strict as assert } from "assert"; +import { strict as assert } from "assert" +import signify from "signify-ts" -let signify: any; const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("*** Starting RANDY test ***"); - run().then(() => { - console.log("*** Test complete ***") - }); - }); - } -) +await run() async function run() { - + await signify.ready() // Boot client const bran1 = signify.randomPasscode() const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); diff --git a/examples/integration-scripts/request-present.ts b/examples/integration-scripts/request-present.ts index 295e356c..3f4d0523 100644 --- a/examples/integration-scripts/request-present.ts +++ b/examples/integration-scripts/request-present.ts @@ -1,24 +1,13 @@ -import { strict as assert } from "assert"; +import { strict as assert } from "assert" +import signify from "signify-ts" -let signify: any; const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("*** Starting REQUEST-PRESENT test ***"); - run().then(() => { - console.log("*** Test complete ***") - }); - }); - } -) +await run() async function run() { - + await signify.ready() // Boot three clients const bran1 = signify.randomPasscode() const bran2 = signify.randomPasscode() diff --git a/examples/integration-scripts/salty.ts b/examples/integration-scripts/salty.ts index cd39a643..9a222489 100644 --- a/examples/integration-scripts/salty.ts +++ b/examples/integration-scripts/salty.ts @@ -1,24 +1,13 @@ -import { strict as assert } from "assert"; +import { strict as assert } from "assert" +import signify from "signify-ts" -let signify: any; const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" -// @ts-ignore -import('signify-ts').then( - (module) => { - signify = module - signify.ready().then(() => { - console.log("*** Starting SALTY test ***"); - run().then(() => { - console.log("*** Test complete ***") - }); - }); - } -) +await run() async function run() { - + await signify.ready() // Boot client const bran1 = signify.randomPasscode() const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); From 2530a0d514e1f20761619f77959fb658f14b5c6e Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 9 Sep 2023 17:43:16 -0300 Subject: [PATCH 033/186] witness cuts adds --- examples/integration-scripts/witness.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/examples/integration-scripts/witness.ts b/examples/integration-scripts/witness.ts index e192a7b4..f542df91 100644 --- a/examples/integration-scripts/witness.ts +++ b/examples/integration-scripts/witness.ts @@ -50,5 +50,30 @@ async function run() { aid1 = await client1.identifiers().get("aid1") assert.equal(aid1.state.b.length, 1) assert.equal(aid1.state.b[0], witness) + + // Remove witness + icpResult1 = await client1.identifiers().rotate('aid1',{cuts: [witness]}) + + op1 = await icpResult1.op() + while (!op1["done"] ) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + aid1 = await client1.identifiers().get("aid1") + assert.equal(aid1.state.b.length, 0) + + // Add witness again + + icpResult1 = await client1.identifiers().rotate('aid1',{adds: [witness]}) + + op1 = await icpResult1.op() + while (!op1["done"] ) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + aid1 = await client1.identifiers().get("aid1") + assert.equal(aid1.state.b.length, 1) + assert.equal(aid1.state.b.length, 1) + assert.equal(aid1.state.b[0], witness) } \ No newline at end of file From b974d116045d5d26ba871e92db1566ca3a2d9976 Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Mon, 11 Sep 2023 12:39:30 -0400 Subject: [PATCH 034/186] refactor signify.ts --- examples/integration-scripts/challenge.ts | 1 + .../integration-scripts/package-lock.json | 102 +- package-lock.json | 5960 +++++++++++------ src/index.ts | 13 +- src/keri/app/aiding.ts | 384 ++ src/keri/app/apping.ts | 17 - src/keri/app/clienting.ts | 454 ++ src/keri/app/contacting.ts | 203 + src/keri/app/coring.ts | 193 + src/keri/app/credentialing.ts | 560 ++ src/keri/app/escrowing.ts | 33 + src/keri/app/exchanging.ts | 108 +- src/keri/app/grouping.ts | 53 + src/keri/app/notifying.ts | 71 + src/keri/app/signify.ts | 1988 ------ 15 files changed, 6178 insertions(+), 3962 deletions(-) create mode 100644 src/keri/app/aiding.ts delete mode 100644 src/keri/app/apping.ts create mode 100644 src/keri/app/clienting.ts create mode 100644 src/keri/app/contacting.ts create mode 100644 src/keri/app/coring.ts create mode 100644 src/keri/app/credentialing.ts create mode 100644 src/keri/app/escrowing.ts create mode 100644 src/keri/app/grouping.ts create mode 100644 src/keri/app/notifying.ts delete mode 100644 src/keri/app/signify.ts diff --git a/examples/integration-scripts/challenge.ts b/examples/integration-scripts/challenge.ts index b8398d42..10a0311c 100644 --- a/examples/integration-scripts/challenge.ts +++ b/examples/integration-scripts/challenge.ts @@ -92,6 +92,7 @@ async function run() { let contacts:any = [] while (!challenge_received) { contacts = await client1.contacts().list(undefined, undefined, undefined) + console.log(contacts) if (contacts[0].challenges.length > 0 ){ assert.equal(JSON.stringify(contacts[0].challenges[0].words), JSON.stringify(challenge1_small.words)) challenge_received = true diff --git a/examples/integration-scripts/package-lock.json b/examples/integration-scripts/package-lock.json index d922441a..4af04d08 100644 --- a/examples/integration-scripts/package-lock.json +++ b/examples/integration-scripts/package-lock.json @@ -84,18 +84,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.0.tgz", - "integrity": "sha512-uiPeRISaglZnaZk8vwrjQZ1CxogZeY/4IYft6gBOTqu1WhVXWmCmZMWxUv2Q/pxSvPdp1JPaO62kLOcOkMqWrw==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", + "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -116,18 +116,18 @@ } }, "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -199,9 +199,9 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -619,27 +619,27 @@ } }, "node_modules/eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", - "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -707,9 +707,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -719,9 +719,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", - "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -916,16 +916,17 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.7", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flatted": { @@ -973,9 +974,9 @@ } }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1129,6 +1130,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1141,6 +1148,15 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1599,9 +1615,9 @@ } }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, "bin": { "tsc": "bin/tsc", diff --git a/package-lock.json b/package-lock.json index 0c9a5786..2f0a464b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,6 +45,15 @@ "typescript": "^4.9.4" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -59,47 +68,104 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", + "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.17", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.17", + "@babel/types": "^7.22.17", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -116,21 +182,21 @@ "dev": true }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5", + "@babel/types": "^7.22.15", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -140,72 +206,69 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz", - "integrity": "sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", - "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz", - "integrity": "sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.5", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.21.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6", - "semver": "^6.3.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -215,23 +278,23 @@ } }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz", - "integrity": "sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -241,148 +304,137 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz", - "integrity": "sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", + "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", - "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.15" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.17.tgz", + "integrity": "sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.17" }, "engines": { "node": ">=6.9.0" @@ -392,122 +444,121 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz", - "integrity": "sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-member-expression-to-functions": "^7.21.5", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "dependencies": { - "@babel/types": "^7.20.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.17.tgz", + "integrity": "sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.17" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", - "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -540,21 +591,6 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -586,9 +622,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -598,12 +634,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -613,14 +649,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -629,28 +665,11 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -663,91 +682,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -760,26 +699,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "dev": true, "dependencies": { "@babel/compat-data": "^7.20.5", @@ -795,26 +719,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", @@ -828,33 +737,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, "engines": { "node": ">=6.9.0" }, @@ -862,22 +749,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -954,12 +825,12 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz", - "integrity": "sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -969,12 +840,27 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1008,12 +894,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1125,12 +1011,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1139,13 +1025,47 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz", - "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==", + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" @@ -1155,14 +1075,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1172,12 +1092,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1187,12 +1107,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", + "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1201,20 +1121,53 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, "engines": { @@ -1225,13 +1178,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz", - "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/template": "^7.20.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1241,12 +1194,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", - "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", + "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1256,13 +1209,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1272,12 +1225,28 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1287,13 +1256,29 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1303,13 +1288,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", - "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", + "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-flow": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1319,12 +1304,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz", - "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1334,14 +1319,30 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1351,12 +1352,28 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1366,12 +1383,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1381,13 +1398,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1397,14 +1414,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz", - "integrity": "sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", + "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-simple-access": "^7.21.5" + "@babel/helper-module-transforms": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1414,15 +1431,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1432,13 +1449,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1448,13 +1465,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1464,12 +1481,63 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1479,13 +1547,46 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", + "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1495,12 +1596,46 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", - "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1510,12 +1645,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1525,13 +1660,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz", - "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "regenerator-transform": "^0.15.1" + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1541,12 +1676,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1556,12 +1691,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1571,13 +1706,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1587,12 +1722,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1602,12 +1737,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1617,12 +1752,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1632,15 +1767,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", - "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", + "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1650,12 +1785,28 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz", - "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1665,13 +1816,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1680,39 +1831,42 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/preset-env": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz", - "integrity": "sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", - "@babel/plugin-proposal-async-generator-functions": "^7.20.7", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.21.0", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.21.0", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.21.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.15.tgz", + "integrity": "sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1723,45 +1877,62 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.21.5", - "@babel/plugin-transform-async-to-generator": "^7.20.7", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.21.0", - "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.21.5", - "@babel/plugin-transform-destructuring": "^7.21.3", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.5", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.5", - "@babel/plugin-transform-modules-systemjs": "^7.20.11", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.21.3", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.21.5", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.20.7", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.21.5", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.5", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.15", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.15", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.15", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.15", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1771,23 +1942,23 @@ } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/preset-flow": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.21.4.tgz", - "integrity": "sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", + "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-flow-strip-types": "^7.21.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-flow-strip-types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1797,32 +1968,30 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-typescript": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz", - "integrity": "sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz", + "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/plugin-transform-modules-commonjs": "^7.21.5", - "@babel/plugin-transform-typescript": "^7.21.3" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-typescript": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1832,9 +2001,9 @@ } }, "node_modules/@babel/register": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.21.0.tgz", - "integrity": "sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", + "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", @@ -1864,9 +2033,9 @@ } }, "node_modules/@babel/register/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -1889,56 +2058,56 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.5.tgz", - "integrity": "sha512-FRqFlFKNazWYykft5zvzuEl1YyTDGsIRrjV9rvxvYkUC7W/ueBng1X68Xd6uRMzAaJ0xMKn08/wem5YS1lpX8w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.15.tgz", + "integrity": "sha512-SAj8oKi8UogVi6eXQXKNPu8qZ78Yzy7zawrlTr0M+IuW/g8Qe9gVDhGcF9h1S69OyACpYoLxEzpjs1M15sI5wQ==", "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", + "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.17", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1947,13 +2116,13 @@ } }, "node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", + "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2032,9 +2201,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2113,153 +2282,251 @@ } }, "node_modules/@jest/console": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", + "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "node-notifier": { + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", + "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/reporters": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.6.3", + "jest-config": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-resolve-dependencies": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "jest-watcher": "^29.6.4", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { "optional": true } } }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.5.0" + "jest-mock": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", "dev": true, "dependencies": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" + "expect": "^29.6.4", + "jest-snapshot": "^29.6.4" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", + "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", "dev": true, "dependencies": { - "jest-get-type": "^29.4.3" + "jest-get-type": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", + "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", "dev": true, "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/types": "^29.6.3", + "jest-mock": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", + "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", + "@jest/console": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -2267,13 +2534,13 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -2291,25 +2558,74 @@ } } }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.25.16" + "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", + "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" }, @@ -2318,13 +2634,13 @@ } }, "node_modules/@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", + "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", "dev": true, "dependencies": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/console": "^29.6.4", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -2333,14 +2649,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", + "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", "dev": true, "dependencies": { - "@jest/test-result": "^29.5.0", + "@jest/test-result": "^29.6.4", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", + "jest-haste-map": "^29.6.4", "slash": "^3.0.0" }, "engines": { @@ -2348,22 +2664,22 @@ } }, "node_modules/@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", + "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", + "jest-haste-map": "^29.6.4", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -2373,13 +2689,62 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -2390,6 +2755,55 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -2405,9 +2819,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "engines": { "node": ">=6.0.0" } @@ -2427,21 +2841,15 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@jsdoc/salty": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", @@ -2455,9 +2863,9 @@ } }, "node_modules/@mermaid-js/mermaid-cli": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.3.0.tgz", - "integrity": "sha512-pbLhEJL99HHKDPUTnswotqfy+Zm/TsX9oseSNikrz07e47jq+UpVBJ22e9Co5qxPlP/E9VKoZHxkIz/A6M/2Ng==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.4.0.tgz", + "integrity": "sha512-sXohfGD6xgR8VEKvLdvSCndFaFNVTlyXjgZlJ3x8U3/J0V2VTfLIZO94Gt8KUPUccFWci8dRYDGG0fQerB+aIA==", "dev": true, "dependencies": { "chalk": "^5.0.1", @@ -2471,35 +2879,14 @@ "node": "^14.13 || >=16.0" } }, - "node_modules/@mermaid-js/mermaid-cli/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@mermaid-js/mermaid-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { "node": ">= 8" @@ -2528,9 +2915,9 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "version": "1.0.0-next.23", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", "dev": true }, "node_modules/@puppeteer/browsers": { @@ -2697,9 +3084,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, "node_modules/@sinonjs/commons": { @@ -2712,9 +3099,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.1.0.tgz", - "integrity": "sha512-w1qd368vtrwttm1PRJWPW1QHlbmHrVDGs1eBH/jZvRPUFS4MNXV9Q33EQdjOdeAxZ7O8+3wM7zxztm2nfUSyKw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" @@ -2844,9 +3231,9 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -2876,12 +3263,12 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.5.tgz", - "integrity": "sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/eslint-visitor-keys": { @@ -2973,6 +3360,21 @@ "@types/yargs-parser": "*" } }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@types/jest/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -2986,6 +3388,24 @@ "node": ">=8" } }, + "node_modules/@types/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@types/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@types/jest/node_modules/diff-sequences": { "version": "25.2.6", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", @@ -3041,9 +3461,9 @@ "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, "node_modules/@types/json5": { @@ -3053,28 +3473,28 @@ "dev": true }, "node_modules/@types/libsodium-wrappers": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.10.tgz", - "integrity": "sha512-BqI9B92u+cM3ccp8mpHf+HzJ8fBlRwdmyd6+fz3p99m3V6ifT5O3zmOMi612PGkpeFeG/G6loxUnzlDNhfjPSA==" + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz", + "integrity": "sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg==" }, "node_modules/@types/libsodium-wrappers-sumo": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.5.tgz", - "integrity": "sha512-CL7rmLxw28H/FpFUnMu5BzzRsE+ICxHBpRoaY8ks+3HMsCJdA/Vp809sj+qNhw64Ht0OEnfoN3BC1sHwagoVaw==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.6.tgz", + "integrity": "sha512-86R2bYU/DKVWw3q2btxTUlFO3lYKLyodbCsxxSybNQonPzPxmQkNtKCYmkV0dWQ9ZQsGIOzNNPU9RjJUALjoEg==", "dependencies": { "@types/libsodium-wrappers": "*" } }, "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.194", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz", - "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", "dev": true }, "node_modules/@types/markdown-it": { @@ -3094,9 +3514,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.16.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.10.tgz", - "integrity": "sha512-sMo3EngB6QkMBlB9rBe1lFdKSLqljyWPPWv6/FzSxh/IDlyVWSzE9RiF4eAuerQHybrWdqBgAGb03PM89qOasA==" + "version": "18.17.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", + "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -3111,9 +3531,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", "dev": true }, "node_modules/@types/resolve": { @@ -3138,9 +3558,9 @@ "dev": true }, "node_modules/@types/urlsafe-base64": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/@types/urlsafe-base64/-/urlsafe-base64-1.0.28.tgz", - "integrity": "sha512-TG5dKbqx75FUTXfiARIPvLvMCImVYJbKM+Fvy9HgpxkunHnMHNAn78xpvcZxIbPITyRzf0b2Gl8fnd1Ja3p1eQ==", + "version": "1.0.29", + "resolved": "https://registry.npmjs.org/@types/urlsafe-base64/-/urlsafe-base64-1.0.29.tgz", + "integrity": "sha512-RAowJfSG6zhSxDFl7/QC/vGeWIyJLf7pqFoh+iLP0Y/GOsH1ddmZvo2oFug/Z5pGfUM05NMQFCnzw3sSmMA72A==", "dev": true, "dependencies": { "@types/node": "*" @@ -3568,15 +3988,12 @@ "dev": true }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -3616,12 +4033,12 @@ } }, "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" } }, "node_modules/arr-diff": { @@ -3671,15 +4088,15 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -3707,15 +4124,34 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3726,14 +4162,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3744,16 +4180,37 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/asn1": { @@ -3784,13 +4241,13 @@ "dev": true }, "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", "dev": true, "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" + "object.assign": "^4.1.4", + "util": "^0.10.4" } }, "node_modules/assert-plus": { @@ -3803,18 +4260,18 @@ } }, "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, "dependencies": { - "inherits": "2.0.1" + "inherits": "2.0.3" } }, "node_modules/assign-symbols": { @@ -3863,6 +4320,15 @@ ], "optional": true }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -3924,21 +4390,21 @@ "dev": true }, "node_modules/axe-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.1.tgz", - "integrity": "sha512-sCXXUhA+cljomZ3ZAwb8i1p3oOlkABzPy08ZDAoGcYuvtBPlQ1Ytde129ArXyHWDhfeewq7rlx9F+cUx2SSlkg==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", + "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" } }, "node_modules/babel-core": { @@ -3981,15 +4447,15 @@ } }, "node_modules/babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", + "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", "dev": true, "dependencies": { - "@jest/transform": "^29.5.0", + "@jest/transform": "^29.6.4", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -4001,6 +4467,55 @@ "@babel/core": "^7.8.0" } }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/babel-plugin-annotate-pure-calls": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz", @@ -4035,10 +4550,35 @@ "node": ">=8" } }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -4051,62 +4591,86 @@ } }, "node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "@babel/helper-define-polyfill-provider": "^0.4.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-transform-rename-import": { @@ -4139,12 +4703,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -4236,6 +4800,16 @@ "node": ">=8" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -4416,9 +4990,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, "funding": [ { @@ -4428,13 +5002,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -4634,9 +5212,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001487", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001487.tgz", - "integrity": "sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA==", + "version": "1.0.30001532", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", + "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", "dev": true, "funding": [ { @@ -4695,16 +5273,12 @@ } }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" @@ -4811,9 +5385,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, "node_modules/class-utils": { @@ -4961,6 +5535,39 @@ "node": ">=12" } }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -5012,9 +5619,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "node_modules/collection-visit": { @@ -5039,21 +5646,18 @@ } }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/colord": { @@ -5084,12 +5688,12 @@ } }, "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "engines": { - "node": ">= 10" + "node": ">=14" } }, "node_modules/commondir": { @@ -5233,12 +5837,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.30.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.2.tgz", - "integrity": "sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==", + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", + "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", "dev": true, "dependencies": { - "browserslist": "^4.21.5" + "browserslist": "^4.21.10" }, "funding": { "type": "opencollective", @@ -5246,9 +5850,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.30.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.2.tgz", - "integrity": "sha512-p/npFUJXXBkCCTIlEGBdghofn00jWG6ZOtdoIXSJmAu2QBvN0IqpZXWweOytcwE6cfx8ZvVUy1vw8zxhe4Y2vg==", + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.2.tgz", + "integrity": "sha512-Y2rxThOuNywTjnX/PgA5vWM6CZ9QB9sz9oGeCixV8MqXZO70z/5SHzf9EeBrEBK0PN36DnEBBu9O/aGWzKuMZQ==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5262,19 +5866,39 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "path-type": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/create-ecdh": { @@ -5360,21 +5984,6 @@ "node": ">=4" } }, - "node_modules/create-jest-runner/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/create-jest-runner/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, "node_modules/create-jest-runner/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -5436,49 +6045,11 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/cross-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/cross-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/cross-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { @@ -5518,9 +6089,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", - "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "dev": true, "engines": { "node": "^10 || ^12 || >=14" @@ -5723,9 +6294,9 @@ "dev": true }, "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", + "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", "dev": true }, "node_modules/damerau-levenshtein": { @@ -5757,6 +6328,32 @@ "whatwg-url": "^7.0.0" } }, + "node_modules/data-urls/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -5798,38 +6395,17 @@ } }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-equal": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", - "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.0", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, "node_modules/deep-is": { @@ -5897,10 +6473,19 @@ "node": ">=0.4.0" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, "dependencies": { "inherits": "^2.0.1", @@ -5931,9 +6516,9 @@ } }, "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -6025,6 +6610,12 @@ "webidl-conversions": "^4.0.2" } }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", @@ -6119,9 +6710,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.396", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.396.tgz", - "integrity": "sha512-pqKTdqp/c5vsrc0xUPYXTDBo9ixZuGY8es4ZOjjd6HD6bFYbu5QA09VoW3fkY4LF1T0zYk86lN6bZnNlBuOpdQ==", + "version": "1.4.513", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz", + "integrity": "sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==", "dev": true }, "node_modules/elliptic": { @@ -6245,21 +6836,22 @@ } }, "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "dependencies": { - "ansi-colors": "^4.1.1" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8.6" } }, "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" @@ -6287,18 +6879,19 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -6318,14 +6911,18 @@ "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -6334,24 +6931,26 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "node_modules/es-iterator-helpers": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", + "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", "dev": true, "dependencies": { + "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" } }, "node_modules/es-set-tostringtag": { @@ -6566,14 +7165,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -6627,26 +7226,28 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "dev": true, "dependencies": { "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", "array.prototype.flat": "^1.3.1", "array.prototype.flatmap": "^1.3.1", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", + "eslint-module-utils": "^2.8.0", "has": "^1.0.3", - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" @@ -6677,9 +7278,9 @@ } }, "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -6722,9 +7323,9 @@ "dev": true }, "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -6752,15 +7353,16 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", @@ -6770,7 +7372,7 @@ "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", + "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "engines": { @@ -6819,9 +7421,9 @@ } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -6882,28 +7484,77 @@ "@babel/highlight": "^7.10.4" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">= 4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" } }, "node_modules/eslint/node_modules/type-fest": { @@ -7215,16 +7866,16 @@ "dev": true }, "node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" + "@jest/expect-utils": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -7366,15 +8017,15 @@ "dev": true }, "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -7488,6 +8139,13 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -7601,9 +8259,9 @@ } }, "node_modules/find-cache-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -7623,16 +8281,17 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.7", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flat-cache/node_modules/rimraf": { @@ -7657,9 +8316,9 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.206.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", - "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", + "version": "0.216.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.216.1.tgz", + "integrity": "sha512-wstw46/C/8bRv/8RySCl15lK376j8DHxm41xFjD9eVL+jSS1UmVpbdLdA0LzGuS2v5uGgQiBLEj6mgSJQwW+MA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -7753,15 +8412,15 @@ } }, "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", "engines": { "node": "*" }, "funding": { "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fragment-cache": { @@ -7897,6 +8556,20 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7904,15 +8577,15 @@ "dev": true }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -8428,9 +9101,9 @@ } }, "node_modules/humanize-duration": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.28.0.tgz", - "integrity": "sha512-jMAxraOOmHuPbffLVDKkEKi/NeG8dMqP8lGRd6Tbf7JgAeG33jjgPWDbXXU7ypCI0o+oNKJFgbSB9FKVdWNI2A==", + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz", + "integrity": "sha512-G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==", "dev": true }, "node_modules/husky": { @@ -8604,6 +9277,55 @@ "node": ">=8.0.0" } }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -8648,22 +9370,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -8684,6 +9390,21 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -8761,9 +9482,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -8850,6 +9571,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -8868,6 +9601,21 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -9041,16 +9789,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -9154,42 +9898,66 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "semver": "^7.5.4" }, "engines": { - "node": ">=8" + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/istanbul-lib-instrument/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-source-maps": { @@ -9207,9 +9975,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -9219,21 +9987,33 @@ "node": ">=8" } }, + "node_modules/iterator.prototype": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", + "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.3" + } + }, "node_modules/javascript-natural-sort": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" }, "node_modules/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", + "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", "dev": true, "dependencies": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/core": "^29.6.4", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.5.0" + "jest-cli": "^29.6.4" }, "bin": { "jest": "bin/jest.js" @@ -9251,12 +10031,13 @@ } }, "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", + "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", "dev": true, "dependencies": { "execa": "^5.0.0", + "jest-util": "^29.6.3", "p-limit": "^3.1.0" }, "engines": { @@ -9264,28 +10045,28 @@ } }, "node_modules/jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", + "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", "dev": true, "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", + "jest-each": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", + "pretty-format": "^29.6.3", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -9294,22 +10075,71 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", + "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", "dev": true, "dependencies": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/core": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", + "jest-config": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -9328,32 +10158,81 @@ } } }, - "node_modules/jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.0", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", + "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-jest": "^29.6.4", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", + "jest-circus": "^29.6.4", + "jest-environment-node": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -9373,25 +10252,123 @@ } } }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", + "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", + "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" @@ -9401,21 +10378,70 @@ } }, "node_modules/jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", + "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" + "jest-get-type": "^29.6.3", + "jest-util": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-environment-jsdom": { "version": "25.5.0", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", @@ -9503,6 +10529,21 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-environment-jsdom/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -9516,6 +10557,24 @@ "node": ">=8" } }, + "node_modules/jest-environment-jsdom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-environment-jsdom/node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -9572,6 +10631,30 @@ "node": ">= 8.3" } }, + "node_modules/jest-environment-jsdom/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-environment-jsdom/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/jest-environment-jsdom/node_modules/stack-utils": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", @@ -9585,17 +10668,17 @@ } }, "node_modules/jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", + "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -9611,29 +10694,29 @@ } }, "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", + "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -9829,12 +10912,6 @@ "@types/istanbul-lib-report": "*" } }, - "node_modules/jest-jasmine2/node_modules/@types/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", - "dev": true - }, "node_modules/jest-jasmine2/node_modules/@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", @@ -9850,6 +10927,21 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-jasmine2/node_modules/babel-jest": { "version": "25.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", @@ -9948,15 +11040,33 @@ "wrap-ansi": "^6.2.0" } }, - "node_modules/jest-jasmine2/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", "dev": true, "engines": { @@ -10344,6 +11454,21 @@ "node": ">= 8.3" } }, + "node_modules/jest-jasmine2/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/jest-jasmine2/node_modules/pretty-format": { "version": "25.5.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", @@ -10366,9 +11491,9 @@ "dev": true }, "node_modules/jest-jasmine2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -10454,46 +11579,95 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", + "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", "dev": true, "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -10501,15 +11675,64 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.5.0" + "jest-util": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10533,26 +11756,26 @@ } }, "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", + "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", + "jest-haste-map": "^29.6.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -10562,43 +11785,92 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", + "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", "dev": true, "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.6.4" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", + "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", "dev": true, "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/console": "^29.6.4", + "@jest/environment": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", + "jest-docblock": "^29.6.3", + "jest-environment-node": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-leak-detector": "^29.6.3", + "jest-message-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-util": "^29.6.3", + "jest-watcher": "^29.6.4", + "jest-worker": "^29.6.4", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -10606,119 +11878,360 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", + "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/globals": "^29.6.4", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-serializer": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", + "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-snapshot": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", + "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.3", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", + "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "picomatch": "^2.2.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-serializer": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", - "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8.3" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", + "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.5.0" + "pretty-format": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -10731,6 +12244,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-watch-typeahead": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.5.0.tgz", @@ -10826,6 +12373,21 @@ "node": ">=6" } }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-watch-typeahead/node_modules/astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -10848,6 +12410,24 @@ "node": ">=8" } }, + "node_modules/jest-watch-typeahead/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-watch-typeahead/node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -10918,6 +12498,30 @@ "node": ">= 8.3" } }, + "node_modules/jest-watch-typeahead/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/jest-watch-typeahead/node_modules/stack-utils": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", @@ -10956,32 +12560,81 @@ } }, "node_modules/jest-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", + "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", "dev": true, "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.5.0", + "jest-util": "^29.6.3", "string-length": "^4.0.1" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.5.0", + "jest-util": "^29.6.3", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -11297,6 +12950,53 @@ } } }, + "node_modules/jsdom/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -11309,6 +13009,12 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -11400,18 +13106,29 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" } }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -11569,6 +13286,24 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, + "node_modules/lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.invokemap": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", + "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", + "dev": true + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -11581,6 +13316,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.pullall": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", + "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", + "dev": true + }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -11599,6 +13340,12 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true + }, "node_modules/log-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", @@ -11637,21 +13384,6 @@ "node": ">=4" } }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, "node_modules/log-symbols/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -11815,29 +13547,53 @@ } }, "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -11905,15 +13661,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/markdown-it/node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", @@ -11927,15 +13674,15 @@ } }, "node_modules/mathjs": { - "version": "11.8.2", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.8.2.tgz", - "integrity": "sha512-ZePu0oDbM0vuFExikIMY/9syjo/jbgNbX6ti+iMdaALDuxciMCsXIslGDBEn7QCpCWYBiVCYmc0lsmk5bwHBdQ==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", + "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "complex.js": "^2.1.1", "decimal.js": "^10.4.3", "escape-latex": "^1.2.0", - "fraction.js": "^4.2.0", + "fraction.js": "4.3.4", "javascript-natural-sort": "^0.7.1", "seedrandom": "^3.0.5", "tiny-emitter": "^2.1.0", @@ -12273,6 +14020,13 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -12353,6 +14107,25 @@ "node": ">= 0.10.5" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -12491,9 +14264,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/nofilter": { @@ -12517,9 +14290,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -12571,9 +14344,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz", - "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, "node_modules/oauth-sign": { @@ -12688,22 +14461,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -12744,28 +14501,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -12774,14 +14531,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12800,14 +14569,14 @@ } }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -12864,17 +14633,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -12902,6 +14671,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/ora/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -12915,6 +14699,24 @@ "node": ">=8" } }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -13243,9 +15045,9 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" @@ -13291,9 +15093,9 @@ } }, "node_modules/postcss": { - "version": "8.4.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", - "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "version": "8.4.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", + "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", "dev": true, "funding": [ { @@ -13524,9 +15326,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", "dev": true, "dependencies": { "icss-utils": "^5.0.0", @@ -13835,12 +15637,12 @@ } }, "node_modules/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -13848,18 +15650,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/pretty-ms": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", @@ -13955,21 +15745,6 @@ "node": ">=4" } }, - "node_modules/progress-estimator/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/progress-estimator/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, "node_modules/progress-estimator/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -14164,67 +15939,39 @@ } } }, - "node_modules/puppeteer-core/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "node_modules/puppeteer-core/node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "dependencies": { + "node-fetch": "2.6.7" } }, - "node_modules/puppeteer/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/puppeteer/node_modules/cosmiconfig": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "node_modules/puppeteer-core/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=14" + "node": "4.x || >=6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/puppeteer/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" + "peerDependencies": { + "encoding": "^0.1.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", + "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", "dev": true, "funding": [ { @@ -14238,22 +15985,18 @@ ] }, "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/querystring-es3": { @@ -14415,10 +16158,30 @@ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "dependencies": { - "resolve": "^1.1.6" + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regenerate": { @@ -14440,14 +16203,14 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" @@ -14635,6 +16398,15 @@ "node": ">=0.8" } }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/request/node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -14682,12 +16454,12 @@ } }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -14933,6 +16705,21 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/rollup-plugin-typescript2/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/rollup-plugin-typescript2/node_modules/resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -14945,6 +16732,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/rollup-plugin-typescript2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/rollup-plugin-typescript2/node_modules/tslib": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", @@ -15055,6 +16851,24 @@ "node": ">=6" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -15343,9 +17157,9 @@ } }, "node_modules/sane/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -15410,9 +17224,9 @@ } }, "node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -15593,9 +17407,9 @@ "optional": true }, "node_modules/shiki": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz", - "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", + "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", "dev": true, "dependencies": { "ansi-sequence-parser": "^1.1.0", @@ -15625,14 +17439,14 @@ "dev": true }, "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", "dev": true, "dependencies": { "@polka/url": "^1.0.0-next.20", "mrmime": "^1.0.0", - "totalist": "^1.0.0" + "totalist": "^3.0.0" }, "engines": { "node": ">= 10" @@ -15697,6 +17511,39 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -16184,18 +18031,6 @@ "node": ">=0.10.0" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -16343,18 +18178,18 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", + "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", "side-channel": "^1.0.4" }, "funding": { @@ -16362,14 +18197,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -16379,28 +18214,28 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16556,6 +18391,15 @@ "node": ">=10.13.0" } }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -16921,9 +18765,9 @@ } }, "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "engines": { "node": ">=6" @@ -16944,13 +18788,9 @@ } }, "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/ts-migrate": { "version": "0.1.35", @@ -16989,6 +18829,21 @@ "typescript": ">4.0" } }, + "node_modules/ts-migrate-plugins/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/ts-migrate-plugins/node_modules/ast-types": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", @@ -17034,6 +18889,40 @@ "node": ">=0.10.0" } }, + "node_modules/ts-migrate-plugins/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-migrate-plugins/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/ts-migrate-plugins/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -17204,6 +19093,21 @@ "typescript": ">4.0" } }, + "node_modules/ts-migrate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/ts-migrate/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -17215,6 +19119,24 @@ "wrap-ansi": "^6.2.0" } }, + "node_modules/ts-migrate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-migrate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/ts-migrate/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -17454,9 +19376,9 @@ } }, "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -17788,12 +19710,6 @@ "@types/istanbul-lib-report": "*" } }, - "node_modules/tsdx/node_modules/@types/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", - "dev": true - }, "node_modules/tsdx/node_modules/@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", @@ -17864,6 +19780,21 @@ } } }, + "node_modules/tsdx/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/tsdx/node_modules/astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -17922,6 +19853,17 @@ "node": ">= 8.3" } }, + "node_modules/tsdx/node_modules/babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, "node_modules/tsdx/node_modules/babel-plugin-polyfill-regenerator": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.0.4.tgz", @@ -17984,6 +19926,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tsdx/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/tsdx/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -18008,18 +19966,21 @@ } }, "node_modules/tsdx/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/tsdx/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/tsdx/node_modules/convert-source-map": { @@ -18028,6 +19989,22 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, + "node_modules/tsdx/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tsdx/node_modules/diff-sequences": { "version": "25.2.6", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", @@ -18185,6 +20162,21 @@ "node": ">=4" } }, + "node_modules/tsdx/node_modules/eslint/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -18202,9 +20194,9 @@ } }, "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -18229,9 +20221,9 @@ } }, "node_modules/tsdx/node_modules/eslint/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -18442,9 +20434,9 @@ } }, "node_modules/tsdx/node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -18644,9 +20636,9 @@ } }, "node_modules/tsdx/node_modules/jest-environment-node/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -18964,9 +20956,9 @@ } }, "node_modules/tsdx/node_modules/jest-snapshot/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -19096,6 +21088,30 @@ "node": ">= 0.8.0" } }, + "node_modules/tsdx/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsdx/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/tsdx/node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -19123,9 +21139,9 @@ } }, "node_modules/tsdx/node_modules/node-notifier/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "optional": true, "bin": { @@ -19210,6 +21226,12 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, + "node_modules/tsdx/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, "node_modules/tsdx/node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -19257,6 +21279,21 @@ "node": ">=4" } }, + "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, "node_modules/tsdx/node_modules/stack-utils": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", @@ -19367,9 +21404,9 @@ } }, "node_modules/tsdx/node_modules/ts-jest/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -19521,9 +21558,9 @@ } }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "node_modules/tsutils": { @@ -19604,6 +21641,57 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -19982,21 +22070,6 @@ "node": ">=4" } }, - "node_modules/updatable-log/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/updatable-log/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, "node_modules/updatable-log/node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -20180,19 +22253,19 @@ "dev": true }, "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.2.tgz", + "integrity": "sha512-7yIgNnrST44S7PJ5+jXbdIupfU1nWUdQJBFBeJRclPXiWgCvrSq5Frw8lr/i//n5sqDfzoKmBymMS81l4U/7cg==", "dev": true, "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "punycode": "^1.4.1", + "qs": "^6.11.2" } }, "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, "node_modules/urlsafe-base64": { @@ -20240,9 +22313,9 @@ } }, "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "dev": true }, "node_modules/v8-compile-cache-lib": { @@ -20339,6 +22412,12 @@ "xml-name-validator": "^3.0.0" } }, + "node_modules/w3c-xmlserializer/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -20494,6 +22573,25 @@ "node": ">=0.10.0" } }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/watchpack-chokidar2/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -20676,15 +22774,14 @@ "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==" }, "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", + "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", @@ -20731,20 +22828,27 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", - "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", + "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", "commander": "^7.2.0", + "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", - "lodash": "^4.17.20", + "is-plain-object": "^5.0.0", + "lodash.debounce": "^4.0.8", + "lodash.escape": "^4.0.1", + "lodash.flatten": "^4.4.0", + "lodash.invokemap": "^4.6.0", + "lodash.pullall": "^4.2.0", + "lodash.uniqby": "^4.7.0", "opener": "^1.5.2", - "sirv": "^1.0.7", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { @@ -20755,9 +22859,9 @@ } }, "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -20766,6 +22870,45 @@ "node": ">=0.4.0" } }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -20993,9 +23136,9 @@ } }, "node_modules/whatwg-fetch": { - "version": "3.6.17", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz", - "integrity": "sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==" + "version": "3.6.19", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" }, "node_modules/whatwg-mimetype": { "version": "2.3.0", @@ -21004,14 +23147,12 @@ "dev": true }, "node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "node_modules/which": { @@ -21045,6 +23186,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", @@ -21067,17 +23234,16 @@ "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -21087,9 +23253,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -21204,16 +23370,16 @@ } }, "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { diff --git a/src/index.ts b/src/index.ts index 6306d2ca..ed1088a2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,12 +14,17 @@ export const ready:() => Promise = (async() => { }) export * from './keri/app/habery' -export * from './keri/app/signify' -export * from './keri/app/apping' export * from './keri/app/controller' -export * from './keri/app/habery' + +export * from './keri/app/aiding' +export * from './keri/app/clienting' +export * from './keri/app/contacting' +export * from './keri/app/coring' +export * from './keri/app/credentialing' +export * from './keri/app/escrowing' export * from './keri/app/exchanging' -export * from './keri/app/signify' +export * from './keri/app/grouping' +export * from './keri/app/notifying' export * from './keri/core/authing' export * from './keri/core/cigar' diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts new file mode 100644 index 00000000..7966ef3c --- /dev/null +++ b/src/keri/app/aiding.ts @@ -0,0 +1,384 @@ +import { SignifyClient, EventResult } from "./clienting" +import { Tier} from "../core/salter" +import {Algos} from '../core/manager' +import {incept, interact, reply, rotate} from "../core/eventing" +import {b,Serials, Versionage} from "../core/core" +import {Tholder} from "../core/tholder" +import {MtrDex} from "../core/matter" +import {Serder} from "../core/serder" +import {parseRangeHeaders} from "../core/httping" + +/** Arguments required to create an identfier */ +export interface CreateIdentiferArgs { + transferable?: boolean, + isith?: string | number | string[], + nsith?: string | number | string[], + wits?: string[], + toad?: number, + proxy?: string, + delpre?: string, + dcode?: string, + data?: any, + algo?: Algos, + pre?: string, + states?: any[], + rstates?: any[] + prxs?: any[], + nxts?: any[], + mhab?: any, + keys?: any[], + ndigs?: any[], + bran?: string, + count?: number, + ncount?: number, + tier?: Tier +} + +/** Arguments required to rotate an identfier */ +export interface RotateIdentifierArgs { + transferable?: boolean, + nsith?: string | number | string[], + toad?: number, + cuts?: string[], + adds?: string[], + data?: Array, + ncode?: string, + ncount?: number, + ncodes?: string[], + states?: any[], + rstates?: any[] +} + +/** Identifier */ +export class Identifier { + public client: SignifyClient + /** + * Identifier + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * List managed identifiers + * @async + * @param {number} [start=0] Start index of list of notifications, defaults to 0 + * @param {number} [end=24] End index of list of notifications, defaults to 24 + * @returns {Promise} A promise to the list of managed identifiers + */ + async list(start:number=0, end:number=24): Promise { + let extraHeaders = new Headers() + extraHeaders.append('Range', `aids=${start}-${end}`) + + let path = `/identifiers` + let data = null + let method = 'GET' + let res = await this.client.fetch(path, method, data, extraHeaders) + + let cr = res.headers.get('content-range') + let range = parseRangeHeaders(cr,"aids") + let aids = await res.json() + + return { + start: range.start, + end: range.end, + total: range.total, + aids: aids + } + } + + /** + * Get information for a managed identifier + * @async + * @param {string} name Name or alias of the identifier + * @returns {Promise} A promise to the identifier information + */ + async get(name: string): Promise { + let path = `/identifiers/${name}` + let data = null + let method = 'GET' + let res = await this.client.fetch(path, method, data) + return await res.json() + } + + /** + * Create a managed identifier + * @async + * @param {string} name Name or alias of the identifier + * @param {CreateIdentiferArgs} [kargs] Optional parameters to create the identifier + * @returns {EventResult} The inception result + */ + create(name: string, kargs:CreateIdentiferArgs={}): EventResult { + + const algo = kargs.algo == undefined ? Algos.salty : kargs.algo + + let transferable = kargs.transferable ?? true + let isith = kargs.isith ?? "1" + let nsith = kargs.nsith ?? "1" + let wits = kargs.wits ?? [] + let toad = kargs.toad ?? 0 + let dcode = kargs.dcode ?? MtrDex.Blake3_256 + let proxy = kargs.proxy + let delpre = kargs.delpre + let data = kargs.data != undefined ? [kargs.data] : [] + let pre = kargs.pre + let states = kargs.states + let rstates = kargs.rstates + let prxs = kargs.prxs + let nxts = kargs.nxts + let mhab = kargs.mhab + let _keys = kargs.keys + let _ndigs = kargs.ndigs + let bran = kargs.bran + let count = kargs.count + let ncount = kargs.ncount + let tier = kargs.tier + + let xargs = { + transferable: transferable, + isith: isith, + nsith: nsith, + wits: wits, + toad: toad, + proxy: proxy, + delpre: delpre, + dcode: dcode, + data: data, + algo: algo, + pre: pre, + prxs: prxs, + nxts: nxts, + mhab: mhab, + states: states, + rstates: rstates, + keys: _keys, + ndigs: _ndigs, + bran: bran, + count: count, + ncount: ncount, + tier: tier + } + + let keeper = this.client.manager!.new(algo, this.client.pidx, xargs) + let [keys, ndigs] = keeper!.incept(transferable) + wits = wits !== undefined ? wits : [] + let serder: Serder|undefined = undefined + if (delpre == undefined) { + serder = incept({ + keys: keys!, + isith: isith, + ndigs: ndigs, + nsith: nsith, + toad: toad, + wits: wits, + cnfg: [], + data: data, + version: Versionage, + kind: Serials.JSON, + code: dcode, + intive: false + }) + + } else { + serder = incept({ + keys: keys!, + isith: isith, + ndigs: ndigs, + nsith: nsith, + toad: toad, + wits: wits, + cnfg: [], + data: data, + version: Versionage, + kind: Serials.JSON, + code: dcode, + intive: false, + delpre: delpre + }) + } + + let sigs = keeper!.sign(b(serder.raw)) + var jsondata: any = { + name: name, + icp: serder.ked, + sigs: sigs, + proxy: proxy, + smids: states != undefined ? states.map(state => state.i) : undefined, + rmids: rstates != undefined ? rstates.map(state => state.i) : undefined + } + jsondata[algo] = keeper.params() + + this.client.pidx = this.client.pidx + 1 + let res = this.client.fetch("/identifiers", "POST", jsondata) + return new EventResult(serder, sigs, res) + } + + /** + * Generate an interaction event in a managed identifier + * @async + * @param {string} name Name or alias of the identifier + * @param {any} [data] Option data to be anchored in the interaction event + * @returns {Promise} A promise to the interaction event result + */ + async interact(name: string, data?: any): Promise { + + let hab = await this.get(name) + let pre: string = hab.prefix + + let state = hab.state + let sn = Number(state.s) + let dig = state.d + + data = Array.isArray(data) ? data : [data] + + let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) + let keeper = this.client!.manager!.get(hab) + let sigs = keeper.sign(b(serder.raw)) + + let jsondata: any = { + ixn: serder.ked, + sigs: sigs, + } + jsondata[keeper.algo] = keeper.params() + + let res = this.client.fetch("/identifiers/" + name + "?type=ixn", "PUT", jsondata) + return new EventResult(serder, sigs, res) + } + + + /** + * Generate a rotation event in a managed identifier + * @param {string} name Name or alias of the identifier + * @param {RotateIdentifierArgs} [kargs] Optional parameters requiered to generate the rotation event + * @returns {Promise} A promise to the rotation event result + */ + async rotate(name: string, kargs: RotateIdentifierArgs={}): Promise { + + let transferable = kargs.transferable ?? true + let ncode = kargs.ncode ?? MtrDex.Ed25519_Seed + let ncount = kargs.ncount ?? 1 + + let hab = await this.get(name) + let pre = hab.prefix + + let state = hab.state + let count = state.k.length + let dig = state.d + let ridx = (Number(state.s) + 1) + let wits = state.b + let isith = state.kt + + let nsith = kargs.nsith ?? isith + + // if isith is None: # compute default from newly rotated verfers above + if (isith == undefined) isith = `${Math.max(1, Math.ceil(count / 2)).toString(16)}` + + // if nsith is None: # compute default from newly rotated digers above + if (nsith == undefined) nsith = `${Math.max(1, Math.ceil(ncount / 2)).toString(16)}` + + let cst = new Tholder({sith: isith}).sith // current signing threshold + let nst = new Tholder({sith: nsith}).sith // next signing threshold + + // Regenerate next keys to sign rotation event + let keeper = this.client.manager!.get(hab) + // Create new keys for next digests + let ncodes = kargs.ncodes ?? new Array(ncount).fill(ncode) + + let states = kargs.states == undefined? [] : kargs.states + let rstates = kargs.rstates == undefined? [] : kargs.rstates + let [keys, ndigs] = keeper!.rotate(ncodes, transferable, states, rstates) + + let cuts = kargs.cuts ?? [] + let adds = kargs.adds ?? [] + let data = kargs.data != undefined ? [kargs.data] : [] + let toad = kargs.toad + let serder = rotate({ + pre: pre, + keys: keys, + dig: dig, + sn: ridx, + isith: cst, + nsith: nst, + ndigs: ndigs, + toad: toad, + wits: wits, + cuts: cuts, + adds: adds, + data: data + }) + + let sigs = keeper.sign(b(serder.raw)) + + var jsondata: any = { + rot: serder.ked, + sigs: sigs, + smids: states != undefined ? states.map(state => state.i) : undefined, + rmids: rstates != undefined ? rstates.map(state => state.i) : undefined + } + jsondata[keeper.algo] = keeper.params() + + let res = this.client.fetch("/identifiers/" + name, "PUT", jsondata) + return new EventResult(serder, sigs, res) + } + + /** + * Authorize an endpoint provider in a given role for a managed identifier + * @remarks + * Typically used to authorize the agent to be the endpoint provider for the identifier in the role of `agent` + * @async + * @param {string} name Name or alias of the identifier + * @param {string} role Authorized role for eid + * @param {string} [eid] Optional qb64 of endpoint provider to be authorized + * @param {string} [stamp=now] Optional date-time-stamp RFC-3339 profile of iso8601 datetime. Now is the default if not provided + * @returns {Promise} A promise to the result of the authorization + */ + async addEndRole(name: string, role: string, eid?: string, stamp?: string): Promise { + const hab = await this.get(name) + const pre = hab.prefix + + const rpy = this.makeEndRole(pre, role, eid, stamp) + const keeper = this.client.manager!.get(hab) + const sigs = keeper.sign(b(rpy.raw)) + + const jsondata = { + rpy: rpy.ked, + sigs: sigs + } + + let res = await this.client.fetch("/identifiers/" + name + "/endroles", "POST", jsondata) + return await res.json() + + } + + /** + * Generate an /end/role/add reply message + * @param {string} pre Prefix of the identifier + * @param {string} role Authorized role for eid + * @param {string} [eid] Optional qb64 of endpoint provider to be authorized + * @param {string} [stamp=now] Optional date-time-stamp RFC-3339 profile of iso8601 datetime. Now is the default if not provided + * @returns {Serder} The reply message + */ + private makeEndRole(pre: string, role: string, eid?: string, stamp?: string): Serder { + const data: any = { + cid: pre, + role: role + } + if (eid != undefined) { + data.eid = eid + } + const route = "/end/role/add" + return reply(route, data, stamp, undefined, Serials.JSON) + } + + /** + * Get the members of a group identifier + * @async + * @param {string} name - Name or alias of the identifier + * @returns {Promise} - A promise to the list of members + */ + async members(name: string): Promise { + let res = await this.client.fetch("/identifiers/" + name + "/members", "GET", undefined) + return await res.json() + } +} diff --git a/src/keri/app/apping.ts b/src/keri/app/apping.ts deleted file mode 100644 index e102dd38..00000000 --- a/src/keri/app/apping.ts +++ /dev/null @@ -1,17 +0,0 @@ -import libsodium from "libsodium-wrappers-sumo"; -import { Salter } from "../core/salter"; -import { Matter, MtrDex } from '../core/matter'; - - -export function randomPasscode(): string { - let raw = libsodium.randombytes_buf(16); - let salter = new Salter({ raw: raw }) - - return salter.qb64.substring(2) -} - -export function randomNonce(): string { - let seed = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); - let seedqb64 = new Matter({ raw: seed, code: MtrDex.Ed25519_Seed }); - return seedqb64.qb64; -} diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts new file mode 100644 index 00000000..082b19a5 --- /dev/null +++ b/src/keri/app/clienting.ts @@ -0,0 +1,454 @@ +import { Agent, Controller } from "./controller" +import { Tier } from "../core/salter" +import { Authenticater } from "../core/authing" +import { KeyManager } from "../core/keeping" +import { Serder } from "../core/serder" + +import { Identifier } from "./aiding" +import { Contacts } from "./contacting" +import { Oobis, Operations, KeyEvents, KeyStates, Challenges } from "./coring" +import { Credentials, Registries, Schemas } from './credentialing' +import { Notifications } from "./notifying" +import { Escrows } from "./escrowing" +import { Groups } from "./grouping" +import { Exchanges } from "./exchanging" + +const DEFAULT_BOOT_URL = "http://localhost:3903" + +class State { + agent: any | null + controller: any | null + ridx: number + pidx: number + + constructor() { + this.agent = null + this.controller = null + this.pidx = 0 + this.ridx = 0 + } +} + +/** SignifyClient */ +export class SignifyClient { + public controller: Controller + public url: string + public bran: string + public pidx: number + public agent: Agent | null + public authn: Authenticater | null + public manager: KeyManager | null + public tier: Tier + public bootUrl: string + + /** + * SignifyClient constructor + * @param {string} url KERIA admin interface URL + * @param {string} bran Base64 21 char string that is used as base material for seed of the client AID + * @param {Tier} tier Security tier for generating keys of the client AID (high | mewdium | low) + * @param {string} bootUrl KERIA boot interface URL + */ + constructor(url: string, bran: string, tier: Tier = Tier.low, bootUrl: string = DEFAULT_BOOT_URL) { + this.url = url + if (bran.length < 21) { + throw Error("bran must be 21 characters") + } + this.bran = bran + this.pidx = 0 + this.controller = new Controller(bran, tier) + this.authn = null + this.agent = null + this.manager = null + this.tier = tier + this.bootUrl = bootUrl + } + + get data() { + return [this.url, this.bran, this.pidx, this.authn] + } + + /** + * Boot a KERIA agent + * @async + * @returns {Promise} A promise to the result of the boot + */ + async boot(): Promise { + const [evt, sign] = this.controller?.event ?? []; + const data = { + icp: evt.ked, + sig: sign.qb64, + stem: this.controller?.stem, + pidx: 1, + tier: this.controller?.tier + }; + + return await fetch(this.bootUrl + "/boot", { + method: "POST", + body: JSON.stringify(data), + headers: { + "Content-Type": "application/json" + } + }); + + } + + /** + * Get state of the agent and the client + * @async + * @returns {Promise} A promise to the state + */ + async state(): Promise { + const caid = this.controller?.pre + + let res = await fetch(this.url + `/agent/${caid}`); + if (res.status == 404) { + throw new Error(`agent does not exist for controller ${caid}`); + } + + const data = await res.json(); + let state = new State(); + state.agent = data.agent ?? {}; + state.controller = data.controller ?? {}; + state.ridx = data.ridx ?? 0; + state.pidx = data.pidx ?? 0; + return state; + } + + /** Connect to a KERIA agent + * @async + */ + async connect() { + const state = await this.state() + this.pidx = state.pidx + //Create controller representing the local client AID + this.controller = new Controller(this.bran, this.tier, 0, state.controller) + this.controller.ridx = state.ridx !== undefined ? state.ridx : 0 + // Create agent representing the AID of KERIA cloud agent + this.agent = new Agent(state.agent) + if (this.agent.anchor != this.controller.pre) { + throw Error("commitment to controller AID missing in agent inception event") + } + if (this.controller.serder.ked.s == 0) { + await this.approveDelegation() + } + this.manager = new KeyManager(this.controller.salter, null) + this.authn = new Authenticater(this.controller.signer, this.agent.verfer!) + } + + /** + * Fetch a resource from the KERIA agent + * @async + * @param {string} path Path to the resource + * @param {string} method HTTP method + * @param {any} data Data to be sent in the body of the resource + * @param {Headers} [extraHeaders] Optional extra headers to be sent with the request + * @returns {Promise} A promise to the result of the fetch + */ + async fetch(path: string, method: string, data: any, extraHeaders?: Headers): Promise { + let headers = new Headers() + let signed_headers = new Headers() + let final_headers = new Headers() + + headers.set('Signify-Resource', this.controller.pre) + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + let _body = method == 'GET' ? null : JSON.stringify(data) + if (_body !== null) { + headers.set('Content-Length', String(_body.length)) + } + if (this.authn) { + signed_headers = this.authn.sign(headers, method, path.split('?')[0]) + } else { + throw new Error('client need to call connect first') + } + + signed_headers.forEach((value, key) => { + final_headers.set(key, value) + }) + if (extraHeaders !== undefined) { + extraHeaders.forEach((value, key) => { + final_headers.append(key, value) + }) + } + let res = await fetch(this.url + path, { + method: method, + body: _body, + headers: final_headers + }); + if (!(res.status == 200 || res.status == 202 || res.status == 206)) { + const error = await res.text() + throw new Error(error) + } + const isSameAgent = this.agent?.pre === res.headers.get('signify-resource'); + if (!isSameAgent) { + throw new Error('message from a different remote agent'); + } + + const verification = this.authn.verify(res.headers, method, path.split('?')[0]); + if (verification) { + return res; + } else { + throw new Error('response verification failed'); + } + } + + /** + * Fetch a resource from from an external URL with headers signed by an AID + * @async + * @param {string} url URL of the resource + * @param {string} path Path to the resource + * @param {string} method HTTP method + * @param {any} data Data to be sent in the body of the resource + * @param {string} aidName Name or alias of the AID to be used for signing + * @returns {Promise} A promise to the result of the fetch + */ + async signedFetch(url: string, path: string, method: string, data: any, aidName: string): Promise { + const hab = await this.identifiers().get(aidName) + const keeper = this.manager!.get(hab) + + const authenticator = new Authenticater(keeper.signers[0], keeper.signers[0].verfer) + + let headers = new Headers() + headers.set('Signify-Resource', hab.prefix) + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + + if (data !== null) { + headers.set('Content-Length', data.length) + } + else { + headers.set('Content-Length', '0') + } + let signed_headers = authenticator.sign(headers, method, path.split('?')[0]) + let _body = null + if (method != 'GET') { + if (data instanceof FormData) { + _body = data + // do not set the content type, let the browser do it + // headers.set('Content-Type', 'multipart/form-data') + } else { + _body = JSON.stringify(data) + headers.set('Content-Type', 'application/json') + } + } else { + headers.set('Content-Type', 'application/json') + } + + return await fetch(url + path, { + method: method, + body: _body, + headers: signed_headers + }); + + } + + /** + * Approve the delegation of the client AID to the KERIA agent + * @async + * @returns {Promise} A promise to the result of the approval + */ + async approveDelegation(): Promise { + let sigs = this.controller.approveDelegation(this.agent!) + + let data = { + ixn: this.controller.serder.ked, + sigs: sigs + } + + return await fetch(this.url + "/agent/" + this.controller.pre + "?type=ixn", { + method: "PUT", + body: JSON.stringify(data), + headers: { + "Content-Type": "application/json" + } + }) + } + + /** + * Save old client passcode in KERIA agent + * @async + * @param {string} passcode Passcode to be saved + * @returns {Promise} A promise to the result of the save + */ + async saveOldPasscode(passcode: string): Promise { + const caid = this.controller?.pre; + const body = { salt: passcode }; + return await fetch(this.url + "/salt/" + caid, { + method: "PUT", + body: JSON.stringify(body), + headers: { + "Content-Type": "application/json" + } + }) + } + + /** + * Delete a saved passcode from KERIA agent + * @async + * @returns {Promise} A promise to the result of the deletion + */ + async deletePasscode(): Promise { + const caid = this.controller?.pre; + return await fetch(this.url + "/salt/" + caid, { + method: "DELETE", + headers: { + "Content-Type": "application/json" + } + }) + } + + /** + * Rotate the client AID + * @async + * @param {string} nbran Base64 21 char string that is used as base material for the new seed + * @param {Array} aids List of managed AIDs to be rotated + * @returns {Promise} A promise to the result of the rotation + */ + async rotate(nbran: string, aids: string[]): Promise { + let data = this.controller.rotate(nbran, aids) + return await fetch(this.url + "/agent/" + this.controller.pre, { + method: "PUT", + body: JSON.stringify(data), + headers: { + "Content-Type": "application/json" + } + }) + } + + /** + * Get identifiers resource + * @returns {Identifier} + */ + identifiers(): Identifier { + return new Identifier(this) + } + + /** + * Get OOBIs resource + * @returns {Oobis} + */ + oobis(): Oobis { + return new Oobis(this) + } + + /** + * Get operations resource + * @returns {Operations} + */ + operations(): Operations { + return new Operations(this) + } + + /** + * Get keyEvents resource + * @returns {KeyEvents} + */ + keyEvents(): KeyEvents { + return new KeyEvents(this) + } + + /** + * Get keyStates resource + * @returns {KeyStates} + */ + keyStates(): KeyStates { + return new KeyStates(this) + } + + /** + * Get credentials resource + * @returns {Credentials} + */ + credentials(): Credentials { + return new Credentials(this) + } + + /** + * Get registries resource + * @returns {Registries} + */ + registries(): Registries { + return new Registries(this) + } + + /** + * Get schemas resource + * @returns {Schemas} + */ + schemas(): Schemas { + return new Schemas(this) + } + + /** + * Get challenges resource + * @returns {Challenges} + */ + challenges(): Challenges { + return new Challenges(this) + } + + /** + * Get contacts resource + * @returns {Contacts} + */ + contacts(): Contacts { + return new Contacts(this) + } + + /** + * Get notifications resource + * @returns {Notifications} + */ + notifications(): Notifications { + return new Notifications(this) + } + + /** + * Get escrows resource + * @returns {Escrows} + */ + escrows(): Escrows { + return new Escrows(this) + } + + /** + * Get groups resource + * @returns {Groups} + */ + groups(): Groups { + return new Groups(this) + } + + /** + * Get exchange resource + * @returns {Exchanges} + */ + exchanges(): Exchanges { + return new Exchanges(this) + } +} + +export class EventResult { + private readonly _serder: Serder + private readonly _sigs: string[] + private readonly promise: Promise + + constructor(serder: Serder, sigs: string[], promise: Promise) { + this._serder = serder + this._sigs = sigs + this.promise = promise + } + + get serder() { + return this._serder + } + + get sigs() { + return this._sigs + } + + async op(): Promise { + let res = await this.promise + return await res.json() + } +} \ No newline at end of file diff --git a/src/keri/app/contacting.ts b/src/keri/app/contacting.ts new file mode 100644 index 00000000..b4f67586 --- /dev/null +++ b/src/keri/app/contacting.ts @@ -0,0 +1,203 @@ +import { SignifyClient } from "./clienting" +import { messagize} from "../core/eventing" +import {b, Ident, Ilks, Serials, versify} from "../core/core" +import {Saider} from "../core/saider" +import {Serder} from "../core/serder" +import {Siger} from "../core/siger" +import {TextDecoder} from "util" + +/** + * Contacts + */ +export class Contacts { + client: SignifyClient + /** + * Contacts + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * List contacts + * @async + * @param {string} [group] Optional group name to filter contacts + * @param {string} [filterField] Optional field name to filter contacts + * @param {string} [filterValue] Optional field value to filter contacts + * @returns {Promise} A promise to the list of contacts + */ + async list(group?:string, filterField?:string, filterValue?:string): Promise { + let params = new URLSearchParams() + if (group !== undefined) {params.append('group', group)} + if (filterField !== undefined && filterValue !== undefined) { + params.append("filter_field", filterField); + params.append("filter_value", filterValue); + } + + let path = `/contacts`+ '?' + params.toString() + let method = 'GET' + let res = await this.client.fetch(path, method, null) + return await res.json() + + } + + /** + * Get a contact + * @async + * @param {string} pre Prefix of the contact + * @returns {Promise} A promise to the contact + */ + async get(pre:string): Promise { + + let path = `/contacts/`+ pre + let method = 'GET' + let res = await this.client.fetch(path, method, null) + return await res.json() + + } + + /** + * Add a contact + * @async + * @param {string} pre Prefix of the contact + * @param {any} info Information about the contact + * @returns {Promise} A promise to the result of the addition + */ + async add(pre: string, info: any): Promise { + let path = `/contacts/`+ pre + let method = 'POST' + + let res = await this.client.fetch(path, method, info) + return await res.json() + } + + /** + * Delete a contact + * @async + * @param {string} pre Prefix of the contact + * @returns {Promise} A promise to the result of the deletion + */ + async delete(pre: string): Promise { + let path = `/contacts/`+ pre + let method = 'DELETE' + + let res = await this.client.fetch(path, method, null) + return await res.json() + } + + /** + * Update a contact + * @async + * @param {string} pre Prefix of the contact + * @param {any} info Updated information about the contact + * @returns {Promise} A promise to the result of the update + */ + async update(pre: string, info: any): Promise { + let path = `/contacts/` + pre + let method = 'PUT' + + let res = await this.client.fetch(path, method, info) + return await res.json() + } + +} + + +/** + * Challenges + */ +export class Challenges { + client: SignifyClient + /** + * Challenges + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * Generate a random challenge word list based on BIP39 + * @async + * @param {number} strength Integer representing the strength of the challenge. Typically 128 or 256 + * @returns {Promise} A promise to the list of random words + */ + async generate(strength: number = 128): Promise { + let path = `/challenges?strength=${strength.toString()}` + let method = 'GET' + let res = await this.client.fetch(path, method, null) + return await res.json() + } + + /** + * Respond to a challenge by signing a message with the list of words + * @async + * @param {string} name Name or alias of the identifier + * @param {string} recipient Prefix of the recipient of the response + * @param {Array} words List of words to embed in the signed response + * @returns {Promise} A promise to the result of the response + */ + async respond(name: string, recipient: string, words: string[]): Promise { + let path = `/challenges/${name}` + let method = 'POST' + + let hab = await this.client.identifiers().get(name) + let pre: string = hab.prefix + let data = { + i: pre, + words: words + } + + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) + + const _sad = { + v: vs, + t: Ilks.exn, + d: "", + dt: new Date().toISOString().replace("Z","000+00:00"), + r: "/challenge/response", + q: {}, + a: data + } + const [, sad] = Saider.saidify(_sad) + const exn = new Serder(sad) + + let keeper = this.client!.manager!.get(hab) + + let sig = keeper.sign(b(exn.raw),true) + + let siger = new Siger({qb64:sig[0]}) + let seal = ["SealLast" , {i:pre}] + let ims = messagize(exn,[siger],seal, undefined, undefined, true) + ims = ims.slice(JSON.stringify(exn.ked).length) + + let jsondata = { + recipient: recipient, + words: words, + exn: exn.ked, + sig: new TextDecoder().decode(ims) + } + + return await this.client.fetch(path, method, jsondata) + } + + /** + * Accept a challenge response as valid (list of words are correct) + * @param {string} name Name or alias of the identifier + * @param {string} pre Prefix of the identifier that was challenged + * @param {string} said SAID of the challenge response message + * @returns {Promise} A promise to the result of the response + */ + async accept(name: string, pre: string, said: string): Promise { + let path = `/challenges/${name}` + let method = 'PUT' + let data = { + aid: pre, + said: said + } + let res = await this.client.fetch(path, method, data) + + return res + } +} diff --git a/src/keri/app/coring.ts b/src/keri/app/coring.ts new file mode 100644 index 00000000..e620212c --- /dev/null +++ b/src/keri/app/coring.ts @@ -0,0 +1,193 @@ +import { SignifyClient } from "./clienting" +import libsodium from "libsodium-wrappers-sumo"; +import { Salter } from "../core/salter"; +import { Matter, MtrDex } from '../core/matter'; + +export function randomPasscode(): string { + let raw = libsodium.randombytes_buf(16); + let salter = new Salter({ raw: raw }) + + return salter.qb64.substring(2) +} + +export function randomNonce(): string { + let seed = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); + let seedqb64 = new Matter({ raw: seed, code: MtrDex.Ed25519_Seed }); + return seedqb64.qb64; +} + +export class Oobis { + public client: SignifyClient + /** + * Oobis + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * Get the OOBI(s) for a managed indentifier for a given role + * @param {string} name Name or alias of the identifier + * @param {string} role Authorized role + * @returns {Promise} A promise to the OOBI(s) + */ + async get(name: string, role: string = 'agent'): Promise { + let path = `/identifiers/${name}/oobis?role=${role}` + let method = 'GET' + let res = await this.client.fetch(path, method, null) + return await res.json() + + } + + /** + * Resolve an OOBI + * @async + * @param {string} oobi The OOBI to be resolver + * @param {string} [alias] Optional name or alias to link the OOBI resolution to a contact + * @returns {Promise} A promise to the long-running operation + */ + async resolve(oobi: string, alias?: string): Promise { + let path = `/oobis` + let data: any = { + url: oobi + } + if (alias !== undefined) { + data.oobialias = alias + } + let method = 'POST' + let res = await this.client.fetch(path, method, data) + return await res.json() + + } +} + +/** + * Operations + * @remarks + * Operations represent the status and result of long running tasks performed by KERIA agent + */ +export class Operations { + public client: SignifyClient + /** + * Operations + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * Get operation status + * @async + * @param {string} name Name of the operation + * @returns {Promise} A promise to the status of the operation + */ + async get(name: string): Promise { + let path = `/operations/${name}` + let data = null + let method = 'GET' + let res = await this.client.fetch(path, method, data) + return await res.json() + + } +} + +/** + * KeyEvents + */ +export class KeyEvents { + public client: SignifyClient + /** + * KeyEvents + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * Retrieve key events for an identifier + * @async + * @param {string} pre Identifier prefix + * @returns {Promise} A promise to the key events + */ + async get(pre: string): Promise { + let path = `/events?pre=${pre}` + let data = null + let method = 'GET' + let res = await this.client.fetch(path, method, data) + return await res.json() + + } +} + +/** + * KeyStates + */ +export class KeyStates { + public client: SignifyClient + /** + * KeyStates + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * Retriene the key state for an identifier + * @async + * @param {string} pre Identifier prefix + * @returns {Promise} A promise to the key states + */ + async get(pre: string): Promise { + let path = `/states?pre=${pre}` + let data = null + let method = 'GET' + let res = await this.client.fetch(path, method, data) + return await res.json() + + } + + /** + * Retrieve the key state for a list of identifiers + * @async + * @param {Array} pres List of identifier prefixes + * @returns {Promise} A promise to the key states + */ + async list(pres: string[]): Promise { + let path = `/states?${pres.map(pre => `pre=${pre}`).join('&')}` + let data = null + let method = 'GET' + let res = await this.client.fetch(path, method, data) + return await res.json() + + } + + /** + * Query the key state of an identifier for a given sequence number or anchor SAID + * @async + * @param {string} pre Identifier prefix + * @param {number} [sn] Optional sequence number + * @param {string} [anchor] Optional anchor SAID + * @returns {Promise} A promise to the long-running operation + */ + async query(pre: string, sn?: number, anchor?: string): Promise { + let path = `/queries` + let data: any = { + pre: pre + } + if (sn !== undefined) { + data.sn = sn + } + if (anchor !== undefined) { + data.anchor = anchor + } + + let method = 'POST' + let res = await this.client.fetch(path, method, data) + return await res.json() + } +} + diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts new file mode 100644 index 00000000..b6d2fb17 --- /dev/null +++ b/src/keri/app/credentialing.ts @@ -0,0 +1,560 @@ +import { SignifyClient } from "./clienting" +import {Salter} from "../core/salter" +import { interact, messagize} from "../core/eventing" +import {b, Dict, Ident, Ilks, Serials, versify} from "../core/core" +import {MtrDex} from "../core/matter" +import {Saider} from "../core/saider" +import {Serder} from "../core/serder" +import {Siger} from "../core/siger" +import {Prefixer} from "../core/prefixer" +import {randomNonce} from "./coring" +import {TextDecoder} from "util" + + +/** Types of credentials */ +export class CredentialTypes { + static issued = "issued" + static received = "received" +} + +/** Credential filter parameters */ +export interface CredentialFilter { + filter?: object, + sort?: object[], + skip?: number, + limit?: number +} + +/** + * Credentials + */ +export class Credentials { + public client: SignifyClient + /** + * Credentials + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * List credentials + * @async + * @param {string} name Name or alias of the identifier + * @param {CredentialFilter} [kargs] Optional parameters to filter the credentials + * @returns {Promise} A promise to the list of credentials + */ + async list(name: string, kargs:CredentialFilter ={}): Promise { + let path = `/identifiers/${name}/credentials/query` + let filtr = kargs.filter === undefined ? {} : kargs.filter; + let sort = kargs.sort === undefined ? [] : kargs.sort; + let limit = kargs.limit === undefined ? 25 : kargs.limit; + let skip = kargs.skip === undefined ? 0 : kargs.skip; + + let data = { + filter: filtr, + sort: sort, + skip: skip, + limit: limit + } + let method = 'POST' + + let res = await this.client.fetch(path, method, data, undefined) + return await res.json() + } + + /** + * Get a credential + * @async + * @param {string} name - Name or alias of the identifier + * @param {string} said - SAID of the credential + * @param {boolean} [includeCESR=false] - Optional flag export the credential in CESR format + * @returns {Promise} A promise to the credential + */ + async get(name: string, said: string, includeCESR: boolean = false): Promise { + let path = `/identifiers/${name}/credentials/${said}` + let method = 'GET' + let headers = includeCESR? new Headers({'Accept': 'application/json+cesr'}) : new Headers({'Accept': 'application/json'}) + let res = await this.client.fetch(path, method, null, headers) + + return includeCESR? await res.text() : await res.json() + } + + /** + * Issue a credential + * @async + * @param {string} name Name or alias of the identifier + * @param {string} registy qb64 AID of credential registry + * @param {string} schema SAID of the schema + * @param {string} [recipient] Optional prefix of recipient identifier + * @param {any} [credentialData] Optional credential data + * @param {any} [rules] Optional credential rules + * @param {any} [source] Optional credential sources + * @param {boolean} [priv=false] Flag to issue a credential with privacy preserving features + * @returns {Promise} A promise to the long-running operation + */ + async issue(name: string, registy: string, schema: string, recipient?: string, credentialData?: any, rules?: any, source?: any, priv: boolean=false): Promise { + // Create Credential + let hab = await this.client.identifiers().get(name) + let pre: string = hab.prefix + const dt = new Date().toISOString().replace('Z', '000+00:00') + + const vsacdc = versify(Ident.ACDC, undefined, Serials.JSON, 0) + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) + + let cred: any = { + v: vsacdc, + d: "" + } + let subject: any = { + d: "", + } + if (priv) { + cred.u = new Salter({}) + subject.u = new Salter({}) + } + if (recipient != undefined) { + subject.i = recipient + } + subject.dt = dt + subject = {...subject, ...credentialData} + + const [, a] = Saider.saidify(subject,undefined,undefined,"d") + + cred = {...cred, i:pre} + cred.ri = registy + cred = {...cred,...{s: schema}, ...{a: a}} + + if (source !== undefined ) { + cred.e = source + } + if (rules !== undefined) { + cred.r = rules + } + const [, vc] = Saider.saidify(cred) + + // Create iss + let _iss = { + v: vs, + t: Ilks.iss, + d: "", + i: vc.d, + s: "0", + ri: registy, + dt: dt + + } + + let [, iss] = Saider.saidify(_iss) + + // Create paths and sign + let cpath = '6AABAAA-' + let keeper = this.client!.manager!.get(hab) + let csigs = keeper.sign(b(JSON.stringify(vc))) + + // Create ixn + let ixn = {} + let sigs = [] + + let state = hab.state + if (state.c !== undefined && state.c.includes("EO")) { + var estOnly = true + } + else { + var estOnly = false + } + let sn = Number(state.s) + let dig = state.d + + let data:any = [{ + i: iss.i, + s: iss.s, + d: iss.d + }] + + if (estOnly) { + // TODO implement rotation event + throw new Error("Establishment only not implemented") + + } else { + let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) + sigs = keeper.sign(b(serder.raw)) + ixn = serder.ked + } + + let body = { + cred: vc, + csigs: csigs, + path: cpath, + iss: iss, + ixn: ixn, + sigs: sigs + } + + let path = `/identifiers/${name}/credentials` + let method = 'POST' + let headers = new Headers({ + 'Accept': 'application/json+cesr' + + }) + let res = await this.client.fetch(path, method, body, headers) + return await res.json() + + } + + /** + * Revoke credential + * @async + * @param {string} name Name or alias of the identifier + * @param {string} said SAID of the credential + * @returns {Promise} A promise to the long-running operation + */ + async revoke(name: string, said: string): Promise { + let hab = await this.client.identifiers().get(name) + let pre: string = hab.prefix + + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) + const dt = new Date().toISOString().replace('Z', '000+00:00') + + let cred = await this.get(name, said) + + // Create rev + let _rev = { + v: vs, + t: Ilks.rev, + d: "", + i: said, + s: "1", + p: cred.status.d, + ri: cred.sad.ri, + dt: dt + } + + let [, rev] = Saider.saidify(_rev) + + // create ixn + let ixn = {} + let sigs = [] + + let state = hab.state + if (state.c !== undefined && state.c.includes("EO")) { + var estOnly = true + } + else { + var estOnly = false + } + + let sn = Number(state.s) + let dig = state.d + + let data:any = [{ + i: rev.i, + s: rev.s, + d: rev.d + }] + if (estOnly) { + // TODO implement rotation event + throw new Error("Establishment only not implemented") + + } else { + let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) + let keeper = this.client!.manager!.get(hab) + sigs = keeper.sign(b(serder.raw)) + ixn = serder.ked + } + + let body = { + rev: rev, + ixn: ixn, + sigs: sigs + } + + let path = `/identifiers/${name}/credentials/${said}` + let method = 'DELETE' + let headers = new Headers({ + 'Accept': 'application/json+cesr' + + }) + let res = await this.client.fetch(path, method, body, headers) + return await res.json() + + } + + /** + * Present a credential + * @async + * @param {string} name Name or alias of the identifier + * @param {string} said SAID of the credential + * @param {string} recipient Identifier prefix of the receiver of the presentation + * @param {boolean} [include=true] Flag to indicate whether to stream credential alongside presentation exchange message + * @returns {Promise} A promise to the long-running operation + */ + async present(name: string, said: string, recipient: string, include: boolean=true): Promise { + + let hab = await this.client.identifiers().get(name) + let pre: string = hab.prefix + + let cred = await this.get(name, said) + let data = { + i: cred.sad.i, + s: cred.sad.s, + n: said + } + + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) + + const _sad = { + v: vs, + t: Ilks.exn, + d: "", + dt: new Date().toISOString().replace("Z","000+00:00"), + r: "/presentation", + q: {}, + a: data + } + const [, sad] = Saider.saidify(_sad) + const exn = new Serder(sad) + + let keeper = this.client!.manager!.get(hab) + + let sig = keeper.sign(b(exn.raw),true) + + let siger = new Siger({qb64:sig[0]}) + let seal = ["SealLast" , {i:pre}] + let ims = messagize(exn,[siger],seal, undefined, undefined, true) + ims = ims.slice(JSON.stringify(exn.ked).length) + + + let body = { + exn: exn.ked, + sig: new TextDecoder().decode(ims), + recipient: recipient, + include: include + } + + let path = `/identifiers/${name}/credentials/${said}/presentations` + let method = 'POST' + let headers = new Headers({ + 'Accept': 'application/json+cesr' + + }) + let res = await this.client.fetch(path, method, body, headers) + return await res.text() + + } + + /** + * Request a presentation of a credential + * @async + * @param {string} name Name or alias of the identifier + * @param {string} recipient Identifier prefix of the receiver of the presentation + * @param {string} schema SAID of the schema + * @param {string} [issuer] Optional prefix of the issuer of the credential + * @returns {Promise} A promise to the long-running operation + */ + async request(name: string, recipient: string, schema: string, issuer?: string): Promise { + let hab = await this.client.identifiers().get(name) + let pre: string = hab.prefix + + let data:any = { + s: schema + } + if (issuer !== undefined) { + data["i"] = issuer + } + + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) + + const _sad = { + v: vs, + t: Ilks.exn, + d: "", + dt: new Date().toISOString().replace("Z","000+00:00"), + r: "/presentation/request", + q: {}, + a: data + } + const [, sad] = Saider.saidify(_sad) + const exn = new Serder(sad) + + let keeper = this.client!.manager!.get(hab) + + let sig = keeper.sign(b(exn.raw),true) + + let siger = new Siger({qb64:sig[0]}) + let seal = ["SealLast" , {i:pre}] + let ims = messagize(exn,[siger],seal, undefined, undefined, true) + ims = ims.slice(JSON.stringify(exn.ked).length) + + + let body = { + exn: exn.ked, + sig: new TextDecoder().decode(ims), + recipient: recipient, + } + + let path = `/identifiers/${name}/requests` + let method = 'POST' + let headers = new Headers({ + 'Accept': 'application/json+cesr' + + }) + let res = await this.client.fetch(path, method, body, headers) + return await res.text() + + } +} + +/** + * Registries + */ +export class Registries { + public client: SignifyClient + /** + * Registries + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * List registries + * @async + * @param {string} name Name or alias of the identifier + * @returns {Promise} A promise to the list of registries + */ + async list(name:string): Promise { + let path = `/identifiers/${name}/registries` + let method = 'GET' + let res = await this.client.fetch(path, method, null) + return await res.json() + + } + + /** + * Create a registry + * @async + * @param {string} name Name or alias of the identifier + * @param {string} registryName Name for the registry + * @param {string} [nonce] Nonce used to generate the registry. If not provided a random nonce will be generated + * @returns {Promise} A promise to the long-running operation + */ + async create(name: string, registryName: string, nonce?:string): Promise { + // TODO add backers option + // TODO get estOnly from get_identifier ? + + let hab = await this.client.identifiers().get(name) + let pre: string = hab.prefix + + nonce = nonce !== undefined ? nonce : randomNonce() + + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) + let vcp = { + v: vs, + t: Ilks.vcp, + d: "", + i: "", + ii: pre, + s: "0", + c: ['NB'], + bt: "0", + b: [], + n: nonce + } + + let prefixer = new Prefixer({code: MtrDex.Blake3_256}, vcp) + vcp.i = prefixer.qb64 + vcp.d = prefixer.qb64 + + let ixn = {} + let sigs = [] + + let state = hab.state + let estOnly = false + if (state.c !== undefined && state.c.includes("EO")) { + estOnly = true + } + + if (estOnly) { + // TODO implement rotation event + throw new Error("establishment only not implemented") + + } else { + let state = hab.state + let sn = Number(state.s) + let dig = state.d + + let data: any = [{ + i: prefixer.qb64, + s: "0", + d: prefixer.qb64 + }] + + let serder = interact({pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined}) + let keeper = this.client!.manager!.get(hab) + sigs = keeper.sign(b(serder.raw)) + ixn = serder.ked + } + + return await this.createFromEvents(hab, name, registryName, vcp, ixn, sigs) + } + + async createFromEvents(hab: Dict, name: string, registryName: string, vcp: Dict, ixn: Dict, sigs: any[]) { + + let path = `/identifiers/${name}/registries` + let method = 'POST' + + let data: any = { + name: registryName, + vcp: vcp, + ixn: ixn!, + sigs: sigs + } + let keeper = this.client!.manager!.get(hab) + data[keeper.algo] = keeper.params() + + let res = await this.client.fetch(path, method, data) + return await res.json() + } + +} +/** + * Schemas + */ +export class Schemas { + client: SignifyClient + /** + * Schemas + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * Get a schema + * @async + * @param {string} said SAID of the schema + * @returns {Promise} A promise to the schema + */ + async get(said: string): Promise { + let path = `/schema/${said}` + let method = 'GET' + let res = await this.client.fetch(path, method, null) + return await res.json() + } + + /** + * List schemas + * @async + * @returns {Promise} A promise to the list of schemas + */ + async list(): Promise { + let path = `/schema` + let method = 'GET' + let res = await this.client.fetch(path, method, null) + return await res.json() + } +} diff --git a/src/keri/app/escrowing.ts b/src/keri/app/escrowing.ts new file mode 100644 index 00000000..fbb04928 --- /dev/null +++ b/src/keri/app/escrowing.ts @@ -0,0 +1,33 @@ +import { SignifyClient } from "./clienting" + + +/** + * Escrows + */ +export class Escrows { + client: SignifyClient + + /** + * Escrows + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * List replay messages + * @async + * @param {string} [route] Optional route in the replay message + * @returns {Promise} A promise to the list of replay messages + */ + async listReply(route?:string): Promise { + let params = new URLSearchParams() + if (route !== undefined) {params.append('route', route)} + + let path = `/escrows/rpy` + '?' + params.toString() + let method = 'GET' + let res = await this.client.fetch(path, method, null) + return await res.json() + } +} diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts index 89ec6e67..56554534 100644 --- a/src/keri/app/exchanging.ts +++ b/src/keri/app/exchanging.ts @@ -1,19 +1,101 @@ -import {b, Dict, Ident, Ilks, Serials, versify} from "../core/core"; -import {Serder} from "../core/serder"; -import {nowUTC} from "../core/utils"; -import {Pather} from "../core/pather"; -import {Counter, CtrDex} from "../core/counter"; -import {Saider} from "../core/saider"; +import { SignifyClient } from "./clienting" +import { b, d, Dict, Ident, Ilks, Serials, versify } from "../core/core"; +import { Serder } from "../core/serder"; +import { nowUTC } from "../core/utils"; +import { Pather } from "../core/pather"; +import { Counter, CtrDex } from "../core/counter"; +import { Saider } from "../core/saider"; + +/** + * Exchanges + */ +export class Exchanges { + client: SignifyClient + + /** + * Exchanges + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * Create exn message + * @async + * @returns {Promise} A promise to the list of replay messages + * @param sender + * @param route + * @param payload + * @param embeds + */ + createExchangeMessage(sender: Dict, route: string, payload: Dict, embeds: Dict): [Serder, string[], string] { + let keeper = this.client.manager!.get(sender) + let [exn, end] = exchange(route, + payload, + sender["prefix"], undefined, undefined, undefined, undefined, embeds) + + let sigs = keeper.sign(b(exn.raw)) + return [exn, sigs, d(end)] + } + + /** + * Send exn messages to list of recipients + * @async + * @returns {Promise} A promise to the list of replay messages + * @param name + * @param topic + * @param sender + * @param route + * @param payload + * @param embeds + * @param recipients + */ + async send(name: string, topic: string, sender: Dict, route: string, payload: Dict, embeds: Dict, + recipients: string[]): Promise { + + let [exn, sigs, atc] = this.createExchangeMessage(sender, route, payload, embeds) + return await this.sendFromEvents(name, topic, exn, sigs, atc, recipients) + + } + + /** + * Send exn messaget to list of recipients + * @async + * @returns {Promise} A promise to the list of replay messages + * @param name + * @param topic + * @param exn + * @param sigs + * @param atc + * @param recipients + */ + async sendFromEvents(name: string, topic: string, exn: Serder, sigs: string[], atc: string, recipients: string[]): Promise { + + let path = `/identifiers/${name}/exchanges` + let method = 'POST' + let data: any = { + tpc: topic, + exn: exn.ked, + sigs: sigs, + atc: atc, + rec: recipients + } + + let res = await this.client.fetch(path, method, data) + return await res.json() + } +} export function exchange(route: string, - payload: Dict, - sender: string, - recipient?: string, - date?: string, - dig?: string, - modifiers?: Dict, - embeds?: Dict): [Serder, Uint8Array] { + payload: Dict, + sender: string, + recipient?: string, + date?: string, + dig?: string, + modifiers?: Dict, + embeds?: Dict): [Serder, Uint8Array] { const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) diff --git a/src/keri/app/grouping.ts b/src/keri/app/grouping.ts new file mode 100644 index 00000000..6b50b0d7 --- /dev/null +++ b/src/keri/app/grouping.ts @@ -0,0 +1,53 @@ +import { SignifyClient } from "./clienting" +import { Dict} from "../core/core" + +/** + * Groups + */ +export class Groups { + client: SignifyClient + + /** + * Groups + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * Get group request messages + * @async + * @param {string} [said] SAID of exn message to load + * @returns {Promise} A promise to the list of replay messages + */ + async getRequest(said:string): Promise { + + let path = `/multisig/request/` + said + let method = 'GET' + let res = await this.client.fetch(path, method, null) + return await res.json() + } + + /** + * Send multisig exn request messages to other group members + * @async + * @param {string} [name] human readable name of group AID + * @param {Dict} [exn] exn message to send to other members + * @param {string[]} [sigs] signature of the participant over the exn + * @param {string} [atc] additional attachments from embedded events in exn + * @returns {Promise} A promise to the list of replay messages + */ + async sendRequest(name: string, exn:Dict, sigs: string[], atc: string): Promise { + + let path = `/identifiers/${name}/multisig/request` + let method = 'POST' + let data = { + exn: exn, + sigs: sigs, + atc: atc + } + let res = await this.client.fetch(path, method, data) + return await res.json() + } +} diff --git a/src/keri/app/notifying.ts b/src/keri/app/notifying.ts new file mode 100644 index 00000000..58d11479 --- /dev/null +++ b/src/keri/app/notifying.ts @@ -0,0 +1,71 @@ +import { SignifyClient } from "./clienting" +import {parseRangeHeaders} from "../core/httping" + +/** + * Notifications + */ +export class Notifications { + client: SignifyClient + + /** + * Notifications + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client + } + + /** + * List notifications + * @async + * @param {number} [start=0] Start index of list of notifications, defaults to 0 + * @param {number} [end=24] End index of list of notifications, defaults to 24 + * @returns {Promise} A promise to the list of notifications + */ + async list(start:number=0, end:number=24): Promise { + let extraHeaders = new Headers() + extraHeaders.append('Range', `notes=${start}-${end}`) + + let path = `/notifications` + let method = 'GET' + let res = await this.client.fetch(path, method, null, extraHeaders) + + let cr = res.headers.get('content-range') + let range = parseRangeHeaders(cr,"notes") + let notes = await res.json() + + return { + start: range.start, + end: range.end, + total: range.total, + notes: notes + } + } + + /** + * Mark a notification as read + * @async + * @param {string} said SAID of the notification + * @returns {Promise} A promise to the result of the marking + */ + async mark(said:string): Promise { + let path = `/notifications/`+ said + let method = 'PUT' + let res = await this.client.fetch(path, method, null) + return await res.text() + } + + /** + * Delete a notification + * @async + * @param {string} said SAID of the notification + * @returns {Promise} A promise to the result of the deletion + */ + async delete(said:string): Promise { + let path = `/notifications/`+ said + let method = 'DELETE' + let res = await this.client.fetch(path, method, null) + return await res.json() + } + +} diff --git a/src/keri/app/signify.ts b/src/keri/app/signify.ts deleted file mode 100644 index 4c341805..00000000 --- a/src/keri/app/signify.ts +++ /dev/null @@ -1,1988 +0,0 @@ -import {Agent, Controller} from "./controller" -import {Salter, Tier} from "../core/salter" -import {Authenticater} from "../core/authing" -import {KeyManager} from "../core/keeping" -import {Algos} from '../core/manager' -import {incept, interact, messagize, reply, rotate} from "../core/eventing" -import {b, d, Dict, Ident, Ilks, Serials, versify, Versionage} from "../core/core" -import {Tholder} from "../core/tholder" -import {MtrDex} from "../core/matter" -import {Saider} from "../core/saider" -import {Serder} from "../core/serder" -import {Siger} from "../core/siger" -import {Prefixer} from "../core/prefixer" -import {randomNonce} from "./apping" -import {parseRangeHeaders} from "../core/httping" -import {TextDecoder} from "util" -import {exchange} from "./exchanging"; - -const DEFAULT_BOOT_URL = "http://localhost:3903" - -/** Types of credentials */ -export class CredentialTypes { - static issued = "issued" - static received = "received" -} - -/** State of the client */ -class State { - agent: any | null - controller: any | null - ridx: number - pidx: number - - constructor() { - this.agent = null - this.controller = null - this.pidx = 0 - this.ridx = 0 - } -} - -/** SignifyClient */ -export class SignifyClient { - public controller: Controller - public url: string - public bran: string - public pidx: number - public agent: Agent | null - public authn: Authenticater | null - public manager: KeyManager | null - public tier: Tier - public bootUrl: string - - /** - * SignifyClient constructor - * @param {string} url KERIA admin interface URL - * @param {string} bran Base64 21 char string that is used as base material for seed of the client AID - * @param {Tier} tier Security tier for generating keys of the client AID (high | mewdium | low) - * @param {string} bootUrl KERIA boot interface URL - */ - constructor(url: string, bran: string, tier: Tier = Tier.low, bootUrl: string = DEFAULT_BOOT_URL) { - this.url = url - if (bran.length < 21) { - throw Error("bran must be 21 characters") - } - this.bran = bran - this.pidx = 0 - this.controller = new Controller(bran, tier) - this.authn = null - this.agent = null - this.manager = null - this.tier = tier - this.bootUrl = bootUrl - } - - get data() { - return [this.url, this.bran, this.pidx, this.authn] - } - - /** - * Boot a KERIA agent - * @async - * @returns {Promise} A promise to the result of the boot - */ - async boot(): Promise{ - const [evt, sign] = this.controller?.event ?? []; - const data = { - icp: evt.ked, - sig: sign.qb64, - stem: this.controller?.stem, - pidx: 1, - tier: this.controller?.tier - }; - - return await fetch(this.bootUrl + "/boot", { - method: "POST", - body: JSON.stringify(data), - headers: { - "Content-Type": "application/json" - } - }); - - } - - /** - * Get state of the agent and the client - * @async - * @returns {Promise} A promise to the state - */ - async state(): Promise { - const caid = this.controller?.pre - - let res = await fetch(this.url + `/agent/${caid}`); - if (res.status == 404) { - throw new Error(`agent does not exist for controller ${caid}`); - } - - const data = await res.json(); - let state = new State(); - state.agent = data.agent ?? {}; - state.controller = data.controller ?? {}; - state.ridx = data.ridx ?? 0; - state.pidx = data.pidx ?? 0; - return state; - } - - /** Connect to a KERIA agent - * @async - */ - async connect() { - const state = await this.state() - this.pidx = state.pidx - //Create controller representing the local client AID - this.controller = new Controller(this.bran, this.tier, 0, state.controller) - this.controller.ridx = state.ridx !== undefined ? state.ridx : 0 - // Create agent representing the AID of KERIA cloud agent - this.agent = new Agent(state.agent) - if (this.agent.anchor != this.controller.pre) { - throw Error("commitment to controller AID missing in agent inception event") - } - if (this.controller.serder.ked.s == 0) { - await this.approveDelegation() - } - this.manager = new KeyManager(this.controller.salter, null) - this.authn = new Authenticater(this.controller.signer, this.agent.verfer!) - } - - /** - * Fetch a resource from the KERIA agent - * @async - * @param {string} path Path to the resource - * @param {string} method HTTP method - * @param {any} data Data to be sent in the body of the resource - * @param {Headers} [extraHeaders] Optional extra headers to be sent with the request - * @returns {Promise} A promise to the result of the fetch - */ - async fetch(path: string, method: string, data: any, extraHeaders?: Headers): Promise { - let headers = new Headers() - let signed_headers = new Headers() - let final_headers = new Headers() - - headers.set('Signify-Resource', this.controller.pre) - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - let _body = method == 'GET' ? null : JSON.stringify(data) - if (_body !== null) { - headers.set('Content-Length', String(_body.length)) - } - if (this.authn) { - signed_headers = this.authn.sign(headers, method, path.split('?')[0]) - } else { - throw new Error('client need to call connect first') - } - - signed_headers.forEach((value, key) => { - final_headers.set(key, value) - }) - if (extraHeaders !== undefined) { - extraHeaders.forEach((value, key) => { - final_headers.append(key, value) - }) - } - let res = await fetch(this.url + path, { - method: method, - body: _body, - headers: final_headers - }); - if (!(res.status == 200 || res.status == 202 || res.status == 206)) { - const error = await res.text() - throw new Error(error) - } - const isSameAgent = this.agent?.pre === res.headers.get('signify-resource'); - if (!isSameAgent) { - throw new Error('message from a different remote agent'); - } - - const verification = this.authn.verify(res.headers, method, path.split('?')[0]); - if (verification) { - return res; - } else { - throw new Error('response verification failed'); - } - } - - /** - * Fetch a resource from from an external URL with headers signed by an AID - * @async - * @param {string} url URL of the resource - * @param {string} path Path to the resource - * @param {string} method HTTP method - * @param {any} data Data to be sent in the body of the resource - * @param {string} aidName Name or alias of the AID to be used for signing - * @returns {Promise} A promise to the result of the fetch - */ - async signedFetch(url: string, path: string, method: string, data: any, aidName: string): Promise { - const hab = await this.identifiers().get(aidName) - const keeper = this.manager!.get(hab) - - const authenticator = new Authenticater(keeper.signers[0], keeper.signers[0].verfer) - - let headers = new Headers() - headers.set('Signify-Resource', hab.prefix) - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - - if (data !== null) { - headers.set('Content-Length', data.length) - } - else { - headers.set('Content-Length', '0') - } - let signed_headers = authenticator.sign(headers, method, path.split('?')[0]) - let _body = null - if(method != 'GET') { - if(data instanceof FormData) { - _body = data - // do not set the content type, let the browser do it - // headers.set('Content-Type', 'multipart/form-data') - } else { - _body = JSON.stringify(data) - headers.set('Content-Type', 'application/json') - } - } else { - headers.set('Content-Type', 'application/json') - } - - return await fetch(url + path, { - method: method, - body: _body, - headers: signed_headers - }); - - } - - /** - * Approve the delegation of the client AID to the KERIA agent - * @async - * @returns {Promise} A promise to the result of the approval - */ - async approveDelegation(): Promise { - let sigs = this.controller.approveDelegation(this.agent!) - - let data = { - ixn: this.controller.serder.ked, - sigs: sigs - } - - return await fetch(this.url + "/agent/" + this.controller.pre + "?type=ixn", { - method: "PUT", - body: JSON.stringify(data), - headers: { - "Content-Type": "application/json" - } - }) - } - - /** - * Save old client passcode in KERIA agent - * @async - * @param {string} passcode Passcode to be saved - * @returns {Promise} A promise to the result of the save - */ - async saveOldPasscode(passcode:string): Promise { - const caid = this.controller?.pre; - const body = { salt: passcode }; - return await fetch(this.url + "/salt/" + caid, { - method: "PUT", - body: JSON.stringify(body), - headers: { - "Content-Type": "application/json" - } - }) - } - - /** - * Delete a saved passcode from KERIA agent - * @async - * @returns {Promise} A promise to the result of the deletion - */ - async deletePasscode(): Promise { - const caid = this.controller?.pre; - return await fetch(this.url + "/salt/" + caid, { - method: "DELETE", - headers: { - "Content-Type": "application/json" - } - }) - } - - /** - * Rotate the client AID - * @async - * @param {string} nbran Base64 21 char string that is used as base material for the new seed - * @param {Array} aids List of managed AIDs to be rotated - * @returns {Promise} A promise to the result of the rotation - */ - async rotate(nbran: string, aids: string[]): Promise{ - let data = this.controller.rotate(nbran, aids) - return await fetch(this.url + "/agent/" + this.controller.pre, { - method: "PUT", - body: JSON.stringify(data), - headers: { - "Content-Type": "application/json" - } - }) - } - - /** - * Get identifiers resource - * @returns {Identifier} - */ - identifiers(): Identifier { - return new Identifier(this) - } - - /** - * Get OOBIs resource - * @returns {Oobis} - */ - oobis(): Oobis { - return new Oobis(this) - } - - /** - * Get operations resource - * @returns {Operations} - */ - operations(): Operations { - return new Operations(this) - } - - /** - * Get keyEvents resource - * @returns {KeyEvents} - */ - keyEvents(): KeyEvents { - return new KeyEvents(this) - } - - /** - * Get keyStates resource - * @returns {KeyStates} - */ - keyStates(): KeyStates { - return new KeyStates(this) - } - - /** - * Get credentials resource - * @returns {Credentials} - */ - credentials(): Credentials { - return new Credentials(this) - } - - /** - * Get registries resource - * @returns {Registries} - */ - registries(): Registries { - return new Registries(this) - } - - /** - * Get schemas resource - * @returns {Schemas} - */ - schemas(): Schemas { - return new Schemas(this) - } - - /** - * Get challenges resource - * @returns {Challenges} - */ - challenges(): Challenges { - return new Challenges(this) - } - - /** - * Get contacts resource - * @returns {Contacts} - */ - contacts(): Contacts { - return new Contacts(this) - } - - /** - * Get notifications resource - * @returns {Notifications} - */ - notifications(): Notifications { - return new Notifications(this) - } - - /** - * Get escrows resource - * @returns {Escrows} - */ - escrows(): Escrows { - return new Escrows(this) - } - - /** - * Get groups resource - * @returns {Groups} - */ - groups(): Groups { - return new Groups(this) - } - - /** - * Get exchange resource - * @returns {Exchanges} - */ - exchanges(): Exchanges { - return new Exchanges(this) - } -} - -/** Arguments required to create an identfier */ -export interface CreateIdentiferArgs { - transferable?: boolean, - isith?: string | number | string[], - nsith?: string | number | string[], - wits?: string[], - toad?: number, - proxy?: string, - delpre?: string, - dcode?: string, - data?: any, - algo?: Algos, - pre?: string, - states?: any[], - rstates?: any[] - prxs?: any[], - nxts?: any[], - mhab?: any, - keys?: any[], - ndigs?: any[], - bran?: string, - count?: number, - ncount?: number, - tier?: Tier -} - -/** Arguments required to rotate an identfier */ -export interface RotateIdentifierArgs { - transferable?: boolean, - nsith?: string | number | string[], - toad?: number, - cuts?: string[], - adds?: string[], - data?: Array, - ncode?: string, - ncount?: number, - ncodes?: string[], - states?: any[], - rstates?: any[] -} - -export class EventResult { - private readonly _serder: Serder - private readonly _sigs: string[] - private readonly promise: Promise - - constructor(serder: Serder, sigs: string[], promise: Promise) { - this._serder = serder - this._sigs = sigs - this.promise = promise - } - - get serder() { - return this._serder - } - - get sigs() { - return this._sigs - } - - async op(): Promise { - let res = await this.promise - return await res.json() - } -} - -/** Identifier */ -export class Identifier { - public client: SignifyClient - /** - * Identifier - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * List managed identifiers - * @async - * @param {number} [start=0] Start index of list of notifications, defaults to 0 - * @param {number} [end=24] End index of list of notifications, defaults to 24 - * @returns {Promise} A promise to the list of managed identifiers - */ - async list(start:number=0, end:number=24): Promise { - let extraHeaders = new Headers() - extraHeaders.append('Range', `aids=${start}-${end}`) - - let path = `/identifiers` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data, extraHeaders) - - let cr = res.headers.get('content-range') - let range = parseRangeHeaders(cr,"aids") - let aids = await res.json() - - return { - start: range.start, - end: range.end, - total: range.total, - aids: aids - } - } - - /** - * Get information for a managed identifier - * @async - * @param {string} name Name or alias of the identifier - * @returns {Promise} A promise to the identifier information - */ - async get(name: string): Promise { - let path = `/identifiers/${name}` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data) - return await res.json() - } - - /** - * Create a managed identifier - * @async - * @param {string} name Name or alias of the identifier - * @param {CreateIdentiferArgs} [kargs] Optional parameters to create the identifier - * @returns {EventResult} The inception result - */ - create(name: string, kargs:CreateIdentiferArgs={}): EventResult { - - const algo = kargs.algo == undefined ? Algos.salty : kargs.algo - - let transferable = kargs.transferable ?? true - let isith = kargs.isith ?? "1" - let nsith = kargs.nsith ?? "1" - let wits = kargs.wits ?? [] - let toad = kargs.toad ?? 0 - let dcode = kargs.dcode ?? MtrDex.Blake3_256 - let proxy = kargs.proxy - let delpre = kargs.delpre - let data = kargs.data != undefined ? [kargs.data] : [] - let pre = kargs.pre - let states = kargs.states - let rstates = kargs.rstates - let prxs = kargs.prxs - let nxts = kargs.nxts - let mhab = kargs.mhab - let _keys = kargs.keys - let _ndigs = kargs.ndigs - let bran = kargs.bran - let count = kargs.count - let ncount = kargs.ncount - let tier = kargs.tier - - let xargs = { - transferable: transferable, - isith: isith, - nsith: nsith, - wits: wits, - toad: toad, - proxy: proxy, - delpre: delpre, - dcode: dcode, - data: data, - algo: algo, - pre: pre, - prxs: prxs, - nxts: nxts, - mhab: mhab, - states: states, - rstates: rstates, - keys: _keys, - ndigs: _ndigs, - bran: bran, - count: count, - ncount: ncount, - tier: tier - } - - let keeper = this.client.manager!.new(algo, this.client.pidx, xargs) - let [keys, ndigs] = keeper!.incept(transferable) - wits = wits !== undefined ? wits : [] - let serder: Serder|undefined = undefined - if (delpre == undefined) { - serder = incept({ - keys: keys!, - isith: isith, - ndigs: ndigs, - nsith: nsith, - toad: toad, - wits: wits, - cnfg: [], - data: data, - version: Versionage, - kind: Serials.JSON, - code: dcode, - intive: false - }) - - } else { - serder = incept({ - keys: keys!, - isith: isith, - ndigs: ndigs, - nsith: nsith, - toad: toad, - wits: wits, - cnfg: [], - data: data, - version: Versionage, - kind: Serials.JSON, - code: dcode, - intive: false, - delpre: delpre - }) - } - - let sigs = keeper!.sign(b(serder.raw)) - var jsondata: any = { - name: name, - icp: serder.ked, - sigs: sigs, - proxy: proxy, - smids: states != undefined ? states.map(state => state.i) : undefined, - rmids: rstates != undefined ? rstates.map(state => state.i) : undefined - } - jsondata[algo] = keeper.params() - - this.client.pidx = this.client.pidx + 1 - let res = this.client.fetch("/identifiers", "POST", jsondata) - return new EventResult(serder, sigs, res) - } - - /** - * Generate an interaction event in a managed identifier - * @async - * @param {string} name Name or alias of the identifier - * @param {any} [data] Option data to be anchored in the interaction event - * @returns {Promise} A promise to the interaction event result - */ - async interact(name: string, data?: any): Promise { - - let hab = await this.get(name) - let pre: string = hab.prefix - - let state = hab.state - let sn = Number(state.s) - let dig = state.d - - data = Array.isArray(data) ? data : [data] - - let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) - let keeper = this.client!.manager!.get(hab) - let sigs = keeper.sign(b(serder.raw)) - - let jsondata: any = { - ixn: serder.ked, - sigs: sigs, - } - jsondata[keeper.algo] = keeper.params() - - let res = this.client.fetch("/identifiers/" + name + "?type=ixn", "PUT", jsondata) - return new EventResult(serder, sigs, res) - } - - - /** - * Generate a rotation event in a managed identifier - * @param {string} name Name or alias of the identifier - * @param {RotateIdentifierArgs} [kargs] Optional parameters requiered to generate the rotation event - * @returns {Promise} A promise to the rotation event result - */ - async rotate(name: string, kargs: RotateIdentifierArgs={}): Promise { - - let transferable = kargs.transferable ?? true - let ncode = kargs.ncode ?? MtrDex.Ed25519_Seed - let ncount = kargs.ncount ?? 1 - - let hab = await this.get(name) - let pre = hab.prefix - - let state = hab.state - let count = state.k.length - let dig = state.d - let ridx = (Number(state.s) + 1) - let wits = state.b - let isith = state.kt - - let nsith = kargs.nsith ?? isith - - // if isith is None: # compute default from newly rotated verfers above - if (isith == undefined) isith = `${Math.max(1, Math.ceil(count / 2)).toString(16)}` - - // if nsith is None: # compute default from newly rotated digers above - if (nsith == undefined) nsith = `${Math.max(1, Math.ceil(ncount / 2)).toString(16)}` - - let cst = new Tholder({sith: isith}).sith // current signing threshold - let nst = new Tholder({sith: nsith}).sith // next signing threshold - - // Regenerate next keys to sign rotation event - let keeper = this.client.manager!.get(hab) - // Create new keys for next digests - let ncodes = kargs.ncodes ?? new Array(ncount).fill(ncode) - - let states = kargs.states == undefined? [] : kargs.states - let rstates = kargs.rstates == undefined? [] : kargs.rstates - let [keys, ndigs] = keeper!.rotate(ncodes, transferable, states, rstates) - - let cuts = kargs.cuts ?? [] - let adds = kargs.adds ?? [] - let data = kargs.data != undefined ? [kargs.data] : [] - let toad = kargs.toad - let serder = rotate({ - pre: pre, - keys: keys, - dig: dig, - sn: ridx, - isith: cst, - nsith: nst, - ndigs: ndigs, - toad: toad, - wits: wits, - cuts: cuts, - adds: adds, - data: data - }) - - let sigs = keeper.sign(b(serder.raw)) - - var jsondata: any = { - rot: serder.ked, - sigs: sigs, - smids: states != undefined ? states.map(state => state.i) : undefined, - rmids: rstates != undefined ? rstates.map(state => state.i) : undefined - } - jsondata[keeper.algo] = keeper.params() - - let res = this.client.fetch("/identifiers/" + name, "PUT", jsondata) - return new EventResult(serder, sigs, res) - } - - /** - * Authorize an endpoint provider in a given role for a managed identifier - * @remarks - * Typically used to authorize the agent to be the endpoint provider for the identifier in the role of `agent` - * @async - * @param {string} name Name or alias of the identifier - * @param {string} role Authorized role for eid - * @param {string} [eid] Optional qb64 of endpoint provider to be authorized - * @param {string} [stamp=now] Optional date-time-stamp RFC-3339 profile of iso8601 datetime. Now is the default if not provided - * @returns {Promise} A promise to the result of the authorization - */ - async addEndRole(name: string, role: string, eid?: string, stamp?: string): Promise { - const hab = await this.get(name) - const pre = hab.prefix - - const rpy = this.makeEndRole(pre, role, eid, stamp) - const keeper = this.client.manager!.get(hab) - const sigs = keeper.sign(b(rpy.raw)) - - const jsondata = { - rpy: rpy.ked, - sigs: sigs - } - - let res = await this.client.fetch("/identifiers/" + name + "/endroles", "POST", jsondata) - return await res.json() - - } - - /** - * Generate an /end/role/add reply message - * @param {string} pre Prefix of the identifier - * @param {string} role Authorized role for eid - * @param {string} [eid] Optional qb64 of endpoint provider to be authorized - * @param {string} [stamp=now] Optional date-time-stamp RFC-3339 profile of iso8601 datetime. Now is the default if not provided - * @returns {Serder} The reply message - */ - private makeEndRole(pre: string, role: string, eid?: string, stamp?: string): Serder { - const data: any = { - cid: pre, - role: role - } - if (eid != undefined) { - data.eid = eid - } - const route = "/end/role/add" - return reply(route, data, stamp, undefined, Serials.JSON) - } - - /** - * Get the members of a group identifier - * @async - * @param {string} name - Name or alias of the identifier - * @returns {Promise} - A promise to the list of members - */ - async members(name: string): Promise { - let res = await this.client.fetch("/identifiers/" + name + "/members", "GET", undefined) - return await res.json() - } -} - -/** - * Oobis - */ -export class Oobis { - public client: SignifyClient - /** - * Oobis - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * Get the OOBI(s) for a managed indentifier for a given role - * @param {string} name Name or alias of the identifier - * @param {string} role Authorized role - * @returns {Promise} A promise to the OOBI(s) - */ - async get(name: string, role: string = 'agent'): Promise { - let path = `/identifiers/${name}/oobis?role=${role}` - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - - } - - /** - * Resolve an OOBI - * @async - * @param {string} oobi The OOBI to be resolver - * @param {string} [alias] Optional name or alias to link the OOBI resolution to a contact - * @returns {Promise} A promise to the long-running operation - */ - async resolve(oobi: string, alias?: string): Promise { - let path = `/oobis` - let data: any = { - url: oobi - } - if (alias !== undefined) { - data.oobialias = alias - } - let method = 'POST' - let res = await this.client.fetch(path, method, data) - return await res.json() - - } -} - -/** - * Operations - * @remarks - * Operations represent the status and result of long running tasks performed by KERIA agent - */ -export class Operations { - public client: SignifyClient - /** - * Operations - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * Get operation status - * @async - * @param {string} name Name of the operation - * @returns {Promise} A promise to the status of the operation - */ - async get(name: string): Promise { - let path = `/operations/${name}` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data) - return await res.json() - - } -} - -/** - * KeyEvents - */ -export class KeyEvents { - public client: SignifyClient - /** - * KeyEvents - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * Retrieve key events for an identifier - * @async - * @param {string} pre Identifier prefix - * @returns {Promise} A promise to the key events - */ - async get(pre: string): Promise { - let path = `/events?pre=${pre}` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data) - return await res.json() - - } -} - -/** - * KeyStates - */ -export class KeyStates { - public client: SignifyClient - /** - * KeyStates - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * Retriene the key state for an identifier - * @async - * @param {string} pre Identifier prefix - * @returns {Promise} A promise to the key states - */ - async get(pre: string): Promise { - let path = `/states?pre=${pre}` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data) - return await res.json() - - } - - /** - * Retrieve the key state for a list of identifiers - * @async - * @param {Array} pres List of identifier prefixes - * @returns {Promise} A promise to the key states - */ - async list(pres: string[]): Promise { - let path = `/states?${pres.map(pre => `pre=${pre}`).join('&')}` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data) - return await res.json() - - } - - /** - * Query the key state of an identifier for a given sequence number or anchor SAID - * @async - * @param {string} pre Identifier prefix - * @param {number} [sn] Optional sequence number - * @param {string} [anchor] Optional anchor SAID - * @returns {Promise} A promise to the long-running operation - */ - async query(pre: string, sn?: number, anchor?: string): Promise { - let path = `/queries` - let data: any = { - pre: pre - } - if (sn !== undefined) { - data.sn = sn - } - if (anchor !== undefined) { - data.anchor = anchor - } - - let method = 'POST' - let res = await this.client.fetch(path, method, data) - return await res.json() - } -} - -/** Credential filter parameters */ -export interface CredentialFilter { - filter?: object, - sort?: object[], - skip?: number, - limit?: number -} - -/** - * Credentials - */ -export class Credentials { - public client: SignifyClient - /** - * Credentials - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * List credentials - * @async - * @param {string} name Name or alias of the identifier - * @param {CredentialFilter} [kargs] Optional parameters to filter the credentials - * @returns {Promise} A promise to the list of credentials - */ - async list(name: string, kargs:CredentialFilter ={}): Promise { - let path = `/identifiers/${name}/credentials/query` - let filtr = kargs.filter === undefined ? {} : kargs.filter; - let sort = kargs.sort === undefined ? [] : kargs.sort; - let limit = kargs.limit === undefined ? 25 : kargs.limit; - let skip = kargs.skip === undefined ? 0 : kargs.skip; - - let data = { - filter: filtr, - sort: sort, - skip: skip, - limit: limit - } - let method = 'POST' - - let res = await this.client.fetch(path, method, data, undefined) - return await res.json() - } - - /** - * Get a credential - * @async - * @param {string} name - Name or alias of the identifier - * @param {string} said - SAID of the credential - * @param {boolean} [includeCESR=false] - Optional flag export the credential in CESR format - * @returns {Promise} A promise to the credential - */ - async get(name: string, said: string, includeCESR: boolean = false): Promise { - let path = `/identifiers/${name}/credentials/${said}` - let method = 'GET' - let headers = includeCESR? new Headers({'Accept': 'application/json+cesr'}) : new Headers({'Accept': 'application/json'}) - let res = await this.client.fetch(path, method, null, headers) - - return includeCESR? await res.text() : await res.json() - } - - /** - * Issue a credential - * @async - * @param {string} name Name or alias of the identifier - * @param {string} registy qb64 AID of credential registry - * @param {string} schema SAID of the schema - * @param {string} [recipient] Optional prefix of recipient identifier - * @param {any} [credentialData] Optional credential data - * @param {any} [rules] Optional credential rules - * @param {any} [source] Optional credential sources - * @param {boolean} [priv=false] Flag to issue a credential with privacy preserving features - * @returns {Promise} A promise to the long-running operation - */ - async issue(name: string, registy: string, schema: string, recipient?: string, credentialData?: any, rules?: any, source?: any, priv: boolean=false): Promise { - // Create Credential - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix - const dt = new Date().toISOString().replace('Z', '000+00:00') - - const vsacdc = versify(Ident.ACDC, undefined, Serials.JSON, 0) - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) - - let cred: any = { - v: vsacdc, - d: "" - } - let subject: any = { - d: "", - } - if (priv) { - cred.u = new Salter({}) - subject.u = new Salter({}) - } - if (recipient != undefined) { - subject.i = recipient - } - subject.dt = dt - subject = {...subject, ...credentialData} - - const [, a] = Saider.saidify(subject,undefined,undefined,"d") - - cred = {...cred, i:pre} - cred.ri = registy - cred = {...cred,...{s: schema}, ...{a: a}} - - if (source !== undefined ) { - cred.e = source - } - if (rules !== undefined) { - cred.r = rules - } - const [, vc] = Saider.saidify(cred) - - // Create iss - let _iss = { - v: vs, - t: Ilks.iss, - d: "", - i: vc.d, - s: "0", - ri: registy, - dt: dt - - } - - let [, iss] = Saider.saidify(_iss) - - // Create paths and sign - let cpath = '6AABAAA-' - let keeper = this.client!.manager!.get(hab) - let csigs = keeper.sign(b(JSON.stringify(vc))) - - // Create ixn - let ixn = {} - let sigs = [] - - let state = hab.state - if (state.c !== undefined && state.c.includes("EO")) { - var estOnly = true - } - else { - var estOnly = false - } - let sn = Number(state.s) - let dig = state.d - - let data:any = [{ - i: iss.i, - s: iss.s, - d: iss.d - }] - - if (estOnly) { - // TODO implement rotation event - throw new Error("Establishment only not implemented") - - } else { - let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) - sigs = keeper.sign(b(serder.raw)) - ixn = serder.ked - } - - let body = { - cred: vc, - csigs: csigs, - path: cpath, - iss: iss, - ixn: ixn, - sigs: sigs - } - - let path = `/identifiers/${name}/credentials` - let method = 'POST' - let headers = new Headers({ - 'Accept': 'application/json+cesr' - - }) - let res = await this.client.fetch(path, method, body, headers) - return await res.json() - - } - - /** - * Revoke credential - * @async - * @param {string} name Name or alias of the identifier - * @param {string} said SAID of the credential - * @returns {Promise} A promise to the long-running operation - */ - async revoke(name: string, said: string): Promise { - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix - - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) - const dt = new Date().toISOString().replace('Z', '000+00:00') - - let cred = await this.get(name, said) - - // Create rev - let _rev = { - v: vs, - t: Ilks.rev, - d: "", - i: said, - s: "1", - p: cred.status.d, - ri: cred.sad.ri, - dt: dt - } - - let [, rev] = Saider.saidify(_rev) - - // create ixn - let ixn = {} - let sigs = [] - - let state = hab.state - if (state.c !== undefined && state.c.includes("EO")) { - var estOnly = true - } - else { - var estOnly = false - } - - let sn = Number(state.s) - let dig = state.d - - let data:any = [{ - i: rev.i, - s: rev.s, - d: rev.d - }] - if (estOnly) { - // TODO implement rotation event - throw new Error("Establishment only not implemented") - - } else { - let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) - let keeper = this.client!.manager!.get(hab) - sigs = keeper.sign(b(serder.raw)) - ixn = serder.ked - } - - let body = { - rev: rev, - ixn: ixn, - sigs: sigs - } - - let path = `/identifiers/${name}/credentials/${said}` - let method = 'DELETE' - let headers = new Headers({ - 'Accept': 'application/json+cesr' - - }) - let res = await this.client.fetch(path, method, body, headers) - return await res.json() - - } - - /** - * Present a credential - * @async - * @param {string} name Name or alias of the identifier - * @param {string} said SAID of the credential - * @param {string} recipient Identifier prefix of the receiver of the presentation - * @param {boolean} [include=true] Flag to indicate whether to stream credential alongside presentation exchange message - * @returns {Promise} A promise to the long-running operation - */ - async present(name: string, said: string, recipient: string, include: boolean=true): Promise { - - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix - - let cred = await this.get(name, said) - let data = { - i: cred.sad.i, - s: cred.sad.s, - n: said - } - - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) - - const _sad = { - v: vs, - t: Ilks.exn, - d: "", - dt: new Date().toISOString().replace("Z","000+00:00"), - r: "/presentation", - q: {}, - a: data - } - const [, sad] = Saider.saidify(_sad) - const exn = new Serder(sad) - - let keeper = this.client!.manager!.get(hab) - - let sig = keeper.sign(b(exn.raw),true) - - let siger = new Siger({qb64:sig[0]}) - let seal = ["SealLast" , {i:pre}] - let ims = messagize(exn,[siger],seal, undefined, undefined, true) - ims = ims.slice(JSON.stringify(exn.ked).length) - - - let body = { - exn: exn.ked, - sig: new TextDecoder().decode(ims), - recipient: recipient, - include: include - } - - let path = `/identifiers/${name}/credentials/${said}/presentations` - let method = 'POST' - let headers = new Headers({ - 'Accept': 'application/json+cesr' - - }) - let res = await this.client.fetch(path, method, body, headers) - return await res.text() - - } - - /** - * Request a presentation of a credential - * @async - * @param {string} name Name or alias of the identifier - * @param {string} recipient Identifier prefix of the receiver of the presentation - * @param {string} schema SAID of the schema - * @param {string} [issuer] Optional prefix of the issuer of the credential - * @returns {Promise} A promise to the long-running operation - */ - async request(name: string, recipient: string, schema: string, issuer?: string): Promise { - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix - - let data:any = { - s: schema - } - if (issuer !== undefined) { - data["i"] = issuer - } - - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) - - const _sad = { - v: vs, - t: Ilks.exn, - d: "", - dt: new Date().toISOString().replace("Z","000+00:00"), - r: "/presentation/request", - q: {}, - a: data - } - const [, sad] = Saider.saidify(_sad) - const exn = new Serder(sad) - - let keeper = this.client!.manager!.get(hab) - - let sig = keeper.sign(b(exn.raw),true) - - let siger = new Siger({qb64:sig[0]}) - let seal = ["SealLast" , {i:pre}] - let ims = messagize(exn,[siger],seal, undefined, undefined, true) - ims = ims.slice(JSON.stringify(exn.ked).length) - - - let body = { - exn: exn.ked, - sig: new TextDecoder().decode(ims), - recipient: recipient, - } - - let path = `/identifiers/${name}/requests` - let method = 'POST' - let headers = new Headers({ - 'Accept': 'application/json+cesr' - - }) - let res = await this.client.fetch(path, method, body, headers) - return await res.text() - - } -} - -/** - * Registries - */ -export class Registries { - public client: SignifyClient - /** - * Registries - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * List registries - * @async - * @param {string} name Name or alias of the identifier - * @returns {Promise} A promise to the list of registries - */ - async list(name:string): Promise { - let path = `/identifiers/${name}/registries` - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - - } - - /** - * Create a registry - * @async - * @param {string} name Name or alias of the identifier - * @param {string} registryName Name for the registry - * @param {string} [nonce] Nonce used to generate the registry. If not provided a random nonce will be generated - * @returns {Promise} A promise to the long-running operation - */ - async create(name: string, registryName: string, nonce?:string): Promise { - // TODO add backers option - // TODO get estOnly from get_identifier ? - - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix - - nonce = nonce !== undefined ? nonce : randomNonce() - - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) - let vcp = { - v: vs, - t: Ilks.vcp, - d: "", - i: "", - ii: pre, - s: "0", - c: ['NB'], - bt: "0", - b: [], - n: nonce - } - - let prefixer = new Prefixer({code: MtrDex.Blake3_256}, vcp) - vcp.i = prefixer.qb64 - vcp.d = prefixer.qb64 - - let ixn = {} - let sigs = [] - - let state = hab.state - let estOnly = false - if (state.c !== undefined && state.c.includes("EO")) { - estOnly = true - } - - if (estOnly) { - // TODO implement rotation event - throw new Error("establishment only not implemented") - - } else { - let state = hab.state - let sn = Number(state.s) - let dig = state.d - - let data: any = [{ - i: prefixer.qb64, - s: "0", - d: prefixer.qb64 - }] - - let serder = interact({pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined}) - let keeper = this.client!.manager!.get(hab) - sigs = keeper.sign(b(serder.raw)) - ixn = serder.ked - } - - return await this.createFromEvents(hab, name, registryName, vcp, ixn, sigs) - } - - async createFromEvents(hab: Dict, name: string, registryName: string, vcp: Dict, ixn: Dict, sigs: any[]) { - - let path = `/identifiers/${name}/registries` - let method = 'POST' - - let data: any = { - name: registryName, - vcp: vcp, - ixn: ixn!, - sigs: sigs - } - let keeper = this.client!.manager!.get(hab) - data[keeper.algo] = keeper.params() - - let res = await this.client.fetch(path, method, data) - return await res.json() - } - -} - -/** - * Schemas - */ -export class Schemas { - client: SignifyClient - /** - * Schemas - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * Get a schema - * @async - * @param {string} said SAID of the schema - * @returns {Promise} A promise to the schema - */ - async get(said: string): Promise { - let path = `/schema/${said}` - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - } - - /** - * List schemas - * @async - * @returns {Promise} A promise to the list of schemas - */ - async list(): Promise { - let path = `/schema` - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - } -} - -/** - * Challenges - */ -export class Challenges { - client: SignifyClient - /** - * Challenges - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * Generate a random challenge word list based on BIP39 - * @async - * @param {number} strength Integer representing the strength of the challenge. Typically 128 or 256 - * @returns {Promise} A promise to the list of random words - */ - async generate(strength: number = 128): Promise { - let path = `/challenges?strength=${strength.toString()}` - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - } - - /** - * Respond to a challenge by signing a message with the list of words - * @async - * @param {string} name Name or alias of the identifier - * @param {string} recipient Prefix of the recipient of the response - * @param {Array} words List of words to embed in the signed response - * @returns {Promise} A promise to the result of the response - */ - async respond(name: string, recipient: string, words: string[]): Promise { - let path = `/challenges/${name}` - let method = 'POST' - - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix - let data = { - i: pre, - words: words - } - - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) - - const _sad = { - v: vs, - t: Ilks.exn, - d: "", - dt: new Date().toISOString().replace("Z","000+00:00"), - r: "/challenge/response", - q: {}, - a: data - } - const [, sad] = Saider.saidify(_sad) - const exn = new Serder(sad) - - let keeper = this.client!.manager!.get(hab) - - let sig = keeper.sign(b(exn.raw),true) - - let siger = new Siger({qb64:sig[0]}) - let seal = ["SealLast" , {i:pre}] - let ims = messagize(exn,[siger],seal, undefined, undefined, true) - ims = ims.slice(JSON.stringify(exn.ked).length) - - let jsondata = { - recipient: recipient, - words: words, - exn: exn.ked, - sig: new TextDecoder().decode(ims) - } - - return await this.client.fetch(path, method, jsondata) - } - - /** - * Accept a challenge response as valid (list of words are correct) - * @param {string} name Name or alias of the identifier - * @param {string} pre Prefix of the identifier that was challenged - * @param {string} said SAID of the challenge response message - * @returns {Promise} A promise to the result of the response - */ - async accept(name: string, pre: string, said: string): Promise { - let path = `/challenges/${name}` - let method = 'PUT' - let data = { - aid: pre, - said: said - } - let res = await this.client.fetch(path, method, data) - - return res - } -} - -/** - * Contacts - */ -export class Contacts { - client: SignifyClient - /** - * Contacts - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * List contacts - * @async - * @param {string} [group] Optional group name to filter contacts - * @param {string} [filterField] Optional field name to filter contacts - * @param {string} [filterValue] Optional field value to filter contacts - * @returns {Promise} A promise to the list of contacts - */ - async list(group?:string, filterField?:string, filterValue?:string): Promise { - let params = new URLSearchParams() - if (group !== undefined) {params.append('group', group)} - if (filterField !== undefined && filterValue !== undefined) { - params.append("filter_field", filterField); - params.append("filter_value", filterValue); - } - - let path = `/contacts`+ '?' + params.toString() - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - - } - - /** - * Get a contact - * @async - * @param {string} pre Prefix of the contact - * @returns {Promise} A promise to the contact - */ - async get(pre:string): Promise { - - let path = `/contacts/`+ pre - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - - } - - /** - * Add a contact - * @async - * @param {string} pre Prefix of the contact - * @param {any} info Information about the contact - * @returns {Promise} A promise to the result of the addition - */ - async add(pre: string, info: any): Promise { - let path = `/contacts/`+ pre - let method = 'POST' - - let res = await this.client.fetch(path, method, info) - return await res.json() - } - - /** - * Delete a contact - * @async - * @param {string} pre Prefix of the contact - * @returns {Promise} A promise to the result of the deletion - */ - async delete(pre: string): Promise { - let path = `/contacts/`+ pre - let method = 'DELETE' - - let res = await this.client.fetch(path, method, null) - return await res.json() - } - - /** - * Update a contact - * @async - * @param {string} pre Prefix of the contact - * @param {any} info Updated information about the contact - * @returns {Promise} A promise to the result of the update - */ - async update(pre: string, info: any): Promise { - let path = `/contacts/` + pre - let method = 'PUT' - - let res = await this.client.fetch(path, method, info) - return await res.json() - } - -} - -/** - * Notifications - */ -export class Notifications { - client: SignifyClient - - /** - * Notifications - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * List notifications - * @async - * @param {number} [start=0] Start index of list of notifications, defaults to 0 - * @param {number} [end=24] End index of list of notifications, defaults to 24 - * @returns {Promise} A promise to the list of notifications - */ - async list(start:number=0, end:number=24): Promise { - let extraHeaders = new Headers() - extraHeaders.append('Range', `notes=${start}-${end}`) - - let path = `/notifications` - let method = 'GET' - let res = await this.client.fetch(path, method, null, extraHeaders) - - let cr = res.headers.get('content-range') - let range = parseRangeHeaders(cr,"notes") - let notes = await res.json() - - return { - start: range.start, - end: range.end, - total: range.total, - notes: notes - } - } - - /** - * Mark a notification as read - * @async - * @param {string} said SAID of the notification - * @returns {Promise} A promise to the result of the marking - */ - async mark(said:string): Promise { - let path = `/notifications/`+ said - let method = 'PUT' - let res = await this.client.fetch(path, method, null) - return await res.text() - } - - /** - * Delete a notification - * @async - * @param {string} said SAID of the notification - * @returns {Promise} A promise to the result of the deletion - */ - async delete(said:string): Promise { - let path = `/notifications/`+ said - let method = 'DELETE' - let res = await this.client.fetch(path, method, null) - return await res.json() - } - -} - -/** - * Escrows - */ -export class Escrows { - client: SignifyClient - - /** - * Escrows - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * List replay messages - * @async - * @param {string} [route] Optional route in the replay message - * @returns {Promise} A promise to the list of replay messages - */ - async listReply(route?:string): Promise { - let params = new URLSearchParams() - if (route !== undefined) {params.append('route', route)} - - let path = `/escrows/rpy` + '?' + params.toString() - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - } -} - -/** - * Groups - */ -export class Groups { - client: SignifyClient - - /** - * Groups - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * Get group request messages - * @async - * @param {string} [said] SAID of exn message to load - * @returns {Promise} A promise to the list of replay messages - */ - async getRequest(said:string): Promise { - - let path = `/multisig/request/` + said - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - } - - /** - * Send multisig exn request messages to other group members - * @async - * @param {string} [name] human readable name of group AID - * @param {Dict} [exn] exn message to send to other members - * @param {string[]} [sigs] signature of the participant over the exn - * @param {string} [atc] additional attachments from embedded events in exn - * @returns {Promise} A promise to the list of replay messages - */ - async sendRequest(name: string, exn:Dict, sigs: string[], atc: string): Promise { - - let path = `/identifiers/${name}/multisig/request` - let method = 'POST' - let data = { - exn: exn, - sigs: sigs, - atc: atc - } - let res = await this.client.fetch(path, method, data) - return await res.json() - } -} - - -/** - * Exchanges - */ -export class Exchanges { - client: SignifyClient - - /** - * Exchanges - * @param {SignifyClient} client - */ - constructor(client: SignifyClient) { - this.client = client - } - - /** - * Create exn message - * @async - * @returns {Promise} A promise to the list of replay messages - * @param sender - * @param route - * @param payload - * @param embeds - */ - createExchangeMessage(sender: Dict, route:string, payload: Dict, embeds: Dict): [Serder, string[], string]{ - let keeper = this.client.manager!.get(sender) - let [exn, end] = exchange(route, - payload, - sender["prefix"], undefined, undefined, undefined, undefined, embeds) - - let sigs = keeper.sign(b(exn.raw)) - return [exn, sigs, d(end)] - } - - /** - * Send exn messages to list of recipients - * @async - * @returns {Promise} A promise to the list of replay messages - * @param name - * @param topic - * @param sender - * @param route - * @param payload - * @param embeds - * @param recipients - */ - async send(name:string, topic: string, sender: Dict, route:string, payload: Dict, embeds: Dict, - recipients: string[]): Promise { - - let [exn, sigs, atc] = this.createExchangeMessage(sender, route, payload, embeds) - return await this.sendFromEvents(name, topic, exn, sigs, atc, recipients) - - } - - /** - * Send exn messaget to list of recipients - * @async - * @returns {Promise} A promise to the list of replay messages - * @param name - * @param topic - * @param exn - * @param sigs - * @param atc - * @param recipients - */ - async sendFromEvents(name:string, topic: string, exn:Serder, sigs: string[], atc: string, recipients: string[]): Promise { - - let path = `/identifiers/${name}/exchanges` - let method = 'POST' - let data: any = { - tpc: topic, - exn: exn.ked, - sigs: sigs, - atc: atc, - rec: recipients - } - - let res = await this.client.fetch(path, method, data) - return await res.json() - } -} From a8af79e643114b34c0b8cfb6d862b9af34b4e9ef Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Mon, 11 Sep 2023 12:46:49 -0400 Subject: [PATCH 035/186] update import Challenges --- src/keri/app/clienting.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 082b19a5..f6d5ab2c 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -5,9 +5,9 @@ import { KeyManager } from "../core/keeping" import { Serder } from "../core/serder" import { Identifier } from "./aiding" -import { Contacts } from "./contacting" -import { Oobis, Operations, KeyEvents, KeyStates, Challenges } from "./coring" -import { Credentials, Registries, Schemas } from './credentialing' +import { Contacts, Challenges } from "./contacting" +import { Oobis, Operations, KeyEvents, KeyStates } from "./coring" +import { Credentials, Registries, Schemas, } from './credentialing' import { Notifications } from "./notifying" import { Escrows } from "./escrowing" import { Groups } from "./grouping" From 3c2a2ede22e6c6625e1409e6c881e0b871e3125b Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Mon, 11 Sep 2023 21:24:24 -0400 Subject: [PATCH 036/186] refactor test --- examples/integration-scripts/challenge.ts | 1 - test/app/aiding.test.ts | 269 ++++++++ test/app/apping.test.ts | 51 -- test/app/clienting.test.ts | 266 ++++++++ test/app/contacting.test.ts | 205 ++++++ test/app/coring.test.ts | 218 +++++++ test/app/credentialing.test.ts | 213 +++++++ test/app/escrowing.test.ts | 134 ++++ test/app/notifying.test.ts | 143 +++++ test/app/signify.test.ts | 727 ---------------------- 10 files changed, 1448 insertions(+), 779 deletions(-) create mode 100644 test/app/aiding.test.ts delete mode 100644 test/app/apping.test.ts create mode 100644 test/app/clienting.test.ts create mode 100644 test/app/contacting.test.ts create mode 100644 test/app/coring.test.ts create mode 100644 test/app/credentialing.test.ts create mode 100644 test/app/escrowing.test.ts create mode 100644 test/app/notifying.test.ts delete mode 100644 test/app/signify.test.ts diff --git a/examples/integration-scripts/challenge.ts b/examples/integration-scripts/challenge.ts index 10a0311c..b8398d42 100644 --- a/examples/integration-scripts/challenge.ts +++ b/examples/integration-scripts/challenge.ts @@ -92,7 +92,6 @@ async function run() { let contacts:any = [] while (!challenge_received) { contacts = await client1.contacts().list(undefined, undefined, undefined) - console.log(contacts) if (contacts[0].challenges.length > 0 ){ assert.equal(JSON.stringify(contacts[0].challenges[0].words), JSON.stringify(challenge1_small.words)) challenge_received = true diff --git a/test/app/aiding.test.ts b/test/app/aiding.test.ts new file mode 100644 index 00000000..a5d7778c --- /dev/null +++ b/test/app/aiding.test.ts @@ -0,0 +1,269 @@ +import { strict as assert } from "assert" +import { SignifyClient, } from "../../src/keri/app/clienting" +import { CreateIdentiferArgs, RotateIdentifierArgs } from "../../src/keri/app/aiding" +import { Authenticater } from "../../src/keri/core/authing" +import { Salter, Tier } from "../../src/keri/core/salter" +import { Algos } from "../../src/keri/core/manager" +import libsodium from "libsodium-wrappers-sumo" +import fetchMock from "jest-fetch-mock" +import 'whatwg-fetch' + +fetchMock.enableMocks(); + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],' + + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},' + + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",' + + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},' + + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + + '"pidx":0}' +const mockGetAID = { + "name": "aid1", + "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "salty": { + "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", + "pidx": 0, + "kidx": 0, + "stem": "signify:aid", + "tier": "low", + "dcode": "E", + "icodes": [ + "A" + ], + "ncodes": [ + "A" + ], + "transferable": true + }, + "transferable": true, + "state": { + "vn": [ + 1, + 0 + ], + "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "s": "0", + "p": "", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "f": "0", + "dt": "2023-08-21T22:30:46.473545+00:00", + "et": "icp", + "kt": "1", + "k": [ + "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" + ], + "nt": "1", + "n": [ + "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" + ], + "bt": "0", + "b": [], + "c": [], + "ee": { + "s": "0", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "br": [], + "ba": [] + }, + "di": "" + }, + "windexes": [] +} + +const mockCredential = { "sad": { "v": "ACDC10JSON000197_", "d": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "i": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "s": "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao", "a": { "d": "EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P", "i": "EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby", "dt": "2023-08-23T15:16:07.553000+00:00", "LEI": "5493001KJTIIGC8Y1R17" } }, "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sadsigers": [{ "path": "-", "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sn": 0, "d": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1" }], "sadcigars": [], "chains": [], "status": { "v": "KERI10JSON000135_", "i": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "s": "0", "d": "ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "ra": {}, "a": { "s": 2, "d": "EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt" }, "dt": "2023-08-23T15:16:07.553000+00:00", "et": "iss" } } + + +fetchMock.mockResponse(req => { + if (req.url.startsWith(url + '/agent')) { + return Promise.resolve({ body: mockConnect, init: { status: 202 } }) + } else if (req.url == boot_url + '/boot') { + return Promise.resolve({ body: "", init: { status: 202 } }) + } else { + let headers = new Headers() + let signed_headers = new Headers() + + headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + const requrl = new URL(req.url) + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }) + let signer = salter.signer("A", true, "agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00", Tier.low) + + let authn = new Authenticater(signer!, signer!.verfer) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID + + return Promise.resolve({ body: JSON.stringify(body), init: { status: 202, headers: signed_headers } }) + } + +}) + +describe('Aiding', () => { + + it('Salty identifiers', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let identifiers = client.identifiers() + + await identifiers.list() + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + assert.equal(lastCall[0]!, url + '/identifiers') + assert.equal(lastCall[1]!.method, 'GET') + + await client.identifiers().create('aid1', { bran: '0123456789abcdefghijk' }) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + let lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!, url + '/identifiers') + assert.equal(lastCall[1]!.method, 'POST') + assert.equal(lastBody.name, 'aid1') + assert.deepEqual(lastBody.icp, { "v": "KERI10JSON00012b_", "t": "icp", "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "s": "0", "kt": "1", "k": ["DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9"], "nt": "1", "n": ["EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc"], "bt": "0", "b": [], "c": [], "a": [] }) + assert.deepEqual(lastBody.sigs, ["AACZZe75PvUZ1lCREPxFAcX59XHo-BGMYTAGni-I4E0eqKznrEoK2d-mtWmWHwKns7tfnjOzTfDUcv7PLFJ52g0A"]) + assert.deepEqual(lastBody.salty.pidx, 0) + assert.deepEqual(lastBody.salty.kidx, 0) + assert.deepEqual(lastBody.salty.stem, "signify:aid") + assert.deepEqual(lastBody.salty.tier, "low") + assert.deepEqual(lastBody.salty.icodes, ["A"]) + assert.deepEqual(lastBody.salty.ncodes, ["A"]) + assert.deepEqual(lastBody.salty.dcode, "E") + assert.deepEqual(lastBody.salty.transferable, true) + + await client.identifiers().create('aid2', { count: 3, ncount: 3, isith: "2", nsith: "2", bran: "0123456789lmnopqrstuv" }) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!, url + '/identifiers') + assert.equal(lastCall[1]!.method, 'POST') + assert.equal(lastBody.name, 'aid2') + assert.deepEqual(lastBody.icp, { "v": "KERI10JSON0001e7_", "t": "icp", "d": "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX", "i": "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX", "s": "0", "kt": "2", "k": ["DGBw7C7AfC7jbD3jLLRS3SzIWFndM947TyNWKQ52iQx5", "DD_bHYFsgWXuCbz3SD0HjCIe_ITjRvEoCGuZ4PcNFFDz", "DEe9u8k0fm1wMFAuOIsCtCNrpduoaV5R21rAcJl0awze"], "nt": "2", "n": ["EML5FrjCpz8SEl4dh0U15l8bMRhV_O5iDcR1opLJGBSH", "EJpKquuibYTqpwMDqEFAFs0gwq0PASAHZ_iDmSF3I2Vg", "ELplTAiEKdobFhlf-dh1vUb2iVDW0dYOSzs1dR7fQo60"], "bt": "0", "b": [], "c": [], "a": [] }) + assert.deepEqual(lastBody.sigs, ["AAD9_IgPaUEBjAl1Ck61Jkn78ErzsnVkIxpaFBYSdSEAW4NbtXsLiUn1olijzdTQYn_Byq6MaEk-eoMN3Oc0WEEC", "ABBWJ7KkAXXiRK8JyEUpeARHJTTzlBHu_ev-jUrNEhV9sX4_4lI7wxowrQisumt5r50bUNfYBK7pxSwHk8I4IFQP", "ACDTITaEquHdYKkS-94tVCxL3IYrtvhlTt__sSUavTJT6fI3KB-uwXV7L0SfzMq0gFqYxkheH2LdC4HkAW2mH4QJ"]) + assert.deepEqual(lastBody.salty.pidx, 1) + assert.deepEqual(lastBody.salty.kidx, 0) + assert.deepEqual(lastBody.salty.stem, "signify:aid") + assert.deepEqual(lastBody.salty.tier, "low") + assert.deepEqual(lastBody.salty.icodes, ["A", "A", "A"]) + assert.deepEqual(lastBody.salty.ncodes, ["A", "A", "A"]) + assert.deepEqual(lastBody.salty.dcode, "E") + assert.deepEqual(lastBody.salty.transferable, true) + + await client.identifiers().rotate('aid1') + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!, url + '/identifiers/aid1') + assert.equal(lastCall[1]!.method, 'PUT') + assert.deepEqual(lastBody.rot, { "v": "KERI10JSON000160_", "t": "rot", "d": "EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg", "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "s": "1", "p": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "kt": "1", "k": ["DHgomzINlGJHr-XP3sv2ZcR9QsIEYS3LJhs4KRaZYKly"], "nt": "1", "n": ["EJMovBlrBuD6BVeUsGSxLjczbLEbZU9YnTSud9K4nVzk"], "bt": "0", "br": [], "ba": [], "a": [] }) + assert.deepEqual(lastBody.sigs, ["AABWSckRpAWLpfFSrpnDR3SzQASrRSVKGh8AnHxauhN_43qKkqPb9l04utnTm2ixNpGGJ-UB8qdKMjfkEQ61AIQC"]) + assert.deepEqual(lastBody.salty.pidx, 0) + assert.deepEqual(lastBody.salty.kidx, 1) + assert.deepEqual(lastBody.salty.stem, "signify:aid") + assert.deepEqual(lastBody.salty.tier, "low") + assert.deepEqual(lastBody.salty.icodes, ["A"]) + assert.deepEqual(lastBody.salty.ncodes, ["A"]) + assert.deepEqual(lastBody.salty.dcode, "E") + assert.deepEqual(lastBody.salty.transferable, true) + + let data = [{ i: "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", s: 0, d: "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK" }] + await client.identifiers().interact('aid1', data) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!, url + '/identifiers/aid1?type=ixn') + assert.equal(lastCall[1]!.method, 'PUT') + assert.deepEqual(lastBody.ixn, { "v": "KERI10JSON000138_", "t": "ixn", "d": "EPtNJLDft3CB-oz3qIhe86fnTKs-GYWiWyx8fJv3VO5e", "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "s": "1", "p": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "a": [{ "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "s": 0, "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK" }] }) + assert.deepEqual(lastBody.sigs, ["AADEzKk-5LT6vH-PWFb_1i1A8FW-KGHORtTOCZrKF4gtWkCr9vN1z_mDSVKRc6MKktpdeB3Ub1fWCGpnS50hRgoJ"]) + + await client.identifiers().addEndRole('aid1', 'agent') + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!, url + '/identifiers/aid1/endroles') + assert.equal(lastCall[1]!.method, 'POST') + assert.equal(lastBody.rpy.t, 'rpy') + assert.equal(lastBody.rpy.r, '/end/role/add') + assert.deepEqual(lastBody.rpy.a, { "cid": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "role": "agent" }) + + await client.identifiers().members('aid1') + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + assert.equal(lastCall[0]!, url + '/identifiers/aid1/members') + assert.equal(lastCall[1]!.method, 'GET') + + }) + + it('Randy identifiers', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let identifiers = client.identifiers() + + await identifiers.list() + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + assert.equal(lastCall[0]!, url + '/identifiers') + assert.equal(lastCall[1]!.method, 'GET') + + await client.identifiers().create('aid1', { bran: '0123456789abcdefghijk', algo: Algos.randy }) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + let lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!, url + '/identifiers') + assert.equal(lastCall[1]!.method, 'POST') + assert.equal(lastBody.name, 'aid1') + assert.deepEqual(lastBody.icp.s, "0") + assert.deepEqual(lastBody.icp.kt, "1") + assert.deepEqual(lastBody.randy.transferable, true) + + }) + + it('CreateIdentiferArgs', () => { + let args: CreateIdentiferArgs; + args = { + isith: 1, + nsith: 1 + }; + args = { + isith: "1", + nsith: "1" + }; + args = { + isith: ["1"], + nsith: ["1"] + }; + args !== null; // avoids TS6133 + }) + + it('RotateIdentifierArgs', () => { + let args: RotateIdentifierArgs; + args = { + nsith: 1 + }; + args = { + nsith: "1" + }; + args = { + nsith: ["1"] + }; + args !== null; // avoids TS6133 + }) + + + +}) \ No newline at end of file diff --git a/test/app/apping.test.ts b/test/app/apping.test.ts deleted file mode 100644 index 0ea0a9f3..00000000 --- a/test/app/apping.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -import {strict as assert} from "assert"; -import {randomPasscode, randomNonce} from '../../src/keri/app/apping' -import libsodium from "libsodium-wrappers-sumo" -import {CreateIdentiferArgs, RotateIdentifierArgs} from "../../src/keri/app/signify"; - -describe('Controller', () => { - it('Random passcode', async () => { - await libsodium.ready; - let passcode = randomPasscode() - assert.equal(passcode.length, 22) - }) - - it('Random nonce', async () => { - await libsodium.ready; - let nonce = randomNonce() - assert.equal(nonce.length, 44) - }) - - it('CreateIdentiferArgs', () => { - let args: CreateIdentiferArgs; - args = { - isith: 1, - nsith: 1 - }; - args = { - isith: "1", - nsith: "1" - }; - args = { - isith: ["1"], - nsith: ["1"] - }; - args !== null; // avoids TS6133 - }) - - it('RotateIdentifierArgs', () => { - let args: RotateIdentifierArgs; - args = { - nsith: 1 - }; - args = { - nsith: "1" - }; - args = { - nsith: ["1"] - }; - args !== null; // avoids TS6133 - }) - - -}) \ No newline at end of file diff --git a/test/app/clienting.test.ts b/test/app/clienting.test.ts new file mode 100644 index 00000000..08489511 --- /dev/null +++ b/test/app/clienting.test.ts @@ -0,0 +1,266 @@ +import {strict as assert} from "assert" +import { SignifyClient } from "../../src/keri/app/clienting" +import { Identifier } from "../../src/keri/app/aiding" +import { Operations, KeyEvents, KeyStates, Oobis } from "../../src/keri/app/coring" +import { Contacts, Challenges } from "../../src/keri/app/contacting" +import { Credentials, Schemas, Registries } from "../../src/keri/app/credentialing" +import { Escrows } from "../../src/keri/app/escrowing" +import { Exchanges } from "../../src/keri/app/exchanging" +import { Groups } from "../../src/keri/app/grouping" +import { Notifications } from "../../src/keri/app/notifying" + +import { Authenticater } from "../../src/keri/core/authing" +import { Salter, Tier } from "../../src/keri/core/salter" +import libsodium from "libsodium-wrappers-sumo" +import fetchMock from "jest-fetch-mock" +import 'whatwg-fetch' + +fetchMock.enableMocks(); + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" +const bran = "0123456789abcdefghijk" + +const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ + '"pidx":0}' +const mockGetAID ={ + "name": "aid1", + "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "salty": { + "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", + "pidx": 0, + "kidx": 0, + "stem": "signify:aid", + "tier": "low", + "dcode": "E", + "icodes": [ + "A" + ], + "ncodes": [ + "A" + ], + "transferable": true + }, + "transferable": true, + "state": { + "vn": [ + 1, + 0 + ], + "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "s": "0", + "p": "", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "f": "0", + "dt": "2023-08-21T22:30:46.473545+00:00", + "et": "icp", + "kt": "1", + "k": [ + "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" + ], + "nt": "1", + "n": [ + "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" + ], + "bt": "0", + "b": [], + "c": [], + "ee": { + "s": "0", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "br": [], + "ba": [] + }, + "di": "" + }, + "windexes": [] +} + +const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} + + +fetchMock.mockResponse(req => { + if (req.url.startsWith(url+'/agent')) { + return Promise.resolve({body: mockConnect, init:{ status: 202 }}) + } else if (req.url == boot_url+'/boot') { + return Promise.resolve({body: "", init:{ status: 202 }}) + } else { + let headers = new Headers() + let signed_headers = new Headers() + + headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + const requrl = new URL(req.url) + let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) + let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) + + let authn = new Authenticater(signer!,signer!.verfer) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID + + return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) + } + +}) + +describe('SignifyClient', () => { + it('SignifyClient initialization', async () => { + await libsodium.ready; + + let t = () => {new SignifyClient(url, 'short', Tier.low, boot_url)} + expect(t).toThrow('bran must be 21 characters') + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + assert.equal(client.bran, "0123456789abcdefghijk") + assert.equal(client.url, url) + assert.equal(client.bootUrl, boot_url) + assert.equal(client.tier, Tier.low) + assert.equal(client.pidx, 0) + assert.equal(client.controller.pre, "ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose") + assert.equal(client.controller.stem, "signify:controller") + assert.equal(client.controller.tier, Tier.low) + assert.equal(client.controller.serder.raw, '{"v":"KERI10JSON00012b_","t":"icp",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0",' + + '"kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],' + + '"nt":"1","n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],' + + '"bt":"0","b":[],"c":[],"a":[]}') + assert.deepEqual(client.controller.serder.ked.s, "0") + + let res = await client.boot() + assert.equal(fetchMock.mock.calls[0]![0]!,boot_url+'/boot') + assert.equal(fetchMock.mock.calls[0]![1]!.body!.toString(),'{"icp":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1","n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]},"sig":"AACJwsJ0mvb4VgxD87H4jIsiT1QtlzznUy9zrX3lGdd48jjQRTv8FxlJ8ClDsGtkvK4Eekg5p-oPYiPvK_1eTXEG","stem":"signify:controller","pidx":1,"tier":"low"}') + assert.equal(res.status, 202) + + await client.connect() + + // validate agent + assert(client.agent!.pre, 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei') + assert(client.agent!.anchor, 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') + assert(client.agent!.said, 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei') + assert(client.agent!.state.s,'0') + assert(client.agent!.state.d,'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei') + + // validate approve delegation + assert.equal(client.controller.serder.ked.s, "1") + assert.equal(client.controller.serder.ked.t, "ixn") + assert.equal(client.controller.serder.ked.a[0].i, "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + assert.equal(client.controller.serder.ked.a[0].d, "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + assert.equal(client.controller.serder.ked.a[0].s, "0") + + let data =client.data + assert(data[0],url) + assert(data[0],bran) + + assert.equal(client.identifiers() instanceof Identifier, true) + assert.equal(client.operations() instanceof Operations, true) + assert.equal(client.keyEvents() instanceof KeyEvents, true) + assert.equal(client.keyStates() instanceof KeyStates, true) + assert.equal(client.keyStates() instanceof KeyStates, true) + assert.equal(client.credentials() instanceof Credentials, true) + assert.equal(client.registries() instanceof Registries, true) + assert.equal(client.schemas() instanceof Schemas, true) + assert.equal(client.challenges() instanceof Challenges, true) + assert.equal(client.contacts() instanceof Contacts, true) + assert.equal(client.notifications() instanceof Notifications, true) + assert.equal(client.escrows() instanceof Escrows, true) + assert.equal(client.oobis() instanceof Oobis, true) + assert.equal(client.exchanges() instanceof Exchanges, true) + assert.equal(client.groups() instanceof Groups, true) + + }) + + it('Signed fetch', async () => { + await libsodium.ready + await libsodium.ready; + const bran = "0123456789abcdefghijk" + const client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.connect() + + let resp = await client.fetch('/contacts','GET', undefined) + assert.equal(resp.status, 202) + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/contacts') + assert.equal(lastCall[1]!.method,'GET') + let lastHeaders = new Headers((lastCall[1]!.headers!)) + assert.equal(lastHeaders.get('signify-resource'),'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') + + // Headers in error + let badAgentHeaders = { + 'signify-resource': 'bad_resource', + 'signify-timestamp': '2023-08-20T15:34:31.534673+00:00', + 'signature-input': 'signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1692545671;keyid="EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei";alg="ed25519"', + 'signature': 'indexed="?0";signify="0BDiSoxCv42h2BtGMHy_tpWAqyCgEoFwRa8bQy20mBB2D5Vik4gRp3XwkEHtqy6iy6SUYAytMUDtRbewotAfkCgN"', + 'content-type': 'application/json', + } + fetchMock.mockResponseOnce('[]', { status: 202, headers: badAgentHeaders }) + let t = async () => await client.fetch('/contacts','GET', undefined) + expect(t).rejects.toThrowError('message from a different remote agent') + + badAgentHeaders = { + 'signify-resource': 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei', + 'signify-timestamp': '2023-08-20T15:34:31.534673+00:00', + 'signature-input': 'signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1692545671;keyid="EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei";alg="ed25519"', + 'signature': 'indexed="?0";signify="0BDiSoxCv42h2BtGMHy_tpWAqyCgEoFwRa8bQy20mBB2D5Vik4gRp3XwkEHtqy6iy6SUYAytMUDtRbewotAfkCbad"', + 'content-type': 'application/json' + } + fetchMock.mockResponseOnce('[]', { status: 202, headers: badAgentHeaders }) + t = async () => await client.fetch('/contacts','GET', undefined) + expect(t).rejects.toThrowError('Signature for EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei invalid.') + + + // Other calls + resp = await client.saveOldPasscode('1234') + assert.equal(resp.status, 202) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/salt/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') + assert.equal(lastCall[1]!.method,'PUT') + assert.equal(lastCall[1]!.body,'{"salt":"1234"}') + + resp = await client.deletePasscode() + assert.equal(resp.status, 202) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/salt/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') + assert.equal(lastCall[1]!.method,'DELETE') + + resp = await client.rotate("abcdefghijk0123456789",[]) + assert.equal(resp.status, 202) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/agent/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') + assert.equal(lastCall[1]!.method,'PUT') + let lastBody = JSON.parse(lastCall[1]!.body!) + assert.equal(lastBody.rot.t,'rot') + assert.equal(lastBody.rot.s,'1') + assert.deepEqual(lastBody.rot.kt,['1','0']) + assert.equal(lastBody.rot.d,'EGFi9pCcRaLK8dPh5S7JP9Em62fBMiR1l4gW1ZazuuAO') + + resp = await client.signedFetch('http://example.com','/test','POST',{foo:true},'aid1') + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,'http://example.com/test') + assert.equal(lastCall[1]!.method,'POST') + lastBody = JSON.parse(lastCall[1]!.body!) + assert.deepEqual(lastBody.foo,true) + lastHeaders = new Headers((lastCall[1]!.headers!)) + assert.equal(lastHeaders.get('signify-resource'),'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK') + + }) + +}) \ No newline at end of file diff --git a/test/app/contacting.test.ts b/test/app/contacting.test.ts new file mode 100644 index 00000000..d675cbde --- /dev/null +++ b/test/app/contacting.test.ts @@ -0,0 +1,205 @@ +import {strict as assert} from "assert" +import { SignifyClient } from "../../src/keri/app/clienting" +import { Authenticater } from "../../src/keri/core/authing" +import { Salter, Tier } from "../../src/keri/core/salter" +import libsodium from "libsodium-wrappers-sumo" +import fetchMock from "jest-fetch-mock" +import 'whatwg-fetch' + +fetchMock.enableMocks(); + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ + '"pidx":0}' +const mockGetAID ={ + "name": "aid1", + "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "salty": { + "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", + "pidx": 0, + "kidx": 0, + "stem": "signify:aid", + "tier": "low", + "dcode": "E", + "icodes": [ + "A" + ], + "ncodes": [ + "A" + ], + "transferable": true + }, + "transferable": true, + "state": { + "vn": [ + 1, + 0 + ], + "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "s": "0", + "p": "", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "f": "0", + "dt": "2023-08-21T22:30:46.473545+00:00", + "et": "icp", + "kt": "1", + "k": [ + "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" + ], + "nt": "1", + "n": [ + "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" + ], + "bt": "0", + "b": [], + "c": [], + "ee": { + "s": "0", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "br": [], + "ba": [] + }, + "di": "" + }, + "windexes": [] +} + +const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} + + +fetchMock.mockResponse(req => { + if (req.url.startsWith(url+'/agent')) { + return Promise.resolve({body: mockConnect, init:{ status: 202 }}) + } else if (req.url == boot_url+'/boot') { + return Promise.resolve({body: "", init:{ status: 202 }}) + } else { + let headers = new Headers() + let signed_headers = new Headers() + + headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + const requrl = new URL(req.url) + let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) + let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) + + let authn = new Authenticater(signer!,signer!.verfer) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID + + return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) + } + +}) + +describe('Contacting', () => { + + it('Contacts', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let contacts = client.contacts() + + + await contacts.list("mygroup","company","mycompany") + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/contacts?group=mygroup&filter_field=company&filter_value=mycompany') + assert.equal(lastCall[1]!.method,'GET') + + + await contacts.get("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') + assert.equal(lastCall[1]!.method,'GET') + + let info = { + "name": "John Doe", + "company": "My Company" + } + await contacts.add("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao",info) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + let lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') + assert.equal(lastCall[1]!.method,'POST') + assert.deepEqual(lastBody,info) + + await contacts.update("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao",info) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') + assert.equal(lastCall[1]!.method,'PUT') + assert.deepEqual(lastBody,info) + + await contacts.delete("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') + assert.equal(lastCall[1]!.method,'DELETE') + + }) + + it('Challenges', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let challenges = client.challenges() + + + await challenges.generate(128) + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/challenges?strength=128') + assert.equal(lastCall[1]!.method,'GET') + + const words = ["shell", "gloom", "mimic", "cereal", "stool", "furnace", "nominee", "nation", "sauce", "sausage", "rather", "venue"] + await challenges.respond("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p",words) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/challenges/aid1') + assert.equal(lastCall[1]!.method,'POST') + let lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.deepEqual(lastBody.words,words) + assert.equal(lastBody.recipient,"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p") + assert.equal(lastBody.exn.r,"/challenge/response") + assert.equal(lastBody.exn.a.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.deepEqual(lastBody.exn.a.words,words) + assert.equal(lastBody.sig.length,144) + + await challenges.accept("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p","EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/challenges/aid1') + assert.equal(lastCall[1]!.method,'PUT') + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastBody.aid,"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p") + assert.equal(lastBody.said,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + + }) + + +}) \ No newline at end of file diff --git a/test/app/coring.test.ts b/test/app/coring.test.ts new file mode 100644 index 00000000..a2b2f421 --- /dev/null +++ b/test/app/coring.test.ts @@ -0,0 +1,218 @@ +import {strict as assert} from "assert"; +import libsodium from "libsodium-wrappers-sumo" +import { randomPasscode, randomNonce } from "../../src/keri/app/coring"; +import { SignifyClient } from "../../src/keri/app/clienting"; +import { Authenticater } from "../../src/keri/core/authing" +import { Salter, Tier } from "../../src/keri/core/salter" +import fetchMock from "jest-fetch-mock" +import 'whatwg-fetch' + +fetchMock.enableMocks(); + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +fetchMock.enableMocks(); + +const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ + '"pidx":0}' +const mockGetAID ={ + "name": "aid1", + "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "salty": { + "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", + "pidx": 0, + "kidx": 0, + "stem": "signify:aid", + "tier": "low", + "dcode": "E", + "icodes": [ + "A" + ], + "ncodes": [ + "A" + ], + "transferable": true + }, + "transferable": true, + "state": { + "vn": [ + 1, + 0 + ], + "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "s": "0", + "p": "", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "f": "0", + "dt": "2023-08-21T22:30:46.473545+00:00", + "et": "icp", + "kt": "1", + "k": [ + "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" + ], + "nt": "1", + "n": [ + "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" + ], + "bt": "0", + "b": [], + "c": [], + "ee": { + "s": "0", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "br": [], + "ba": [] + }, + "di": "" + }, + "windexes": [] +} + +const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} + + +fetchMock.mockResponse(req => { + if (req.url.startsWith(url+'/agent')) { + return Promise.resolve({body: mockConnect, init:{ status: 202 }}) + } else if (req.url == boot_url+'/boot') { + return Promise.resolve({body: "", init:{ status: 202 }}) + } else { + let headers = new Headers() + let signed_headers = new Headers() + + headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + const requrl = new URL(req.url) + let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) + let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) + + let authn = new Authenticater(signer!,signer!.verfer) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID + + return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) + } + +}) + +describe('Coring', () => { + it('Random passcode', async () => { + await libsodium.ready; + let passcode = randomPasscode() + assert.equal(passcode.length, 22) + }) + + it('Random nonce', async () => { + await libsodium.ready; + let nonce = randomNonce() + assert.equal(nonce.length, 44) + }) + + it('OOBIs', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let oobis = client.oobis() + + await oobis.get("aid","agent") + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/identifiers/aid/oobis?role=agent') + assert.equal(lastCall[1]!.method,'GET') + + await oobis.resolve("http://oobiurl.com") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + let lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/oobis') + assert.equal(lastCall[1]!.method,'POST') + assert.deepEqual(lastBody.url,"http://oobiurl.com") + + await oobis.resolve("http://oobiurl.com","witness") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/oobis') + assert.equal(lastCall[1]!.method,'POST') + assert.deepEqual(lastBody.url,"http://oobiurl.com") + assert.deepEqual(lastBody.oobialias,"witness") + + }) + + it('Operations', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let ops = client.operations() + + await ops.get("operationName") + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/operations/operationName') + assert.equal(lastCall[1]!.method,'GET') + + + }) + + it('Events and states', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let keyEvents = client.keyEvents() + let keyStates = client.keyStates() + + await keyEvents.get("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/events?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX') + assert.equal(lastCall[1]!.method,'GET') + + await keyStates.get("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/states?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX') + assert.equal(lastCall[1]!.method,'GET') + + await keyStates.list(["EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX","ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK"]) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/states?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX&pre=ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK') + assert.equal(lastCall[1]!.method,'GET') + + await keyStates.query("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX",1,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + let lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/queries') + assert.equal(lastCall[1]!.method,'POST') + assert.equal(lastBody.pre,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") + assert.equal(lastBody.sn,1) + assert.equal(lastBody.anchor,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + }) + +}) \ No newline at end of file diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts new file mode 100644 index 00000000..921baedf --- /dev/null +++ b/test/app/credentialing.test.ts @@ -0,0 +1,213 @@ +import {strict as assert} from "assert" +import { SignifyClient } from "../../src/keri/app/clienting" + +import { Authenticater } from "../../src/keri/core/authing" +import { Salter, Tier } from "../../src/keri/core/salter" +import libsodium from "libsodium-wrappers-sumo" +import fetchMock from "jest-fetch-mock" +import 'whatwg-fetch' + +fetchMock.enableMocks(); + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ + '"pidx":0}' +const mockGetAID ={ + "name": "aid1", + "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "salty": { + "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", + "pidx": 0, + "kidx": 0, + "stem": "signify:aid", + "tier": "low", + "dcode": "E", + "icodes": [ + "A" + ], + "ncodes": [ + "A" + ], + "transferable": true + }, + "transferable": true, + "state": { + "vn": [ + 1, + 0 + ], + "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "s": "0", + "p": "", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "f": "0", + "dt": "2023-08-21T22:30:46.473545+00:00", + "et": "icp", + "kt": "1", + "k": [ + "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" + ], + "nt": "1", + "n": [ + "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" + ], + "bt": "0", + "b": [], + "c": [], + "ee": { + "s": "0", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "br": [], + "ba": [] + }, + "di": "" + }, + "windexes": [] +} + +const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} + + +fetchMock.mockResponse(req => { + if (req.url.startsWith(url+'/agent')) { + return Promise.resolve({body: mockConnect, init:{ status: 202 }}) + } else if (req.url == boot_url+'/boot') { + return Promise.resolve({body: "", init:{ status: 202 }}) + } else { + let headers = new Headers() + let signed_headers = new Headers() + + headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + const requrl = new URL(req.url) + let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) + let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) + + let authn = new Authenticater(signer!,signer!.verfer) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID + + return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) + } + +}) + +describe('Credentialing', () => { + it('Credentials', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let credentials = client.credentials() + + let kargs = { + filter:{"-i": {"$eq": "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX"}}, + sort: [{"-s": 1}], + limit: 25, + skip: 5 + } + await credentials.list("aid1",kargs) + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + let lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/query') + assert.equal(lastCall[1]!.method,'POST') + assert.deepEqual(lastBody,kargs) + + await credentials.get("aid1","EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao",true) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') + assert.equal(lastCall[1]!.method,'GET') + + const registry = "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX" + const schema = "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao" + const isuee = "EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p" + await credentials.issue('aid1',registry,schema,isuee,{LEI: '1234'},{},{},false) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials') + assert.equal(lastCall[1]!.method,'POST') + assert.equal(lastBody.cred.ri,registry) + assert.equal(lastBody.cred.s,schema) + assert.equal(lastBody.cred.a.i,isuee) + assert.equal(lastBody.cred.a.LEI,'1234') + assert.equal(lastBody.iss.s,"0") + assert.equal(lastBody.iss.t,"iss") + assert.equal(lastBody.iss.ri,registry) + assert.equal(lastBody.iss.i,lastBody.cred.d) + assert.equal(lastBody.ixn.t,"ixn") + assert.equal(lastBody.ixn.i,lastBody.cred.i) + assert.equal(lastBody.ixn.p,lastBody.cred.i) + assert.equal(lastBody.path,'6AABAAA-') + assert.equal(lastBody.csigs[0].substring(0,2),'AA') + assert.equal(lastBody.csigs[0].length,88) + assert.equal(lastBody.sigs[0].substring(0,2),'AA') + assert.equal(lastBody.sigs[0].length,88) + + const credential = lastBody.cred.i + await credentials.revoke('aid1',credential) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/'+credential) + assert.equal(lastCall[1]!.method,'DELETE') + assert.equal(lastBody.rev.s,"1") + assert.equal(lastBody.rev.t,"rev") + assert.equal(lastBody.rev.ri,"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df") + assert.equal(lastBody.rev.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.ixn.t,"ixn") + assert.equal(lastBody.ixn.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.ixn.p,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.sigs[0].substring(0,2),'AA') + assert.equal(lastBody.sigs[0].length,88) + + await credentials.present('aid1',credential, "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX",false) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/'+credential+'/presentations') + assert.equal(lastCall[1]!.method,'POST') + assert.equal(lastBody.exn.t,"exn") + assert.equal(lastBody.exn.r,"/presentation") + assert.equal(lastBody.exn.a.n,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.exn.a.s,schema) + assert.equal(lastBody.sig.length,144) + assert.equal(lastBody.recipient,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") + assert.equal(lastBody.include, false) + + await credentials.request('aid1', "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX", credential,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastCall[0]!,url+'/identifiers/aid1/requests') + assert.equal(lastCall[1]!.method,'POST') + assert.equal(lastBody.exn.t,"exn") + assert.equal(lastBody.exn.r,"/presentation/request") + assert.equal(lastBody.exn.a.i,registry) + assert.equal(lastBody.exn.a.s,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.sig.length,144) + assert.equal(lastBody.recipient,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") + + }) + + +}) \ No newline at end of file diff --git a/test/app/escrowing.test.ts b/test/app/escrowing.test.ts new file mode 100644 index 00000000..825d580b --- /dev/null +++ b/test/app/escrowing.test.ts @@ -0,0 +1,134 @@ +import { strict as assert } from "assert" +import { SignifyClient } from "../../src/keri/app/clienting" +import { Authenticater } from "../../src/keri/core/authing" +import { Salter, Tier } from "../../src/keri/core/salter" +import fetchMock from "jest-fetch-mock" +import libsodium from "libsodium-wrappers-sumo" +import 'whatwg-fetch' + +fetchMock.enableMocks(); + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],' + + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},' + + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",' + + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},' + + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + + '"pidx":0}' +const mockGetAID = { + "name": "aid1", + "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "salty": { + "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", + "pidx": 0, + "kidx": 0, + "stem": "signify:aid", + "tier": "low", + "dcode": "E", + "icodes": [ + "A" + ], + "ncodes": [ + "A" + ], + "transferable": true + }, + "transferable": true, + "state": { + "vn": [ + 1, + 0 + ], + "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "s": "0", + "p": "", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "f": "0", + "dt": "2023-08-21T22:30:46.473545+00:00", + "et": "icp", + "kt": "1", + "k": [ + "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" + ], + "nt": "1", + "n": [ + "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" + ], + "bt": "0", + "b": [], + "c": [], + "ee": { + "s": "0", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "br": [], + "ba": [] + }, + "di": "" + }, + "windexes": [] +} + +const mockCredential = { "sad": { "v": "ACDC10JSON000197_", "d": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "i": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "s": "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao", "a": { "d": "EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P", "i": "EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby", "dt": "2023-08-23T15:16:07.553000+00:00", "LEI": "5493001KJTIIGC8Y1R17" } }, "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sadsigers": [{ "path": "-", "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sn": 0, "d": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1" }], "sadcigars": [], "chains": [], "status": { "v": "KERI10JSON000135_", "i": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "s": "0", "d": "ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "ra": {}, "a": { "s": 2, "d": "EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt" }, "dt": "2023-08-23T15:16:07.553000+00:00", "et": "iss" } } + + +fetchMock.mockResponse(req => { + if (req.url.startsWith(url + '/agent')) { + return Promise.resolve({ body: mockConnect, init: { status: 202 } }) + } else if (req.url == boot_url + '/boot') { + return Promise.resolve({ body: "", init: { status: 202 } }) + } else { + let headers = new Headers() + let signed_headers = new Headers() + + headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + const requrl = new URL(req.url) + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }) + let signer = salter.signer("A", true, "agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00", Tier.low) + + let authn = new Authenticater(signer!, signer!.verfer) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID + + return Promise.resolve({ body: JSON.stringify(body), init: { status: 202, headers: signed_headers } }) + } + +}) + +describe('SignifyClient', () => { + + it('Escrows', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let escrows = client.escrows() + + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + await escrows.listReply('/presentation/request') + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + assert.equal(lastCall[0]!, url + '/escrows/rpy?route=%2Fpresentation%2Frequest') + assert.equal(lastCall[1]!.method, 'GET') + + }) + +}) \ No newline at end of file diff --git a/test/app/notifying.test.ts b/test/app/notifying.test.ts new file mode 100644 index 00000000..44be8f71 --- /dev/null +++ b/test/app/notifying.test.ts @@ -0,0 +1,143 @@ +import {strict as assert} from "assert" +import { Authenticater } from "../../src/keri/core/authing" +import { Salter, Tier } from "../../src/keri/core/salter" +import { SignifyClient } from "../../src/keri/app/clienting" +import libsodium from "libsodium-wrappers-sumo" +import fetchMock from "jest-fetch-mock" +import 'whatwg-fetch' + +fetchMock.enableMocks(); + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ + '"pidx":0}' +const mockGetAID ={ + "name": "aid1", + "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "salty": { + "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", + "pidx": 0, + "kidx": 0, + "stem": "signify:aid", + "tier": "low", + "dcode": "E", + "icodes": [ + "A" + ], + "ncodes": [ + "A" + ], + "transferable": true + }, + "transferable": true, + "state": { + "vn": [ + 1, + 0 + ], + "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "s": "0", + "p": "", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "f": "0", + "dt": "2023-08-21T22:30:46.473545+00:00", + "et": "icp", + "kt": "1", + "k": [ + "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" + ], + "nt": "1", + "n": [ + "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" + ], + "bt": "0", + "b": [], + "c": [], + "ee": { + "s": "0", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "br": [], + "ba": [] + }, + "di": "" + }, + "windexes": [] +} + +const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} + + +fetchMock.mockResponse(req => { + if (req.url.startsWith(url+'/agent')) { + return Promise.resolve({body: mockConnect, init:{ status: 202 }}) + } else if (req.url == boot_url+'/boot') { + return Promise.resolve({body: "", init:{ status: 202 }}) + } else { + let headers = new Headers() + let signed_headers = new Headers() + + headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + const requrl = new URL(req.url) + let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) + let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) + + let authn = new Authenticater(signer!,signer!.verfer) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID + + return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) + } + +}) + +describe('SignifyClient', () => { + it('Notifications', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let notifications = client.notifications() + + await notifications.list(20, 40) + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/notifications') + assert.equal(lastCall[1]!.method,'GET') + let lastHeaders = new Headers((lastCall[1]!.headers!)) + assert.equal(lastHeaders.get('Range'),'notes=20-40') + + await notifications.mark("notificationSAID") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/notifications/notificationSAID') + assert.equal(lastCall[1]!.method,'PUT') + + await notifications.delete("notificationSAID") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/notifications/notificationSAID') + assert.equal(lastCall[1]!.method,'DELETE') + }) + +}) \ No newline at end of file diff --git a/test/app/signify.test.ts b/test/app/signify.test.ts deleted file mode 100644 index f3024a37..00000000 --- a/test/app/signify.test.ts +++ /dev/null @@ -1,727 +0,0 @@ -import {strict as assert} from "assert" -import { SignifyClient, Identifier, Operations, KeyEvents, KeyStates, Contacts, Notifications, Credentials, Registries, Schemas, Challenges, Escrows, Oobis} from "../../src/keri/app/signify" -import { Authenticater } from "../../src/keri/core/authing" -import { Salter, Tier } from "../../src/keri/core/salter" -import { Algos } from "../../src/keri/core/manager" -import libsodium from "libsodium-wrappers-sumo" -import fetchMock from "jest-fetch-mock" -import 'whatwg-fetch' - -fetchMock.enableMocks(); - -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" -const bran = "0123456789abcdefghijk" - -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ - '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ - '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ - '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ - '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ - '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ - '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ - '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ - '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ - '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ - '"pidx":0}' -const mockGetAID ={ - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true - }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] - }, - "di": "" - }, - "windexes": [] -} - -const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} - - -fetchMock.mockResponse(req => { - if (req.url.startsWith(url+'/agent')) { - return Promise.resolve({body: mockConnect, init:{ status: 202 }}) - } else if (req.url == boot_url+'/boot') { - return Promise.resolve({body: "", init:{ status: 202 }}) - } else { - let headers = new Headers() - let signed_headers = new Headers() - - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - const requrl = new URL(req.url) - let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) - let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) - - let authn = new Authenticater(signer!,signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID - - return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) - } - -}) - -describe('SignifyClient', () => { - it('SignifyClient initialization', async () => { - await libsodium.ready; - - let t = () => {new SignifyClient(url, 'short', Tier.low, boot_url)} - expect(t).toThrow('bran must be 21 characters') - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - assert.equal(client.bran, "0123456789abcdefghijk") - assert.equal(client.url, url) - assert.equal(client.bootUrl, boot_url) - assert.equal(client.tier, Tier.low) - assert.equal(client.pidx, 0) - assert.equal(client.controller.pre, "ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose") - assert.equal(client.controller.stem, "signify:controller") - assert.equal(client.controller.tier, Tier.low) - assert.equal(client.controller.serder.raw, '{"v":"KERI10JSON00012b_","t":"icp",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0",' + - '"kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],' + - '"nt":"1","n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],' + - '"bt":"0","b":[],"c":[],"a":[]}') - assert.deepEqual(client.controller.serder.ked.s, "0") - - let res = await client.boot() - assert.equal(fetchMock.mock.calls[0]![0]!,boot_url+'/boot') - assert.equal(fetchMock.mock.calls[0]![1]!.body!.toString(),'{"icp":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1","n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]},"sig":"AACJwsJ0mvb4VgxD87H4jIsiT1QtlzznUy9zrX3lGdd48jjQRTv8FxlJ8ClDsGtkvK4Eekg5p-oPYiPvK_1eTXEG","stem":"signify:controller","pidx":1,"tier":"low"}') - assert.equal(res.status, 202) - - await client.connect() - - // validate agent - assert(client.agent!.pre, 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei') - assert(client.agent!.anchor, 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') - assert(client.agent!.said, 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei') - assert(client.agent!.state.s,'0') - assert(client.agent!.state.d,'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei') - - // validate approve delegation - assert.equal(client.controller.serder.ked.s, "1") - assert.equal(client.controller.serder.ked.t, "ixn") - assert.equal(client.controller.serder.ked.a[0].i, "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - assert.equal(client.controller.serder.ked.a[0].d, "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - assert.equal(client.controller.serder.ked.a[0].s, "0") - - let data =client.data - assert(data[0],url) - assert(data[0],bran) - - assert.equal(client.identifiers() instanceof Identifier, true) - assert.equal(client.operations() instanceof Operations, true) - assert.equal(client.keyEvents() instanceof KeyEvents, true) - assert.equal(client.keyStates() instanceof KeyStates, true) - assert.equal(client.keyStates() instanceof KeyStates, true) - assert.equal(client.credentials() instanceof Credentials, true) - assert.equal(client.registries() instanceof Registries, true) - assert.equal(client.schemas() instanceof Schemas, true) - assert.equal(client.challenges() instanceof Challenges, true) - assert.equal(client.contacts() instanceof Contacts, true) - assert.equal(client.notifications() instanceof Notifications, true) - assert.equal(client.escrows() instanceof Escrows, true) - assert.equal(client.oobis() instanceof Oobis, true) - - }) - - it('Signed fetch', async () => { - await libsodium.ready - await libsodium.ready; - const bran = "0123456789abcdefghijk" - const client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.connect() - - let resp = await client.fetch('/contacts','GET', undefined) - assert.equal(resp.status, 202) - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/contacts') - assert.equal(lastCall[1]!.method,'GET') - let lastHeaders = new Headers((lastCall[1]!.headers!)) - assert.equal(lastHeaders.get('signify-resource'),'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') - - // Headers in error - let badAgentHeaders = { - 'signify-resource': 'bad_resource', - 'signify-timestamp': '2023-08-20T15:34:31.534673+00:00', - 'signature-input': 'signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1692545671;keyid="EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei";alg="ed25519"', - 'signature': 'indexed="?0";signify="0BDiSoxCv42h2BtGMHy_tpWAqyCgEoFwRa8bQy20mBB2D5Vik4gRp3XwkEHtqy6iy6SUYAytMUDtRbewotAfkCgN"', - 'content-type': 'application/json', - } - fetchMock.mockResponseOnce('[]', { status: 202, headers: badAgentHeaders }) - let t = async () => await client.fetch('/contacts','GET', undefined) - expect(t).rejects.toThrowError('message from a different remote agent') - - badAgentHeaders = { - 'signify-resource': 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei', - 'signify-timestamp': '2023-08-20T15:34:31.534673+00:00', - 'signature-input': 'signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1692545671;keyid="EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei";alg="ed25519"', - 'signature': 'indexed="?0";signify="0BDiSoxCv42h2BtGMHy_tpWAqyCgEoFwRa8bQy20mBB2D5Vik4gRp3XwkEHtqy6iy6SUYAytMUDtRbewotAfkCbad"', - 'content-type': 'application/json' - } - fetchMock.mockResponseOnce('[]', { status: 202, headers: badAgentHeaders }) - t = async () => await client.fetch('/contacts','GET', undefined) - expect(t).rejects.toThrowError('Signature for EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei invalid.') - - - // Other calls - resp = await client.saveOldPasscode('1234') - assert.equal(resp.status, 202) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/salt/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') - assert.equal(lastCall[1]!.method,'PUT') - assert.equal(lastCall[1]!.body,'{"salt":"1234"}') - - resp = await client.deletePasscode() - assert.equal(resp.status, 202) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/salt/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') - assert.equal(lastCall[1]!.method,'DELETE') - - resp = await client.rotate("abcdefghijk0123456789",[]) - assert.equal(resp.status, 202) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/agent/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') - assert.equal(lastCall[1]!.method,'PUT') - let lastBody = JSON.parse(lastCall[1]!.body!) - assert.equal(lastBody.rot.t,'rot') - assert.equal(lastBody.rot.s,'1') - assert.deepEqual(lastBody.rot.kt,['1','0']) - assert.equal(lastBody.rot.d,'EGFi9pCcRaLK8dPh5S7JP9Em62fBMiR1l4gW1ZazuuAO') - - resp = await client.signedFetch('http://example.com','/test','POST',{foo:true},'aid1') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,'http://example.com/test') - assert.equal(lastCall[1]!.method,'POST') - lastBody = JSON.parse(lastCall[1]!.body!) - assert.deepEqual(lastBody.foo,true) - lastHeaders = new Headers((lastCall[1]!.headers!)) - assert.equal(lastHeaders.get('signify-resource'),'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK') - - }) - - it('Salty identifiers', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let identifiers = client.identifiers() - - await identifiers.list() - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/identifiers') - assert.equal(lastCall[1]!.method,'GET') - - await client.identifiers().create('aid1', {bran: '0123456789abcdefghijk'}) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.name,'aid1') - assert.deepEqual(lastBody.icp,{"v":"KERI10JSON00012b_","t":"icp","d":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","i":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","s":"0","kt":"1","k":["DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9"],"nt":"1","n":["EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc"],"bt":"0","b":[],"c":[],"a":[]}) - assert.deepEqual(lastBody.sigs,["AACZZe75PvUZ1lCREPxFAcX59XHo-BGMYTAGni-I4E0eqKznrEoK2d-mtWmWHwKns7tfnjOzTfDUcv7PLFJ52g0A"]) - assert.deepEqual(lastBody.salty.pidx,0) - assert.deepEqual(lastBody.salty.kidx,0) - assert.deepEqual(lastBody.salty.stem,"signify:aid") - assert.deepEqual(lastBody.salty.tier,"low") - assert.deepEqual(lastBody.salty.icodes,["A"]) - assert.deepEqual(lastBody.salty.ncodes,["A"]) - assert.deepEqual(lastBody.salty.dcode,"E") - assert.deepEqual(lastBody.salty.transferable,true) - - await client.identifiers().create('aid2', {count:3, ncount:3, isith:"2", nsith:"2", bran:"0123456789lmnopqrstuv"}) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.name,'aid2') - assert.deepEqual(lastBody.icp,{"v":"KERI10JSON0001e7_","t":"icp","d":"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX","i":"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX","s":"0","kt":"2","k":["DGBw7C7AfC7jbD3jLLRS3SzIWFndM947TyNWKQ52iQx5","DD_bHYFsgWXuCbz3SD0HjCIe_ITjRvEoCGuZ4PcNFFDz","DEe9u8k0fm1wMFAuOIsCtCNrpduoaV5R21rAcJl0awze"],"nt":"2","n":["EML5FrjCpz8SEl4dh0U15l8bMRhV_O5iDcR1opLJGBSH","EJpKquuibYTqpwMDqEFAFs0gwq0PASAHZ_iDmSF3I2Vg","ELplTAiEKdobFhlf-dh1vUb2iVDW0dYOSzs1dR7fQo60"],"bt":"0","b":[],"c":[],"a":[]}) - assert.deepEqual(lastBody.sigs,["AAD9_IgPaUEBjAl1Ck61Jkn78ErzsnVkIxpaFBYSdSEAW4NbtXsLiUn1olijzdTQYn_Byq6MaEk-eoMN3Oc0WEEC","ABBWJ7KkAXXiRK8JyEUpeARHJTTzlBHu_ev-jUrNEhV9sX4_4lI7wxowrQisumt5r50bUNfYBK7pxSwHk8I4IFQP","ACDTITaEquHdYKkS-94tVCxL3IYrtvhlTt__sSUavTJT6fI3KB-uwXV7L0SfzMq0gFqYxkheH2LdC4HkAW2mH4QJ"]) - assert.deepEqual(lastBody.salty.pidx,1) - assert.deepEqual(lastBody.salty.kidx,0) - assert.deepEqual(lastBody.salty.stem,"signify:aid") - assert.deepEqual(lastBody.salty.tier,"low") - assert.deepEqual(lastBody.salty.icodes,["A","A","A"]) - assert.deepEqual(lastBody.salty.ncodes,["A","A","A"]) - assert.deepEqual(lastBody.salty.dcode,"E") - assert.deepEqual(lastBody.salty.transferable,true) - - await client.identifiers().rotate('aid1') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1') - assert.equal(lastCall[1]!.method,'PUT') - assert.deepEqual(lastBody.rot,{"v":"KERI10JSON000160_","t":"rot","d":"EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg","i":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","s":"1","p":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","kt":"1","k":["DHgomzINlGJHr-XP3sv2ZcR9QsIEYS3LJhs4KRaZYKly"],"nt":"1","n":["EJMovBlrBuD6BVeUsGSxLjczbLEbZU9YnTSud9K4nVzk"],"bt":"0","br":[],"ba":[],"a":[]}) - assert.deepEqual(lastBody.sigs,["AABWSckRpAWLpfFSrpnDR3SzQASrRSVKGh8AnHxauhN_43qKkqPb9l04utnTm2ixNpGGJ-UB8qdKMjfkEQ61AIQC"]) - assert.deepEqual(lastBody.salty.pidx,0) - assert.deepEqual(lastBody.salty.kidx,1) - assert.deepEqual(lastBody.salty.stem,"signify:aid") - assert.deepEqual(lastBody.salty.tier,"low") - assert.deepEqual(lastBody.salty.icodes,["A"]) - assert.deepEqual(lastBody.salty.ncodes,["A"]) - assert.deepEqual(lastBody.salty.dcode,"E") - assert.deepEqual(lastBody.salty.transferable,true) - - let data = [{i:"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK",s:0,d:"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK"}] - await client.identifiers().interact('aid1',data) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1?type=ixn') - assert.equal(lastCall[1]!.method,'PUT') - assert.deepEqual(lastBody.ixn,{"v":"KERI10JSON000138_","t":"ixn","d":"EPtNJLDft3CB-oz3qIhe86fnTKs-GYWiWyx8fJv3VO5e","i":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","s":"1","p":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","a":[{"i":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","s":0,"d":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK"}]}) - assert.deepEqual(lastBody.sigs,["AADEzKk-5LT6vH-PWFb_1i1A8FW-KGHORtTOCZrKF4gtWkCr9vN1z_mDSVKRc6MKktpdeB3Ub1fWCGpnS50hRgoJ"]) - - await client.identifiers().addEndRole('aid1','agent') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/endroles') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.rpy.t,'rpy') - assert.equal(lastBody.rpy.r,'/end/role/add') - assert.deepEqual(lastBody.rpy.a,{"cid":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","role":"agent"}) - - await client.identifiers().members('aid1') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/identifiers/aid1/members') - assert.equal(lastCall[1]!.method,'GET') - - }) - - it('Randy identifiers', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let identifiers = client.identifiers() - - await identifiers.list() - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/identifiers') - assert.equal(lastCall[1]!.method,'GET') - - await client.identifiers().create('aid1', {bran: '0123456789abcdefghijk',algo: Algos.randy}) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.name,'aid1') - assert.deepEqual(lastBody.icp.s,"0") - assert.deepEqual(lastBody.icp.kt,"1") - assert.deepEqual(lastBody.randy.transferable,true) - - }) - - it('Registries and schemas', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let registries = client.registries() - - await registries.list("aid") - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/identifiers/aid/registries') - assert.equal(lastCall[1]!.method,'GET') - - await registries.create("aid", "reg1","ALGn4yvn-VoiEuKgSZcAyM-QyPHIZFHn9CKZz0DOI5ue") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid/registries') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.name,"reg1") - assert.deepEqual(lastBody.vcp,{"v":"KERI10JSON000113_","t":"vcp","d":"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p","i":"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p","ii":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","s":"0","c":["NB"],"bt":"0","b":[],"n":"ALGn4yvn-VoiEuKgSZcAyM-QyPHIZFHn9CKZz0DOI5ue"}) - assert.deepEqual(lastBody.ixn,{"v":"KERI10JSON00013a_","t":"ixn","d":"EMMF0C7NyqdEUZwLhRqe6Ki4bEMwdmnDFKkejhQwQDUD","i":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","s":"1","p":"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK","a":[{"i":"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p","s":"0","d":"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p"}]}) - assert.deepEqual(lastBody.sigs,["AABtw7U9CsMBd5Iq9j5SsQsHSK3-E85SjzWCqakyTVGbO_8UrSDXjg2a6O5xsDwu2rVjhs8HsHYjMu5mOoriWQgD"]) - - let schemas = client.schemas() - - await schemas.list() - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/schema') - assert.equal(lastCall[1]!.method,'GET') - - const schemaSAID = "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao" - await schemas.get(schemaSAID) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/schema/'+schemaSAID) - assert.equal(lastCall[1]!.method,'GET') - - }) - - it('OOBIs', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let oobis = client.oobis() - - await oobis.get("aid","agent") - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/identifiers/aid/oobis?role=agent') - assert.equal(lastCall[1]!.method,'GET') - - await oobis.resolve("http://oobiurl.com") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/oobis') - assert.equal(lastCall[1]!.method,'POST') - assert.deepEqual(lastBody.url,"http://oobiurl.com") - - await oobis.resolve("http://oobiurl.com","witness") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/oobis') - assert.equal(lastCall[1]!.method,'POST') - assert.deepEqual(lastBody.url,"http://oobiurl.com") - assert.deepEqual(lastBody.oobialias,"witness") - - }) - - it('Operations', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let ops = client.operations() - - await ops.get("operationName") - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/operations/operationName') - assert.equal(lastCall[1]!.method,'GET') - - - }) - - it('Events and states', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let keyEvents = client.keyEvents() - let keyStates = client.keyStates() - - await keyEvents.get("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/events?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX') - assert.equal(lastCall[1]!.method,'GET') - - await keyStates.get("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/states?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX') - assert.equal(lastCall[1]!.method,'GET') - - await keyStates.list(["EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX","ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK"]) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/states?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX&pre=ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK') - assert.equal(lastCall[1]!.method,'GET') - - await keyStates.query("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX",1,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/queries') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.pre,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - assert.equal(lastBody.sn,1) - assert.equal(lastBody.anchor,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - }) - - it('Credentials', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let credentials = client.credentials() - - let kargs = { - filter:{"-i": {"$eq": "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX"}}, - sort: [{"-s": 1}], - limit: 25, - skip: 5 - } - await credentials.list("aid1",kargs) - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/query') - assert.equal(lastCall[1]!.method,'POST') - assert.deepEqual(lastBody,kargs) - - await credentials.get("aid1","EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao",true) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') - assert.equal(lastCall[1]!.method,'GET') - - const registry = "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX" - const schema = "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao" - const isuee = "EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p" - await credentials.issue('aid1',registry,schema,isuee,{LEI: '1234'},{},{},false) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.cred.ri,registry) - assert.equal(lastBody.cred.s,schema) - assert.equal(lastBody.cred.a.i,isuee) - assert.equal(lastBody.cred.a.LEI,'1234') - assert.equal(lastBody.iss.s,"0") - assert.equal(lastBody.iss.t,"iss") - assert.equal(lastBody.iss.ri,registry) - assert.equal(lastBody.iss.i,lastBody.cred.d) - assert.equal(lastBody.ixn.t,"ixn") - assert.equal(lastBody.ixn.i,lastBody.cred.i) - assert.equal(lastBody.ixn.p,lastBody.cred.i) - assert.equal(lastBody.path,'6AABAAA-') - assert.equal(lastBody.csigs[0].substring(0,2),'AA') - assert.equal(lastBody.csigs[0].length,88) - assert.equal(lastBody.sigs[0].substring(0,2),'AA') - assert.equal(lastBody.sigs[0].length,88) - - const credential = lastBody.cred.i - await credentials.revoke('aid1',credential) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/'+credential) - assert.equal(lastCall[1]!.method,'DELETE') - assert.equal(lastBody.rev.s,"1") - assert.equal(lastBody.rev.t,"rev") - assert.equal(lastBody.rev.ri,"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df") - assert.equal(lastBody.rev.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.equal(lastBody.ixn.t,"ixn") - assert.equal(lastBody.ixn.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.equal(lastBody.ixn.p,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.equal(lastBody.sigs[0].substring(0,2),'AA') - assert.equal(lastBody.sigs[0].length,88) - - await credentials.present('aid1',credential, "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX",false) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/'+credential+'/presentations') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.exn.t,"exn") - assert.equal(lastBody.exn.r,"/presentation") - assert.equal(lastBody.exn.a.n,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.equal(lastBody.exn.a.s,schema) - assert.equal(lastBody.sig.length,144) - assert.equal(lastBody.recipient,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - assert.equal(lastBody.include, false) - - await credentials.request('aid1', "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX", credential,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/requests') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.exn.t,"exn") - assert.equal(lastBody.exn.r,"/presentation/request") - assert.equal(lastBody.exn.a.i,registry) - assert.equal(lastBody.exn.a.s,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.equal(lastBody.sig.length,144) - assert.equal(lastBody.recipient,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - - }) - - it('Contacts', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let contacts = client.contacts() - - - await contacts.list("mygroup","company","mycompany") - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/contacts?group=mygroup&filter_field=company&filter_value=mycompany') - assert.equal(lastCall[1]!.method,'GET') - - - await contacts.get("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') - assert.equal(lastCall[1]!.method,'GET') - - let info = { - "name": "John Doe", - "company": "My Company" - } - await contacts.add("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao",info) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') - assert.equal(lastCall[1]!.method,'POST') - assert.deepEqual(lastBody,info) - - await contacts.update("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao",info) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') - assert.equal(lastCall[1]!.method,'PUT') - assert.deepEqual(lastBody,info) - - await contacts.delete("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') - assert.equal(lastCall[1]!.method,'DELETE') - - }) - - it('Challenges', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let challenges = client.challenges() - - - await challenges.generate(128) - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/challenges?strength=128') - assert.equal(lastCall[1]!.method,'GET') - - const words = ["shell", "gloom", "mimic", "cereal", "stool", "furnace", "nominee", "nation", "sauce", "sausage", "rather", "venue"] - await challenges.respond("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p",words) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/challenges/aid1') - assert.equal(lastCall[1]!.method,'POST') - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.deepEqual(lastBody.words,words) - assert.equal(lastBody.recipient,"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p") - assert.equal(lastBody.exn.r,"/challenge/response") - assert.equal(lastBody.exn.a.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.deepEqual(lastBody.exn.a.words,words) - assert.equal(lastBody.sig.length,144) - - await challenges.accept("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p","EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/challenges/aid1') - assert.equal(lastCall[1]!.method,'PUT') - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastBody.aid,"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p") - assert.equal(lastBody.said,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - - }) - - it('Notifications', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let notifications = client.notifications() - let escrows = client.escrows() - - await notifications.list(20, 40) - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/notifications') - assert.equal(lastCall[1]!.method,'GET') - let lastHeaders = new Headers((lastCall[1]!.headers!)) - assert.equal(lastHeaders.get('Range'),'notes=20-40') - - await notifications.mark("notificationSAID") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/notifications/notificationSAID') - assert.equal(lastCall[1]!.method,'PUT') - - await notifications.delete("notificationSAID") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/notifications/notificationSAID') - assert.equal(lastCall[1]!.method,'DELETE') - - await escrows.listReply('/presentation/request') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/escrows/rpy?route=%2Fpresentation%2Frequest') - assert.equal(lastCall[1]!.method,'GET') - - }) - -}) \ No newline at end of file From a8ea354b8708e5bd9a9204fddcd432e9822fa8ba Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Wed, 13 Sep 2023 10:07:59 -0400 Subject: [PATCH 037/186] move eventresult --- src/keri/app/aiding.ts | 28 +++++++++++++++++++++++++++- src/keri/app/clienting.ts | 26 -------------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index 7966ef3c..4db9bbd3 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -1,4 +1,4 @@ -import { SignifyClient, EventResult } from "./clienting" +import { SignifyClient } from "./clienting" import { Tier} from "../core/salter" import {Algos} from '../core/manager' import {incept, interact, reply, rotate} from "../core/eventing" @@ -382,3 +382,29 @@ export class Identifier { return await res.json() } } + +/** Event Result */ +export class EventResult { + private readonly _serder: Serder + private readonly _sigs: string[] + private readonly promise: Promise + + constructor(serder: Serder, sigs: string[], promise: Promise) { + this._serder = serder + this._sigs = sigs + this.promise = promise + } + + get serder() { + return this._serder + } + + get sigs() { + return this._sigs + } + + async op(): Promise { + let res = await this.promise + return await res.json() + } +} \ No newline at end of file diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index f6d5ab2c..614f8dc4 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -426,29 +426,3 @@ export class SignifyClient { exchanges(): Exchanges { return new Exchanges(this) } -} - -export class EventResult { - private readonly _serder: Serder - private readonly _sigs: string[] - private readonly promise: Promise - - constructor(serder: Serder, sigs: string[], promise: Promise) { - this._serder = serder - this._sigs = sigs - this.promise = promise - } - - get serder() { - return this._serder - } - - get sigs() { - return this._sigs - } - - async op(): Promise { - let res = await this.promise - return await res.json() - } -} \ No newline at end of file From 1f46c1c3e59fb04eb6dffdc7ad689180856f9f57 Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Wed, 13 Sep 2023 10:11:11 -0400 Subject: [PATCH 038/186] Update clienting.ts --- src/keri/app/clienting.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 614f8dc4..761e4dea 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -426,3 +426,4 @@ export class SignifyClient { exchanges(): Exchanges { return new Exchanges(this) } +} \ No newline at end of file From 330c87470820bc7685f41f3157e58e481a2a0442 Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Wed, 13 Sep 2023 14:48:30 -0400 Subject: [PATCH 039/186] fix build --- src/keri/app/clienting.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 761e4dea..122f5231 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -2,7 +2,6 @@ import { Agent, Controller } from "./controller" import { Tier } from "../core/salter" import { Authenticater } from "../core/authing" import { KeyManager } from "../core/keeping" -import { Serder } from "../core/serder" import { Identifier } from "./aiding" import { Contacts, Challenges } from "./contacting" From 81c141bfadec51557826f48d69901f66b97f57b7 Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Wed, 13 Sep 2023 15:15:13 -0400 Subject: [PATCH 040/186] Create grouping.test.ts --- test/app/grouping.test.ts | 138 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 test/app/grouping.test.ts diff --git a/test/app/grouping.test.ts b/test/app/grouping.test.ts new file mode 100644 index 00000000..45671e0f --- /dev/null +++ b/test/app/grouping.test.ts @@ -0,0 +1,138 @@ +import { strict as assert } from "assert" +import { SignifyClient } from "../../src/keri/app/clienting" +import { Authenticater } from "../../src/keri/core/authing" +import { Salter, Tier } from "../../src/keri/core/salter" +import fetchMock from "jest-fetch-mock" +import libsodium from "libsodium-wrappers-sumo" +import 'whatwg-fetch' + +fetchMock.enableMocks(); + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],' + + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},' + + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",' + + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},' + + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + + '"pidx":0}' +const mockGetAID = { + "name": "aid1", + "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "salty": { + "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", + "pidx": 0, + "kidx": 0, + "stem": "signify:aid", + "tier": "low", + "dcode": "E", + "icodes": [ + "A" + ], + "ncodes": [ + "A" + ], + "transferable": true + }, + "transferable": true, + "state": { + "vn": [ + 1, + 0 + ], + "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "s": "0", + "p": "", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "f": "0", + "dt": "2023-08-21T22:30:46.473545+00:00", + "et": "icp", + "kt": "1", + "k": [ + "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" + ], + "nt": "1", + "n": [ + "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" + ], + "bt": "0", + "b": [], + "c": [], + "ee": { + "s": "0", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "br": [], + "ba": [] + }, + "di": "" + }, + "windexes": [] +} + +const mockCredential = { "sad": { "v": "ACDC10JSON000197_", "d": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "i": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "s": "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao", "a": { "d": "EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P", "i": "EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby", "dt": "2023-08-23T15:16:07.553000+00:00", "LEI": "5493001KJTIIGC8Y1R17" } }, "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sadsigers": [{ "path": "-", "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sn": 0, "d": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1" }], "sadcigars": [], "chains": [], "status": { "v": "KERI10JSON000135_", "i": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "s": "0", "d": "ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "ra": {}, "a": { "s": 2, "d": "EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt" }, "dt": "2023-08-23T15:16:07.553000+00:00", "et": "iss" } } + + +fetchMock.mockResponse(req => { + if (req.url.startsWith(url + '/agent')) { + return Promise.resolve({ body: mockConnect, init: { status: 202 } }) + } else if (req.url == boot_url + '/boot') { + return Promise.resolve({ body: "", init: { status: 202 } }) + } else { + let headers = new Headers() + let signed_headers = new Headers() + + headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + const requrl = new URL(req.url) + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }) + let signer = salter.signer("A", true, "agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00", Tier.low) + + let authn = new Authenticater(signer!, signer!.verfer) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID + + return Promise.resolve({ body: JSON.stringify(body), init: { status: 202, headers: signed_headers } }) + } + +}) + +describe('Grouping', () => { + + it('Groups', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let groups = client.groups() + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + await groups.sendRequest('aid1',{},[],"") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + assert.equal(lastCall[0]!, url + '/identifiers/aid1/multisig/request') + assert.equal(lastCall[1]!.method, 'POST') + + await groups.getRequest('ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00') + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + assert.equal(lastCall[0]!, url + '/multisig/request/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00') + assert.equal(lastCall[1]!.method, 'GET') + + }) + +}) \ No newline at end of file From 6a36f9fe0f31e74e48b38a8023d58f827377ac48 Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Wed, 13 Sep 2023 15:22:32 -0400 Subject: [PATCH 041/186] adding exchanging tests --- test/app/exchanging.test.ts | 267 +++++++++++++++++++++++++++++++++++ test/core/exchanging.test.ts | 108 -------------- 2 files changed, 267 insertions(+), 108 deletions(-) create mode 100644 test/app/exchanging.test.ts delete mode 100644 test/core/exchanging.test.ts diff --git a/test/app/exchanging.test.ts b/test/app/exchanging.test.ts new file mode 100644 index 00000000..e3c9ff28 --- /dev/null +++ b/test/app/exchanging.test.ts @@ -0,0 +1,267 @@ +import {strict as assert} from "assert"; +import {b, d, Dict, Diger, exchange, Ilks, MtrDex, Salter, Serder, Tier} from "../../src"; +import libsodium from "libsodium-wrappers-sumo"; +import { SignifyClient } from "../../src/keri/app/clienting" +import { Authenticater } from "../../src/keri/core/authing" +import fetchMock from "jest-fetch-mock" +import 'whatwg-fetch' + +fetchMock.enableMocks(); + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],' + + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},' + + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",' + + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},' + + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + + '"pidx":0}' +const mockGetAID = { + "name": "aid1", + "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "salty": { + "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", + "pidx": 0, + "kidx": 0, + "stem": "signify:aid", + "tier": "low", + "dcode": "E", + "icodes": [ + "A" + ], + "ncodes": [ + "A" + ], + "transferable": true + }, + "transferable": true, + "state": { + "vn": [ + 1, + 0 + ], + "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "s": "0", + "p": "", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "f": "0", + "dt": "2023-08-21T22:30:46.473545+00:00", + "et": "icp", + "kt": "1", + "k": [ + "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" + ], + "nt": "1", + "n": [ + "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" + ], + "bt": "0", + "b": [], + "c": [], + "ee": { + "s": "0", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "br": [], + "ba": [] + }, + "di": "" + }, + "windexes": [] +} + +const mockCredential = { "sad": { "v": "ACDC10JSON000197_", "d": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "i": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "s": "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao", "a": { "d": "EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P", "i": "EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby", "dt": "2023-08-23T15:16:07.553000+00:00", "LEI": "5493001KJTIIGC8Y1R17" } }, "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sadsigers": [{ "path": "-", "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sn": 0, "d": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1" }], "sadcigars": [], "chains": [], "status": { "v": "KERI10JSON000135_", "i": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "s": "0", "d": "ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "ra": {}, "a": { "s": 2, "d": "EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt" }, "dt": "2023-08-23T15:16:07.553000+00:00", "et": "iss" } } + + +fetchMock.mockResponse(req => { + if (req.url.startsWith(url + '/agent')) { + return Promise.resolve({ body: mockConnect, init: { status: 202 } }) + } else if (req.url == boot_url + '/boot') { + return Promise.resolve({ body: "", init: { status: 202 } }) + } else { + let headers = new Headers() + let signed_headers = new Headers() + + headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + const requrl = new URL(req.url) + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }) + let signer = salter.signer("A", true, "agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00", Tier.low) + + let authn = new Authenticater(signer!, signer!.verfer) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID + + return Promise.resolve({ body: JSON.stringify(body), init: { status: 202, headers: signed_headers } }) + } + +}) + + +describe("exchange", () => { + it("should create an exchange message with no transposed attachments", async () => { + await libsodium.ready + let dt = "2023-08-30T17:22:54.183Z" + + let [exn, end] = exchange("/multisig/vcp", {}, "test", undefined, dt) + assert.deepStrictEqual(exn.ked, { + "a": {}, "d": "EMhxioc6Ud9b3JZ4X9o79uytSRIXXNDUf27ruwiOmNdQ", "dt": "2023-08-30T17:22:54.183Z", "e": {}, + "i": "test", + "p": "", "q": {}, "r": "/multisig/vcp", "t": "exn", "v": "KERI10JSON0000b1_" + } + ) + assert.deepStrictEqual(end, new Uint8Array()) + + let sith = 1 + let nsith = 1 + let sn = 0 + let toad = 0 + + let raw = new Uint8Array([5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, 117]) + let salter = new Salter({raw: raw}) + let skp0 = salter.signer(MtrDex.Ed25519_Seed, true, "A", Tier.low, true) + let keys = [skp0.verfer.qb64] + + let skp1 = salter.signer(MtrDex.Ed25519_Seed, true, "N", Tier.low, true) + let ndiger = new Diger({}, skp1.verfer.qb64b) + let nxt = [ndiger.qb64] + assert.deepStrictEqual(nxt, ['EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj']) + + let ked0 = { + v: "KERI10JSON000000_", + t: Ilks.icp, + d: "", + i: "", + s: sn.toString(16), + kt: sith.toString(16), + k: keys, + nt: nsith.toString(16), + n: nxt, + bt: toad.toString(16), + b: [], + c: [], + a: [], + } as Dict + + let serder = new Serder(ked0) + let siger = skp0.sign(b(serder.raw), 0) + assert.equal(siger.qb64, "AAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI") + + let ked1 = { + v: "KERI10JSON000000_", + t: Ilks.vcp, + d: "", + i: "", + s: "0", + bt: toad.toString(16), + b: [] + } as Dict + let vcp = new Serder(ked1) + + + let embeds = { + icp: [serder, siger.qb64], + vcp: [vcp, undefined] + } as Dict + + [exn, end] = exchange("/multisig/vcp", {}, "test", undefined, dt, undefined, undefined, embeds) + + assert.deepStrictEqual(exn.ked, { + "a": {}, + "d": "EHDEXQx-i0KlQ8iVnITMLa144dAb7Kjq2KDTufDUyLcm", + "dt": "2023-08-30T17:22:54.183Z", + "e": { + "d": "EDPWpKtMoPwro_Of8TQzpNMGdtmfyWzqTcRKQ01fGFRi", + "icp": { + "a": [], + "b": [], + "bt": "0", + "c": [], + "d": "", + "i": "", + "k": ["DAUDqkmn-hqlQKD8W-FAEa5JUvJC2I9yarEem-AAEg3e"], + "kt": "1", + "n": ["EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj"], + "nt": "1", + "s": "0", + "t": "icp", + "v": "KERI10JSON0000d3_" + }, + "vcp": {"b": [], "bt": "0", "d": "", "i": "", "s": "0", "t": "vcp", "v": "KERI10JSON000049_"} + }, + "i": "test", + "p": "", + "q": {}, + "r": "/multisig/vcp", + "t": "exn", + "v": "KERI10JSON00020d_" + }) + assert.equal(d(end), "-LAZ5AACAA-e-icpAAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI") + + + }) + + it('SendFromEvents', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + let exchange = client.exchanges() + let sith = 1 + let nsith = 1 + let sn = 0 + let toad = 0 + + let raw = new Uint8Array([5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, 117]) + let salter = new Salter({raw: raw}) + let skp0 = salter.signer(MtrDex.Ed25519_Seed, true, "A", Tier.low, true) + let keys = [skp0.verfer.qb64] + + let skp1 = salter.signer(MtrDex.Ed25519_Seed, true, "N", Tier.low, true) + let ndiger = new Diger({}, skp1.verfer.qb64b) + let nxt = [ndiger.qb64] + assert.deepStrictEqual(nxt, ['EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj']) + + let ked0 = { + v: "KERI10JSON000000_", + t: Ilks.icp, + d: "", + i: "", + s: sn.toString(16), + kt: sith.toString(16), + k: keys, + nt: nsith.toString(16), + n: nxt, + bt: toad.toString(16), + b: [], + c: [], + a: [], + } as Dict + + let serder = new Serder(ked0) + + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + await exchange.sendFromEvents('aid1','',serder,[''],'',[]) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! + assert.equal(lastCall[0]!, url + '/identifiers/aid1/exchanges') + assert.equal(lastCall[1]!.method, 'POST') + + }) +}) \ No newline at end of file diff --git a/test/core/exchanging.test.ts b/test/core/exchanging.test.ts deleted file mode 100644 index e454720f..00000000 --- a/test/core/exchanging.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -import {strict as assert} from "assert"; -import {b, d, Dict, Diger, exchange, Ilks, MtrDex, Salter, Serder, Tier} from "../../src"; -import libsodium from "libsodium-wrappers-sumo"; - - -describe("exchange", () => { - it("should create an exchange message with no transposed attachments", async () => { - await libsodium.ready - let dt = "2023-08-30T17:22:54.183Z" - - let [exn, end] = exchange("/multisig/vcp", {}, "test", undefined, dt) - assert.deepStrictEqual(exn.ked, { - "a": {}, "d": "EMhxioc6Ud9b3JZ4X9o79uytSRIXXNDUf27ruwiOmNdQ", "dt": "2023-08-30T17:22:54.183Z", "e": {}, - "i": "test", - "p": "", "q": {}, "r": "/multisig/vcp", "t": "exn", "v": "KERI10JSON0000b1_" - } - ) - assert.deepStrictEqual(end, new Uint8Array()) - - let sith = 1 - let nsith = 1 - let sn = 0 - let toad = 0 - - let raw = new Uint8Array([5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, 117]) - let salter = new Salter({raw: raw}) - let skp0 = salter.signer(MtrDex.Ed25519_Seed, true, "A", Tier.low, true) - let keys = [skp0.verfer.qb64] - - let skp1 = salter.signer(MtrDex.Ed25519_Seed, true, "N", Tier.low, true) - let ndiger = new Diger({}, skp1.verfer.qb64b) - let nxt = [ndiger.qb64] - assert.deepStrictEqual(nxt, ['EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj']) - - let ked0 = { - v: "KERI10JSON000000_", - t: Ilks.icp, - d: "", - i: "", - s: sn.toString(16), - kt: sith.toString(16), - k: keys, - nt: nsith.toString(16), - n: nxt, - bt: toad.toString(16), - b: [], - c: [], - a: [], - } as Dict - - let serder = new Serder(ked0) - let siger = skp0.sign(b(serder.raw), 0) - assert.equal(siger.qb64, "AAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI") - - let ked1 = { - v: "KERI10JSON000000_", - t: Ilks.vcp, - d: "", - i: "", - s: "0", - bt: toad.toString(16), - b: [] - } as Dict - let vcp = new Serder(ked1) - - - let embeds = { - icp: [serder, siger.qb64], - vcp: [vcp, undefined] - } as Dict - - [exn, end] = exchange("/multisig/vcp", {}, "test", undefined, dt, undefined, undefined, embeds) - - assert.deepStrictEqual(exn.ked, { - "a": {}, - "d": "EHDEXQx-i0KlQ8iVnITMLa144dAb7Kjq2KDTufDUyLcm", - "dt": "2023-08-30T17:22:54.183Z", - "e": { - "d": "EDPWpKtMoPwro_Of8TQzpNMGdtmfyWzqTcRKQ01fGFRi", - "icp": { - "a": [], - "b": [], - "bt": "0", - "c": [], - "d": "", - "i": "", - "k": ["DAUDqkmn-hqlQKD8W-FAEa5JUvJC2I9yarEem-AAEg3e"], - "kt": "1", - "n": ["EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj"], - "nt": "1", - "s": "0", - "t": "icp", - "v": "KERI10JSON0000d3_" - }, - "vcp": {"b": [], "bt": "0", "d": "", "i": "", "s": "0", "t": "vcp", "v": "KERI10JSON000049_"} - }, - "i": "test", - "p": "", - "q": {}, - "r": "/multisig/vcp", - "t": "exn", - "v": "KERI10JSON00020d_" - }) - assert.equal(d(end), "-LAZ5AACAA-e-icpAAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI") - - - }) -}) \ No newline at end of file From 609ad18d83d8481279dacb32fdaf00c05b7aece5 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Thu, 21 Sep 2023 14:51:41 +0300 Subject: [PATCH 042/186] use Response.ok to check http response status --- src/keri/app/clienting.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 122f5231..1fb3bd99 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -175,7 +175,7 @@ export class SignifyClient { body: _body, headers: final_headers }); - if (!(res.status == 200 || res.status == 202 || res.status == 206)) { + if (!res.ok) { const error = await res.text() throw new Error(error) } From 8ea583032d52c4e5ffadba33bbcecd8739638a11 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 23 Sep 2023 08:21:11 -0300 Subject: [PATCH 043/186] extern modules --- .../bip39_shim/package.json | 19 +++ .../bip39_shim/src/bip39_shim.ts | 128 ++++++++++++++++++ .../bip39_shim/tsconfig.json | 0 .../bip39_shim/tsconfig.node.json | 0 .../integration-scripts/externalModule.ts | 28 ++++ src/keri/app/clienting.ts | 9 +- src/keri/core/keeping.ts | 26 +++- src/keri/core/manager.ts | 3 +- 8 files changed, 206 insertions(+), 7 deletions(-) create mode 100644 examples/integration-scripts/bip39_shim/package.json create mode 100644 examples/integration-scripts/bip39_shim/src/bip39_shim.ts create mode 100644 examples/integration-scripts/bip39_shim/tsconfig.json create mode 100644 examples/integration-scripts/bip39_shim/tsconfig.node.json create mode 100644 examples/integration-scripts/externalModule.ts diff --git a/examples/integration-scripts/bip39_shim/package.json b/examples/integration-scripts/bip39_shim/package.json new file mode 100644 index 00000000..b8924452 --- /dev/null +++ b/examples/integration-scripts/bip39_shim/package.json @@ -0,0 +1,19 @@ +{ + "name": "bip39_shim", + "type": "module", + "private": true, + "version": "0.0.1", + "scripts": { + }, + "dependencies": { + "signify-ts": "file:../../../" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2" + } + } \ No newline at end of file diff --git a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts new file mode 100644 index 00000000..93b3d895 --- /dev/null +++ b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts @@ -0,0 +1,128 @@ +import bip39 from 'bip39-light' +import { Diger, Signer, Verfer } from 'signify-ts'; + + + + +export class BIP39Shim { + + private icount:number + private ncount:number + private dcode:string | undefined + private pidx: number + private kidx: number + private transferable:boolean + private stem: string + private mnemonics: string[] + private signer: Signer + + constructor(pidx, kargs ) { + this.icount = kargs.icount + this.ncount = kargs.ncount + this.pidx = pidx + this.kidx = kargs.kidx + this.transferable = kargs.transferable + this.stem = kargs.stem + this.mnemonics = kargs.mnemonics + + const seed = bip39.mnemonicToEntropy(this.mnemonics); + this.signer = new Signer({raw: seed, code: this.dcode, transferable: this.transferable}) + + } + + params(){ + return { + pidx: this.pidx, + kidx: this.kidx, + mnemonics: this.mnemonics + } + } + + keys(count, kidx, transferable){ + let keys = [] + for (let idx in range(count)){ + let keyId = `${this.stem}-${this.pidx}-${kidx + idx}` + verkey = bip39 aldo + verfer = new Verfer(verkey, + coring.MtrDex.Ed25519 if transferable + else coring.MtrDex.Ed25519N) + keys.push(verfer.qb64) + } + return keys + } + + + incept(transferable:boolean){ + this.transferable = transferable + + let signers = this.creator.create(this.icodes, this.count, this.code, this.transferable) + + let verfers = signers.signers.map(signer => signer.verfer.qb64); + + let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable) + + + let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); + + return [verfers, digers] + } + + rotate(){ + this.ncodes = ncodes + this.transferable = transferable + this.prxs = this.nxts + + let signers = this.nxts!.map(nxt => this.decrypter.decrypt(undefined, new Cipher({qb64:nxt}), this.transferable)) + let verfers = signers.map(signer => signer.verfer.qb64) + let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable) + + this.nxts = nsigners.signers.map(signer => this.encrypter.encrypt(undefined, signer).qb64); + + let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); + + return [verfers, digers] + } + + sign(ser: Uint8Array, indexed=true, indices:number[]|undefined=undefined, ondices:number[]|undefined=undefined){ + // let signers = this.prxs!.map(prx => this.decrypter.decrypt(new Cipher({qb64:prx}).qb64b, undefined, this.transferable)) + let signers = [] + + if (indexed){ + let sigers = [] + let i = 0 + for (const [j, signer] of signers.entries()) { + if (indices!= undefined){ + i = indices![j] + if (typeof i != "number" || i < 0){ + throw new Error(`Invalid signing index = ${i}, not whole number.`) + } + } else { + i = j + } + let o = 0 + if (ondices!=undefined){ + o = ondices![j] + if ((o == undefined || typeof o == "number" && typeof o != "number" && o>=0)!) { + throw new Error(`Invalid ondex = ${o}, not whole number.`) + } + } else { + o = i + } + sigers.push(signer.sign(ser, i, o==undefined?true:false, o)) + } + return sigers.map(siger => siger.qb64); + } else { + let cigars = [] + for (const [_, signer] of signers.entries()) { + cigars.push(signer.sign(ser)) + } + return cigars.map(cigar => cigar.qb64); + } + + } + + generateMnemonic(strength){ + return bip39.generateMnemonic(strength) + } + +} \ No newline at end of file diff --git a/examples/integration-scripts/bip39_shim/tsconfig.json b/examples/integration-scripts/bip39_shim/tsconfig.json new file mode 100644 index 00000000..e69de29b diff --git a/examples/integration-scripts/bip39_shim/tsconfig.node.json b/examples/integration-scripts/bip39_shim/tsconfig.node.json new file mode 100644 index 00000000..e69de29b diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts new file mode 100644 index 00000000..4d32ce2e --- /dev/null +++ b/examples/integration-scripts/externalModule.ts @@ -0,0 +1,28 @@ +import { strict as assert } from "assert" +import signify from "signify-ts" + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +await run() + +async function run() { + await signify.ready() + // Boot client + const bran1 = signify.randomPasscode() + const externalModule:ExternalModule = { + type: "bip39", + name: "bip39", + params: [] + } + const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url,externalModule); + await client1.boot() + await client1.connect() + const state1 = await client1.state() + console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) + let words = ["asd", "asd", "asds"] + let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39", extern:{mnemonics: words}}) + let op = await icpResult.op() + assert.equal(op['done'], true) + let aid = op['response'] +} \ No newline at end of file diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 1fb3bd99..d36bc38d 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -1,7 +1,7 @@ import { Agent, Controller } from "./controller" import { Tier } from "../core/salter" import { Authenticater } from "../core/authing" -import { KeyManager } from "../core/keeping" +import { ExternalModule, KeyManager } from "../core/keeping" import { Identifier } from "./aiding" import { Contacts, Challenges } from "./contacting" @@ -39,6 +39,7 @@ export class SignifyClient { public manager: KeyManager | null public tier: Tier public bootUrl: string + public exteralModules: ExternalModule[] /** * SignifyClient constructor @@ -46,8 +47,9 @@ export class SignifyClient { * @param {string} bran Base64 21 char string that is used as base material for seed of the client AID * @param {Tier} tier Security tier for generating keys of the client AID (high | mewdium | low) * @param {string} bootUrl KERIA boot interface URL + * @param {ExternalModule[]} externalModules list of external modules to load */ - constructor(url: string, bran: string, tier: Tier = Tier.low, bootUrl: string = DEFAULT_BOOT_URL) { + constructor(url: string, bran: string, tier: Tier = Tier.low, bootUrl: string = DEFAULT_BOOT_URL, externalModules:ExternalModule[]=[]) { this.url = url if (bran.length < 21) { throw Error("bran must be 21 characters") @@ -60,6 +62,7 @@ export class SignifyClient { this.manager = null this.tier = tier this.bootUrl = bootUrl + this.exteralModules = externalModules } get data() { @@ -130,7 +133,7 @@ export class SignifyClient { if (this.controller.serder.ked.s == 0) { await this.approveDelegation() } - this.manager = new KeyManager(this.controller.salter, null) + this.manager = new KeyManager(this.controller.salter, this.exteralModules) this.authn = new Authenticater(this.controller.signer, this.agent.verfer!) } diff --git a/src/keri/core/keeping.ts b/src/keri/core/keeping.ts index 78cefe83..6e4f7c2b 100644 --- a/src/keri/core/keeping.ts +++ b/src/keri/core/keeping.ts @@ -14,14 +14,26 @@ import { Cigar } from './cigar'; export {}; +/** External module definition */ +export interface ExternalModule { + type: string, + name: string, + params: any[], +} + export class KeyManager { private salter?: Salter - // private externalModulees?: any + private modules?: any - constructor(salter: Salter, _externalModules: any = undefined ) { + constructor(salter: Salter, externalModules: ExternalModule[] = [] ) { this.salter = salter - // this.externalModulees = _externalModules + this.modules = [] + externalModules.forEach((module) => { + let pkg = require(module.name) + let mod = new pkg(module.params) + this.modules[module.type] = mod + }) } new(algo: Algos, pidx: number, kargs: any){ @@ -32,6 +44,14 @@ export class KeyManager { return new RandyKeeper(this.salter!, kargs["code"], kargs["count"], kargs["icodes"], kargs["transferable"], kargs["ncode"], kargs["ncount"], kargs["ncodes"], kargs["dcode"], kargs["prxs"], kargs["nxts"]) case Algos.group: return new GroupKeeper(this, kargs["mhab"], kargs["states"], kargs["rstates"],kargs["keys"],kargs["ndigs"]) + case Algos.extern: + let typ = kargs.extern_type + if ( !this.modules.contains(typ)) { + throw new Error(`unsupported external module type ${typ}`) + } else { + let mod = this.modules[typ] + return new mod(pidx,kargs.extern) + } default: throw new Error('Unknown algo') } diff --git a/src/keri/core/manager.ts b/src/keri/core/manager.ts index 9a75b25c..6a0a1c95 100644 --- a/src/keri/core/manager.ts +++ b/src/keri/core/manager.ts @@ -13,7 +13,8 @@ import {b} from "./core"; export enum Algos { randy = "randy", salty = "salty", - group = "group" + group = "group", + extern = "extern" } class PubLot { From 437ee10027a33f0d319daff144b509ee0a5b06e8 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 23 Sep 2023 15:29:49 -0300 Subject: [PATCH 044/186] bip39_shim --- .../bip39_shim/package-lock.json | 1846 +++++++++++++++++ .../bip39_shim/package.json | 21 +- .../bip39_shim/src/bip39_shim.ts | 87 +- .../bip39_shim/tsconfig.json | 25 + .../bip39_shim/tsconfig.node.json | 11 + .../integration-scripts/externalModule.ts | 17 +- .../integration-scripts/package-lock.json | 19 + examples/integration-scripts/package.json | 3 +- src/keri/app/aiding.ts | 10 +- src/keri/core/keeping.ts | 16 +- 10 files changed, 1975 insertions(+), 80 deletions(-) create mode 100644 examples/integration-scripts/bip39_shim/package-lock.json diff --git a/examples/integration-scripts/bip39_shim/package-lock.json b/examples/integration-scripts/bip39_shim/package-lock.json new file mode 100644 index 00000000..2a5b45bd --- /dev/null +++ b/examples/integration-scripts/bip39_shim/package-lock.json @@ -0,0 +1,1846 @@ +{ + "name": "bip39_shim", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "bip39_shim", + "version": "0.0.1", + "dependencies": { + "bip39": "^3.1.0", + "bip39-light": "^1.0.7", + "signify-ts": "file:../../../" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2" + } + }, + "../../..": { + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "@types/libsodium-wrappers-sumo": "^0.7.5", + "blake3": "^2.1.7", + "buffer": "^6.0.3", + "cbor": "^8.0.0", + "collections": "^5.1.12", + "jest-fetch-mock": "^3.0.3", + "libsodium-wrappers-sumo": "^0.7.9", + "lodash": "^4.17.21", + "mathjs": "^11.8.2", + "msgpack5": "^5.3.2", + "structured-headers": "^0.5.0", + "text-encoding": "^0.7.0", + "ts-node": "^10.9.1", + "urlsafe-base64": "^1.0.0", + "whatwg-fetch": "^3.6.17", + "xregexp": "^5.1.0" + }, + "devDependencies": { + "@mermaid-js/mermaid-cli": "^10.3.0", + "@size-limit/preset-small-lib": "^5.0.4", + "@types/lodash": "^4.14.185", + "@types/node": "^18.11.18", + "@types/text-encoding": "^0.0.36", + "@types/urlsafe-base64": "^1.0.28", + "husky": "^7.0.2", + "jest": "^29.3.1", + "jsdoc": "^4.0.2", + "minami": "^1.2.3", + "size-limit": "^5.0.4", + "ts-migrate": "^0.1.23", + "tsdx": "^0.14.1", + "tslib": "^2.3.1", + "typedoc": "^0.24.8", + "typescript": "^4.9.4" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bip39": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", + "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", + "dependencies": { + "@noble/hashes": "^1.2.0" + } + }, + "node_modules/bip39-light": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", + "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", + "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signify-ts": { + "resolved": "../../..", + "link": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/examples/integration-scripts/bip39_shim/package.json b/examples/integration-scripts/bip39_shim/package.json index b8924452..c556ee30 100644 --- a/examples/integration-scripts/bip39_shim/package.json +++ b/examples/integration-scripts/bip39_shim/package.json @@ -3,17 +3,18 @@ "type": "module", "private": true, "version": "0.0.1", - "scripts": { - }, + "scripts": {}, "dependencies": { - "signify-ts": "file:../../../" + "bip39": "^3.1.0", + "bip39-light": "^1.0.7", + "signify-ts": "file:../../../" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2" + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2" } - } \ No newline at end of file +} diff --git a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts index 93b3d895..9aff6891 100644 --- a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts +++ b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts @@ -1,5 +1,5 @@ -import bip39 from 'bip39-light' -import { Diger, Signer, Verfer } from 'signify-ts'; +import bip39 from 'bip39' +import { Diger, Signer, MtrDex} from 'signify-ts'; @@ -9,25 +9,24 @@ export class BIP39Shim { private icount:number private ncount:number private dcode:string | undefined - private pidx: number - private kidx: number + private pidx: number = 0 + private kidx: number = 0 private transferable:boolean - private stem: string - private mnemonics: string[] - private signer: Signer + private stem: string + private mnemonics: string = "" - constructor(pidx, kargs ) { - this.icount = kargs.icount - this.ncount = kargs.ncount + constructor(pidx:number, kargs:any ) { + console.log(kargs) + this.icount = kargs.icount??1 + this.ncount = kargs.ncount??1 this.pidx = pidx - this.kidx = kargs.kidx - this.transferable = kargs.transferable - this.stem = kargs.stem - this.mnemonics = kargs.mnemonics - - const seed = bip39.mnemonicToEntropy(this.mnemonics); - this.signer = new Signer({raw: seed, code: this.dcode, transferable: this.transferable}) - + this.kidx = kargs.kidx??0 + this.transferable = kargs.transferable??true + this.stem = kargs.stem?? "bip39_shim" + if (kargs.extern != undefined && kargs.extern.mnemonics != undefined){ + this.mnemonics = kargs.extern.mnemonics + } + this.dcode = kargs.dcode } params(){ @@ -38,54 +37,44 @@ export class BIP39Shim { } } - keys(count, kidx, transferable){ + keys(count:number, kidx:number, transferable:boolean){ let keys = [] - for (let idx in range(count)){ + for (let idx = 0; idx < count; idx++) { let keyId = `${this.stem}-${this.pidx}-${kidx + idx}` - verkey = bip39 aldo - verfer = new Verfer(verkey, - coring.MtrDex.Ed25519 if transferable - else coring.MtrDex.Ed25519N) - keys.push(verfer.qb64) + let seed = bip39.mnemonicToSeedSync(this.mnemonics, keyId); + let signer = new Signer({raw: new Uint8Array(seed), code: MtrDex.Ed25519_Seed, transferable: transferable}) + keys.push(signer) } return keys } - incept(transferable:boolean){ - this.transferable = transferable - - let signers = this.creator.create(this.icodes, this.count, this.code, this.transferable) - let verfers = signers.signers.map(signer => signer.verfer.qb64); - - let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable) + let signers = this.keys(this.icount, this.kidx, transferable) + let verfers = signers.map(signer => signer.verfer.qb64); - - let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); - + let nsigners = this.keys(this.ncount, this.kidx + this.icount, transferable) + let digers = nsigners.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); return [verfers, digers] } - rotate(){ - this.ncodes = ncodes - this.transferable = transferable - this.prxs = this.nxts - - let signers = this.nxts!.map(nxt => this.decrypter.decrypt(undefined, new Cipher({qb64:nxt}), this.transferable)) - let verfers = signers.map(signer => signer.verfer.qb64) - let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable) - - this.nxts = nsigners.signers.map(signer => this.encrypter.encrypt(undefined, signer).qb64); + rotate(ncount:number, transferable:boolean){ + let signers = this.keys(this.ncount, this.kidx + this.icount, transferable) + let verfers = signers.map(signer => signer.verfer.qb64); + + this.kidx = this.kidx + this.icount + this.icount = this.ncount + this.ncount = ncount - let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); + let nsigners = this.keys(this.ncount, this.kidx + this.icount, this.transferable) + let digers = nsigners.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); return [verfers, digers] } sign(ser: Uint8Array, indexed=true, indices:number[]|undefined=undefined, ondices:number[]|undefined=undefined){ - // let signers = this.prxs!.map(prx => this.decrypter.decrypt(new Cipher({qb64:prx}).qb64b, undefined, this.transferable)) - let signers = [] + + let signers = this.keys(this.icount, this.kidx, this.transferable) if (indexed){ let sigers = [] @@ -121,7 +110,7 @@ export class BIP39Shim { } - generateMnemonic(strength){ + generateMnemonic(strength:number){ return bip39.generateMnemonic(strength) } diff --git a/examples/integration-scripts/bip39_shim/tsconfig.json b/examples/integration-scripts/bip39_shim/tsconfig.json index e69de29b..4b4e8fa4 100644 --- a/examples/integration-scripts/bip39_shim/tsconfig.json +++ b/examples/integration-scripts/bip39_shim/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] + } + \ No newline at end of file diff --git a/examples/integration-scripts/bip39_shim/tsconfig.node.json b/examples/integration-scripts/bip39_shim/tsconfig.node.json index e69de29b..bdc58063 100644 --- a/examples/integration-scripts/bip39_shim/tsconfig.node.json +++ b/examples/integration-scripts/bip39_shim/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + } + } + \ No newline at end of file diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts index 4d32ce2e..e4dea27e 100644 --- a/examples/integration-scripts/externalModule.ts +++ b/examples/integration-scripts/externalModule.ts @@ -1,5 +1,6 @@ import { strict as assert } from "assert" import signify from "signify-ts" +import {BIP39Shim} from './bip39_shim/src/bip39_shim.ts' const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" @@ -8,21 +9,21 @@ await run() async function run() { await signify.ready() - // Boot client const bran1 = signify.randomPasscode() - const externalModule:ExternalModule = { - type: "bip39", - name: "bip39", - params: [] + const externalModule:signify.ExternalModule = { + type: "bip39_shim", + name: "bip39_shim", + module: BIP39Shim } - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url,externalModule); + const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url,[externalModule]); await client1.boot() await client1.connect() const state1 = await client1.state() console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - let words = ["asd", "asd", "asds"] - let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39", extern:{mnemonics: words}}) + let words = new BIP39Shim(0,{}).generateMnemonic(256) + let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39_shim", extern:{mnemonics: words}}) let op = await icpResult.op() assert.equal(op['done'], true) let aid = op['response'] + console.log(aid) } \ No newline at end of file diff --git a/examples/integration-scripts/package-lock.json b/examples/integration-scripts/package-lock.json index 4af04d08..d2bd3258 100644 --- a/examples/integration-scripts/package-lock.json +++ b/examples/integration-scripts/package-lock.json @@ -59,6 +59,25 @@ "typescript": "^4.9.4" } }, + "bip39_shim": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "bip39-light": "^1.0.7", + "signify-ts": "file:../../../" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2" + } + }, + "bip39_shim/src/bip39_shim": { + "extraneous": true + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", diff --git a/examples/integration-scripts/package.json b/examples/integration-scripts/package.json index 563e193d..509efda3 100644 --- a/examples/integration-scripts/package.json +++ b/examples/integration-scripts/package.json @@ -3,8 +3,7 @@ "type": "module", "private": true, "version": "0.0.0", - "scripts": { - }, + "scripts": {}, "dependencies": { "signify-ts": "file:../../" }, diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index 4db9bbd3..c4e1562b 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -31,7 +31,9 @@ export interface CreateIdentiferArgs { bran?: string, count?: number, ncount?: number, - tier?: Tier + tier?: Tier, + extern_type?: string, + extern?: any } /** Arguments required to rotate an identfier */ @@ -134,6 +136,8 @@ export class Identifier { let count = kargs.count let ncount = kargs.ncount let tier = kargs.tier + let extern_type = kargs.extern_type + let extern = kargs.extern let xargs = { transferable: transferable, @@ -157,7 +161,9 @@ export class Identifier { bran: bran, count: count, ncount: ncount, - tier: tier + tier: tier, + extern_type: extern_type, + extern: extern } let keeper = this.client.manager!.new(algo, this.client.pidx, xargs) diff --git a/src/keri/core/keeping.ts b/src/keri/core/keeping.ts index 6e4f7c2b..ae218f4f 100644 --- a/src/keri/core/keeping.ts +++ b/src/keri/core/keeping.ts @@ -18,7 +18,7 @@ export {}; export interface ExternalModule { type: string, name: string, - params: any[], + module: any, } export class KeyManager { @@ -29,10 +29,8 @@ export class KeyManager { this.salter = salter this.modules = [] - externalModules.forEach((module) => { - let pkg = require(module.name) - let mod = new pkg(module.params) - this.modules[module.type] = mod + externalModules.forEach((mod) => { + this.modules[mod.type] = mod.module }) } @@ -46,11 +44,11 @@ export class KeyManager { return new GroupKeeper(this, kargs["mhab"], kargs["states"], kargs["rstates"],kargs["keys"],kargs["ndigs"]) case Algos.extern: let typ = kargs.extern_type - if ( !this.modules.contains(typ)) { - throw new Error(`unsupported external module type ${typ}`) + if ( typ in this.modules) { + let mod = new this.modules[typ](pidx,kargs) + return mod } else { - let mod = this.modules[typ] - return new mod(pidx,kargs.extern) + throw new Error(`unsupported external module type ${typ}`) } default: throw new Error('Unknown algo') From 5abcb784348995337a9898154c3c4a345d10dfb4 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 23 Sep 2023 15:40:29 -0300 Subject: [PATCH 045/186] clean --- examples/integration-scripts/bip39_shim/src/bip39_shim.ts | 4 ---- examples/integration-scripts/bip39_shim/tsconfig.json | 1 - examples/integration-scripts/externalModule.ts | 2 -- examples/integration-scripts/tsconfig.node.json | 7 +++++-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts index 9aff6891..f4524ee0 100644 --- a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts +++ b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts @@ -1,9 +1,6 @@ import bip39 from 'bip39' import { Diger, Signer, MtrDex} from 'signify-ts'; - - - export class BIP39Shim { private icount:number @@ -16,7 +13,6 @@ export class BIP39Shim { private mnemonics: string = "" constructor(pidx:number, kargs:any ) { - console.log(kargs) this.icount = kargs.icount??1 this.ncount = kargs.ncount??1 this.pidx = pidx diff --git a/examples/integration-scripts/bip39_shim/tsconfig.json b/examples/integration-scripts/bip39_shim/tsconfig.json index 4b4e8fa4..60003ca7 100644 --- a/examples/integration-scripts/bip39_shim/tsconfig.json +++ b/examples/integration-scripts/bip39_shim/tsconfig.json @@ -20,6 +20,5 @@ "noFallthroughCasesInSwitch": true }, "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] } \ No newline at end of file diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts index e4dea27e..07c128b9 100644 --- a/examples/integration-scripts/externalModule.ts +++ b/examples/integration-scripts/externalModule.ts @@ -24,6 +24,4 @@ async function run() { let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39_shim", extern:{mnemonics: words}}) let op = await icpResult.op() assert.equal(op['done'], true) - let aid = op['response'] - console.log(aid) } \ No newline at end of file diff --git a/examples/integration-scripts/tsconfig.node.json b/examples/integration-scripts/tsconfig.node.json index b1035cbd..f34049fe 100644 --- a/examples/integration-scripts/tsconfig.node.json +++ b/examples/integration-scripts/tsconfig.node.json @@ -5,6 +5,9 @@ "target": "ESNext", "module": "ESNext", "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true + "allowSyntheticDefaultImports": true, + "noEmit": true, + "emitDeclarationOnly": false, // added emitDeclarationOnly option + "allowImportingTsExtensions": true // moved this option to be used with noEmit or emitDeclarationOnly + } } -} From 46bcaf8b6717fdde79ffe7a553690d8a99e5f3e3 Mon Sep 17 00:00:00 2001 From: Kevin Griffin Date: Wed, 27 Sep 2023 11:48:34 -0400 Subject: [PATCH 046/186] updates existing registry impl Signed-off-by: Kevin Griffin --- src/keri/app/credentialing.ts | 30 ++++---- test/app/registry.test.ts | 125 ++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+), 13 deletions(-) create mode 100644 test/app/registry.test.ts diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index b6d2fb17..85d18936 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -9,6 +9,7 @@ import {Siger} from "../core/siger" import {Prefixer} from "../core/prefixer" import {randomNonce} from "./coring" import {TextDecoder} from "util" +import { TraitDex } from "./habery" /** Types of credentials */ @@ -438,16 +439,26 @@ export class Registries { * @async * @param {string} name Name or alias of the identifier * @param {string} registryName Name for the registry + * @param {boolean}[noBackers=true] config property for using backers (a ledger of some kind) + * @param {string[]}[baks=[]] List of backers if used * @param {string} [nonce] Nonce used to generate the registry. If not provided a random nonce will be generated * @returns {Promise} A promise to the long-running operation */ - async create(name: string, registryName: string, nonce?:string): Promise { - // TODO add backers option - // TODO get estOnly from get_identifier ? - + async create(name: string, registryName: string, noBackers:boolean = true, baks:string[] = [], nonce?:string): Promise { let hab = await this.client.identifiers().get(name) let pre: string = hab.prefix + let cnfg: string[] = []; + if (noBackers) { + cnfg.push(TraitDex.NoBackers); + } + + let state = hab.state + let estOnly = (state.c !== undefined && state.c.includes("EO")); + if (estOnly) { + cnfg.push(TraitDex.EstOnly); + } + nonce = nonce !== undefined ? nonce : randomNonce() const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) @@ -458,9 +469,9 @@ export class Registries { i: "", ii: pre, s: "0", - c: ['NB'], + c: cnfg, bt: "0", - b: [], + b: baks, n: nonce } @@ -471,14 +482,7 @@ export class Registries { let ixn = {} let sigs = [] - let state = hab.state - let estOnly = false - if (state.c !== undefined && state.c.includes("EO")) { - estOnly = true - } - if (estOnly) { - // TODO implement rotation event throw new Error("establishment only not implemented") } else { diff --git a/test/app/registry.test.ts b/test/app/registry.test.ts new file mode 100644 index 00000000..c148b726 --- /dev/null +++ b/test/app/registry.test.ts @@ -0,0 +1,125 @@ +import {strict as assert} from "assert" +import { SignifyClient } from "../../src/keri/app/clienting" + +import { Authenticater } from "../../src/keri/core/authing" +import { Salter, Tier } from "../../src/keri/core/salter" +import libsodium from "libsodium-wrappers-sumo" +import fetchMock from "jest-fetch-mock" +import 'whatwg-fetch' + +fetchMock.enableMocks(); + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ + '"pidx":0}' +const mockGetAID ={ + "name": "aid1", + "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "salty": { + "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", + "pidx": 0, + "kidx": 0, + "stem": "signify:aid", + "tier": "low", + "dcode": "E", + "icodes": [ + "A" + ], + "ncodes": [ + "A" + ], + "transferable": true + }, + "transferable": true, + "state": { + "vn": [ + 1, + 0 + ], + "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "s": "0", + "p": "", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "f": "0", + "dt": "2023-08-21T22:30:46.473545+00:00", + "et": "icp", + "kt": "1", + "k": [ + "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" + ], + "nt": "1", + "n": [ + "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" + ], + "bt": "0", + "b": [], + "c": [], + "ee": { + "s": "0", + "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", + "br": [], + "ba": [] + }, + "di": "" + }, + "windexes": [] +} + +const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} + + +fetchMock.mockResponse(req => { + if (req.url.startsWith(url+'/agent')) { + return Promise.resolve({body: mockConnect, init:{ status: 202 }}) + } else if (req.url == boot_url+'/boot') { + return Promise.resolve({body: "", init:{ status: 202 }}) + } else { + let headers = new Headers() + let signed_headers = new Headers() + + headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") + headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + headers.set('Content-Type', 'application/json') + + const requrl = new URL(req.url) + let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) + let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) + + let authn = new Authenticater(signer!,signer!.verfer) + signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) + let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID + + return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) + } + +}) + +describe('Registry', () => { + it('Registry', async () => { + await libsodium.ready; + const bran = "0123456789abcdefghijk" + + let client = new SignifyClient(url, bran, Tier.low, boot_url) + + await client.boot() + await client.connect() + + }) +}) \ No newline at end of file From 0a3fa10cac14b2554ee17df627c6c6faf9ac042a Mon Sep 17 00:00:00 2001 From: Kevin Griffin Date: Thu, 28 Sep 2023 09:46:18 -0400 Subject: [PATCH 047/186] wip Signed-off-by: Kevin Griffin --- examples/integration-scripts/multisig.ts | 100 ++++++++++++++++++++++- src/keri/app/aiding.ts | 2 +- src/keri/app/credentialing.ts | 46 +++++++++-- 3 files changed, 139 insertions(+), 9 deletions(-) diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index 273ffce8..e0785c25 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -536,7 +536,7 @@ async function run() { res = await client3.groups().getRequest(msgSaid) exn = res[0].exn - icpResult3 = await client3.identifiers().rotate("multisig",{states: states,rstates: rstates}) + icpResult3 = await client3.identifiers().rotate("`multisig",{states: states,rstates: rstates}) op3 = await icpResult3.op() serder = icpResult3.serder sigs = icpResult3.sigs @@ -569,4 +569,102 @@ async function run() { await new Promise(resolve => setTimeout(resolve, 1000)); } console.log("Multisig rotation completed!") + + console.log("Starting multisig registry creation") + + let vcpRes1 = await client1.registries().create("member1", "vLEI Registry", "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"); + op1 = await vcpRes1.op(); + serder = vcpRes1.serder + sigs = vcpRes1.sigs + + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + let regbeds = { + vcp: vcpRes1.vcp, + anc: signify.messagize(serder, sigs) + } + + await client1.exchanges().send("member1", "multisig", aid1, "/multisig/vcp", regbeds) + console.log("Member1 initiated registry, waiting for others to join...") + + // Member2 check for notifications and join the create registry event + msgSaid = "" + while (msgSaid=="") { + let notifications = await client2.notifications().list() + for (let notif of notifications.notes){ + if (notif.a.r == '/multisig/vcp') { + msgSaid = notif.a.d + await client2.notifications().mark(notif.i) + console.log("Member2 received exchange message to join the create registry event") + } + } + await new Promise(resolve => setTimeout(resolve, 1000)); + } + + await new Promise(resolve => setTimeout(resolve, 5000)); + res = await client2.groups().getRequest(msgSaid) + exn = res[0].exn + + let vcpRes2 = await client2.registries().create("member1", "vLEI Registry", "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"); + op2 = await vcpRes2.op() + serder = vcpRes2.serder + sigs = vcpRes2.sigs + + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + regbeds = { + vcp: vcpRes2.vcp, + anc: signify.messagize(serder, sigs) + } + + await client2.exchanges().send("member2", "multisig", aid2, "/multisig/vcp", regbeds) + console.log("Member2 joins rotation event, waiting for others...") + + // Member3 check for notifications and join the create registry event + msgSaid = "" + while (msgSaid=="") { + let notifications = await client2.notifications().list() + for (let notif of notifications.notes){ + if (notif.a.r == '/multisig/vcp') { + msgSaid = notif.a.d + await client2.notifications().mark(notif.i) + console.log("Member3 received exchange message to join the create registry event") + } + } + await new Promise(resolve => setTimeout(resolve, 1000)); + } + + await new Promise(resolve => setTimeout(resolve, 5000)); + res = await client2.groups().getRequest(msgSaid) + exn = res[0].exn + + let vcpRes3 = await client2.registries().create("member3", "vLEI Registry", "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"); + op3 = await vcpRes3.op() + serder = vcpRes3.serder + sigs = vcpRes3.sigs + + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + + regbeds = { + vcp: vcpRes3.vcp, + anc: signify.messagize(serder, sigs) + } + + await client3.exchanges().send("member3", "multisig", aid3, "/multisig/vcp", regbeds) + + // Done + while (!op1["done"]) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + + while (!op2["done"]) { + op2 = await client2.operations().get(op2.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + + while (!op3["done"]) { + op3 = await client3.operations().get(op3.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } } \ No newline at end of file diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index 4db9bbd3..b1597fe3 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -209,7 +209,7 @@ export class Identifier { } jsondata[algo] = keeper.params() - this.client.pidx = this.client.pidx + 1 + this.client.pidx = this.client.pidx + 1 let res = this.client.fetch("/identifiers", "POST", jsondata) return new EventResult(serder, sigs, res) } diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 85d18936..58e58153 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -1,6 +1,6 @@ import { SignifyClient } from "./clienting" import {Salter} from "../core/salter" -import { interact, messagize} from "../core/eventing" +import {incept, interact, messagize} from "../core/eventing" import {b, Dict, Ident, Ilks, Serials, versify} from "../core/core" import {MtrDex} from "../core/matter" import {Saider} from "../core/saider" @@ -10,6 +10,7 @@ import {Prefixer} from "../core/prefixer" import {randomNonce} from "./coring" import {TextDecoder} from "util" import { TraitDex } from "./habery" +import { re } from "mathjs" /** Types of credentials */ @@ -407,6 +408,37 @@ export class Credentials { } } +export class RegistryResult { + private readonly _vcp: any + private readonly _serder: Serder + private readonly _sigs: string[] + private readonly promise: Promise + + constructor(vcp: object, serder: Serder, sigs: any[], promise: Promise) { + this._vcp = vcp + this._serder = serder + this._sigs = sigs + this.promise = promise + } + + get vcp() { + return this._serder + } + + get serder() { + return this._serder + } + + get sigs() { + return this._sigs + } + + async op(): Promise { + let res = await this.promise + return await res.json() + } +} + /** * Registries */ @@ -442,9 +474,9 @@ export class Registries { * @param {boolean}[noBackers=true] config property for using backers (a ledger of some kind) * @param {string[]}[baks=[]] List of backers if used * @param {string} [nonce] Nonce used to generate the registry. If not provided a random nonce will be generated - * @returns {Promise} A promise to the long-running operation + * @returns {Promise<[any, Serder, any[], object]> } A promise to the long-running operation */ - async create(name: string, registryName: string, noBackers:boolean = true, baks:string[] = [], nonce?:string): Promise { + async create(name: string, registryName: string, noBackers:boolean = true, baks:string[] = [], nonce?:string): Promise { let hab = await this.client.identifiers().get(name) let pre: string = hab.prefix @@ -480,11 +512,10 @@ export class Registries { vcp.d = prefixer.qb64 let ixn = {} - let sigs = [] + let sigs: any[] = [] if (estOnly) { throw new Error("establishment only not implemented") - } else { let state = hab.state let sn = Number(state.s) @@ -500,9 +531,10 @@ export class Registries { let keeper = this.client!.manager!.get(hab) sigs = keeper.sign(b(serder.raw)) ixn = serder.ked - } - return await this.createFromEvents(hab, name, registryName, vcp, ixn, sigs) + let res = await this.createFromEvents(hab, name, registryName, vcp, ixn, sigs) + return new RegistryResult(vcp, serder, sigs, res); + } } async createFromEvents(hab: Dict, name: string, registryName: string, vcp: Dict, ixn: Dict, sigs: any[]) { From ccf7b71c70ce4298cda5e8d3add48ec59ba86b88 Mon Sep 17 00:00:00 2001 From: Kevin Griffin Date: Thu, 28 Sep 2023 10:32:00 -0400 Subject: [PATCH 048/186] adds registry create Signed-off-by: Kevin Griffin --- examples/integration-scripts/multisig.ts | 76 ++++++--- .../integration-scripts/package-lock.json | 150 ++++++++++++++++- examples/integration-scripts/package.json | 6 +- package-lock.json | 10 ++ package.json | 1 + src/keri/app/credentialing.ts | 96 +++++------ src/keri/core/eventing.ts | 2 +- src/keri/core/vdring.ts | 78 +++++++++ test/app/registry.test.ts | 155 +++++------------- test/core/vdring.test.ts | 95 +++++++++++ 10 files changed, 466 insertions(+), 203 deletions(-) create mode 100644 src/keri/core/vdring.ts create mode 100644 test/core/vdring.test.ts diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index e0785c25..574242a2 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -138,6 +138,7 @@ async function run() { }) op1 = await icpResult1.op() let serder = icpResult1.serder + let sigs = icpResult1.sigs let sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) @@ -157,7 +158,7 @@ async function run() { // Second member check notifications and join the multisig let msgSaid = "" while (msgSaid=="") { - let notifications = await client2.notifications().list() + let notifications = await client2.notifications().list() for (let notif of notifications.notes){ if (notif.a.r == '/multisig/icp') { msgSaid = notif.a.d @@ -276,10 +277,14 @@ async function run() { assert.equal(identifiers3.aids[0].name, "member3") assert.equal(identifiers3.aids[1].name, "multisig") - console.log("Client 1 managed AIDs:", identifiers1.aids[0].name, identifiers1.aids[1].name) - console.log("Client 2 managed AIDs:", identifiers2.aids[0].name, identifiers2.aids[1].name) - console.log("Client 3 managed AIDs:", identifiers3.aids[0].name, identifiers3.aids[1].name) + console.log("Client 1 managed AIDs:\n", identifiers1.aids[0].name, `[${identifiers1.aids[0].prefix}]\n`, + identifiers1.aids[1].name, `[${identifiers1.aids[1].prefix}]`) + console.log("Client 2 managed AIDs:\n", identifiers2.aids[0].name, `[${identifiers2.aids[0].prefix}]\n`, + identifiers2.aids[1].name, `[${identifiers2.aids[1].prefix}]`) + console.log("Client 3 managed AIDs:\n", identifiers3.aids[0].name, `[${identifiers3.aids[0].prefix}]\n`, + identifiers3.aids[1].name, `[${identifiers3.aids[1].prefix}]`) + let multisig = identifiers3.aids[1].prefix // MultiSig Interaction @@ -536,7 +541,7 @@ async function run() { res = await client3.groups().getRequest(msgSaid) exn = res[0].exn - icpResult3 = await client3.identifiers().rotate("`multisig",{states: states,rstates: rstates}) + icpResult3 = await client3.identifiers().rotate("multisig",{states: states,rstates: rstates}) op3 = await icpResult3.op() serder = icpResult3.serder sigs = icpResult3.sigs @@ -571,20 +576,26 @@ async function run() { console.log("Multisig rotation completed!") console.log("Starting multisig registry creation") - - let vcpRes1 = await client1.registries().create("member1", "vLEI Registry", "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"); + + let vcpRes1 = await client1.registries().create({name: "member1", registryName: "vLEI Registry", nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}); op1 = await vcpRes1.op(); - serder = vcpRes1.serder + serder = vcpRes1.regser + let anc = vcpRes1.serder sigs = vcpRes1.sigs - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); + ims = signify.d(signify.messagize(anc, sigers)); + atc = ims.substring(anc.size); let regbeds = { - vcp: vcpRes1.vcp, - anc: signify.messagize(serder, sigs) + vcp: [serder, ""], + anc: [anc, atc] } - await client1.exchanges().send("member1", "multisig", aid1, "/multisig/vcp", regbeds) + recp = [aid2["state"], aid3["state"]].map((state) => state['i']) + res = await client1.exchanges().send("member1", "registry", aid1, "/multisig/vcp", + {gid:multisig, usage:"Issue vLEIs"}, regbeds, recp); + console.log("Member1 initiated registry, waiting for others to join...") // Member2 check for notifications and join the create registry event @@ -605,29 +616,34 @@ async function run() { res = await client2.groups().getRequest(msgSaid) exn = res[0].exn - let vcpRes2 = await client2.registries().create("member1", "vLEI Registry", "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"); + let vcpRes2 = await client2.registries().create({name: "member2", registryName: "vLEI Registry", nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}); op2 = await vcpRes2.op() - serder = vcpRes2.serder + serder = vcpRes2.regser + anc = vcpRes2.serder sigs = vcpRes2.sigs sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + ims = signify.d(signify.messagize(anc, sigers)); + atc = ims.substring(anc.size); regbeds = { - vcp: vcpRes2.vcp, - anc: signify.messagize(serder, sigs) + vcp: [serder, ""], + anc: [anc, atc] } - await client2.exchanges().send("member2", "multisig", aid2, "/multisig/vcp", regbeds) + recp = [aid1["state"], aid3["state"]].map((state) => state['i']) + await client2.exchanges().send("member2", "registry", aid2, "/multisig/vcp", + {gid:multisig, usage:"Issue vLEIs"}, regbeds, recp); console.log("Member2 joins rotation event, waiting for others...") // Member3 check for notifications and join the create registry event msgSaid = "" while (msgSaid=="") { - let notifications = await client2.notifications().list() + let notifications = await client3.notifications().list() for (let notif of notifications.notes){ if (notif.a.r == '/multisig/vcp') { msgSaid = notif.a.d - await client2.notifications().mark(notif.i) + await client3.notifications().mark(notif.i) console.log("Member3 received exchange message to join the create registry event") } } @@ -635,22 +651,27 @@ async function run() { } await new Promise(resolve => setTimeout(resolve, 5000)); - res = await client2.groups().getRequest(msgSaid) + res = await client3.groups().getRequest(msgSaid) exn = res[0].exn - let vcpRes3 = await client2.registries().create("member3", "vLEI Registry", "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"); + let vcpRes3 = await client3.registries().create({name: "member3", registryName: "vLEI Registry", nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}); op3 = await vcpRes3.op() - serder = vcpRes3.serder - sigs = vcpRes3.sigs + serder = vcpRes2.regser + anc = vcpRes2.serder + sigs = vcpRes2.sigs sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + ims = signify.d(signify.messagize(anc, sigers)); + atc = ims.substring(anc.size); regbeds = { - vcp: vcpRes3.vcp, - anc: signify.messagize(serder, sigs) + vcp: [serder, ""], + anc: [anc, atc] } - await client3.exchanges().send("member3", "multisig", aid3, "/multisig/vcp", regbeds) + recp = [aid1["state"], aid2["state"]].map((state) => state['i']) + await client3.exchanges().send("member3", "multisig", aid3, "/multisig/vcp", + {gid:multisig, usage:"Issue vLEIs"}, regbeds, recp); // Done while (!op1["done"]) { @@ -667,4 +688,5 @@ async function run() { op3 = await client3.operations().get(op3.name); await new Promise(resolve => setTimeout(resolve, 1000)); } -} \ No newline at end of file + // console.log("Multisig create registry completed!") +} diff --git a/examples/integration-scripts/package-lock.json b/examples/integration-scripts/package-lock.json index 4af04d08..287da06d 100644 --- a/examples/integration-scripts/package-lock.json +++ b/examples/integration-scripts/package-lock.json @@ -8,7 +8,8 @@ "name": "integration-scripts", "version": "0.0.0", "dependencies": { - "signify-ts": "file:../../" + "signify-ts": "file:../../", + "ts-node": "^10.9.1" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.57.1", @@ -68,6 +69,17 @@ "node": ">=0.10.0" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -157,6 +169,28 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -192,12 +226,38 @@ "node": ">= 8" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, "node_modules/@types/json-schema": { "version": "7.0.12", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, + "node_modules/@types/node": { + "version": "20.7.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz", + "integrity": "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==", + "peer": true + }, "node_modules/@types/semver": { "version": "7.5.1", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", @@ -396,7 +456,6 @@ "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -413,6 +472,14 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -453,6 +520,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -545,6 +617,11 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -582,6 +659,14 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1203,6 +1288,11 @@ "node": ">=10" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1569,6 +1659,48 @@ "node": ">=8.0" } }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -1618,7 +1750,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1636,6 +1767,11 @@ "punycode": "^2.1.0" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -1663,6 +1799,14 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/examples/integration-scripts/package.json b/examples/integration-scripts/package.json index 563e193d..c7086375 100644 --- a/examples/integration-scripts/package.json +++ b/examples/integration-scripts/package.json @@ -3,10 +3,10 @@ "type": "module", "private": true, "version": "0.0.0", - "scripts": { - }, + "scripts": {}, "dependencies": { - "signify-ts": "file:../../" + "signify-ts": "file:../../", + "ts-node": "^10.9.1" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.57.1", diff --git a/package-lock.json b/package-lock.json index 2f0a464b..996053ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,6 +39,7 @@ "minami": "^1.2.3", "size-limit": "^5.0.4", "ts-migrate": "^0.1.23", + "ts-mockito": "^2.6.1", "tsdx": "^0.14.1", "tslib": "^2.3.1", "typedoc": "^0.24.8", @@ -19186,6 +19187,15 @@ "node": ">=6" } }, + "node_modules/ts-mockito": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", + "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.5" + } + }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", diff --git a/package.json b/package.json index 2696c1e4..14fafc5d 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "minami": "^1.2.3", "size-limit": "^5.0.4", "ts-migrate": "^0.1.23", + "ts-mockito": "^2.6.1", "tsdx": "^0.14.1", "tslib": "^2.3.1", "typedoc": "^0.24.8", diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 58e58153..e5fdb687 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -1,16 +1,13 @@ import { SignifyClient } from "./clienting" -import {Salter} from "../core/salter" -import {incept, interact, messagize} from "../core/eventing" -import {b, Dict, Ident, Ilks, Serials, versify} from "../core/core" -import {MtrDex} from "../core/matter" -import {Saider} from "../core/saider" -import {Serder} from "../core/serder" -import {Siger} from "../core/siger" -import {Prefixer} from "../core/prefixer" -import {randomNonce} from "./coring" -import {TextDecoder} from "util" +import { Salter } from "../core/salter" +import { interact, messagize } from "../core/eventing" +import { vdr } from "../core/vdring" +import { b, Dict, Ident, Ilks, Serials, versify, Versionage } from "../core/core" +import { Saider } from "../core/saider" +import { Serder } from "../core/serder" +import { Siger } from "../core/siger" +import { TextDecoder } from "util" import { TraitDex } from "./habery" -import { re } from "mathjs" /** Types of credentials */ @@ -408,21 +405,31 @@ export class Credentials { } } +export interface CreateRegistryArgs { + name: string, + registryName: string, + toad?: string | number | undefined + noBackers?:boolean, + baks?:string[], + nonce?:string +} + + export class RegistryResult { - private readonly _vcp: any + private readonly _regser: any private readonly _serder: Serder private readonly _sigs: string[] private readonly promise: Promise - constructor(vcp: object, serder: Serder, sigs: any[], promise: Promise) { - this._vcp = vcp + constructor(regser: Serder, serder: Serder, sigs: any[], promise: Promise) { + this._regser = regser this._serder = serder this._sigs = sigs this.promise = promise } - get vcp() { - return this._serder + get regser() { + return this._regser } get serder() { @@ -469,14 +476,10 @@ export class Registries { /** * Create a registry * @async - * @param {string} name Name or alias of the identifier - * @param {string} registryName Name for the registry - * @param {boolean}[noBackers=true] config property for using backers (a ledger of some kind) - * @param {string[]}[baks=[]] List of backers if used - * @param {string} [nonce] Nonce used to generate the registry. If not provided a random nonce will be generated + * @param {CreateRegistryArgs} * @returns {Promise<[any, Serder, any[], object]> } A promise to the long-running operation */ - async create(name: string, registryName: string, noBackers:boolean = true, baks:string[] = [], nonce?:string): Promise { + async create({ name, registryName, noBackers=true, toad=0, baks=[], nonce}: CreateRegistryArgs): Promise { let hab = await this.client.identifiers().get(name) let pre: string = hab.prefix @@ -490,54 +493,31 @@ export class Registries { if (estOnly) { cnfg.push(TraitDex.EstOnly); } - - nonce = nonce !== undefined ? nonce : randomNonce() - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) - let vcp = { - v: vs, - t: Ilks.vcp, - d: "", - i: "", - ii: pre, - s: "0", - c: cnfg, - bt: "0", - b: baks, - n: nonce - } - - let prefixer = new Prefixer({code: MtrDex.Blake3_256}, vcp) - vcp.i = prefixer.qb64 - vcp.d = prefixer.qb64 - - let ixn = {} - let sigs: any[] = [] + let regser = vdr.incept({pre, baks, toad, nonce, cnfg}); if (estOnly) { - throw new Error("establishment only not implemented") + throw new Error("establishment only not implemented"); } else { let state = hab.state let sn = Number(state.s) let dig = state.d let data: any = [{ - i: prefixer.qb64, + i: regser.pre, s: "0", - d: prefixer.qb64 + d: regser.pre }] - let serder = interact({pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined}) - let keeper = this.client!.manager!.get(hab) - sigs = keeper.sign(b(serder.raw)) - ixn = serder.ked - - let res = await this.createFromEvents(hab, name, registryName, vcp, ixn, sigs) - return new RegistryResult(vcp, serder, sigs, res); + let serder = interact({pre: pre, sn: sn + 1, data: data, dig: dig, version: Versionage, kind: Serials.JSON}) + let keeper = this.client.manager!.get(hab) + let sigs = keeper.sign(b(serder.raw)) + let res = this.createFromEvents(hab, name, registryName, regser.ked, serder.ked, sigs) + return new RegistryResult(regser, serder, sigs, res); } } - async createFromEvents(hab: Dict, name: string, registryName: string, vcp: Dict, ixn: Dict, sigs: any[]) { + createFromEvents(hab: Dict, name: string, registryName: string, vcp: Dict, ixn: Dict, sigs: any[]) { let path = `/identifiers/${name}/registries` let method = 'POST' @@ -545,14 +525,14 @@ export class Registries { let data: any = { name: registryName, vcp: vcp, - ixn: ixn!, + ixn: ixn, sigs: sigs } let keeper = this.client!.manager!.get(hab) data[keeper.algo] = keeper.params() - let res = await this.client.fetch(path, method, data) - return await res.json() + return this.client.fetch(path, method, data) + } } diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index 58648b2c..3e88f1c2 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -200,7 +200,7 @@ export function rotate({ return new Serder(ked) } -function ample(n: number, f?: number, weak = true) { +export function ample(n: number, f?: number, weak = true) { n = Math.max(0, n) // no negatives let f1 if (f == undefined) { diff --git a/src/keri/core/vdring.ts b/src/keri/core/vdring.ts new file mode 100644 index 00000000..61d570e6 --- /dev/null +++ b/src/keri/core/vdring.ts @@ -0,0 +1,78 @@ +import { randomNonce } from "../app/coring"; +import { TraitDex } from "../app/habery"; +import { Serials, Versionage, Version, Ident, versify, Ilks } from "../core/core"; +import { ample } from "./eventing"; +import { MtrDex } from "./matter"; +import { Prefixer } from "./prefixer"; +import { Serder } from "./serder"; + +namespace vdr { + + export interface VDRInceptArgs { + pre: string, + toad?: string | number | undefined + nonce?: string, + baks?: string[], + cnfg?: string[], + version?: Version, + kind?: Serials, + code?: string, + } + + export function incept({ pre, toad, nonce = randomNonce(), baks = [], cnfg = [], version = Versionage, kind = Serials.JSON, code = MtrDex.Blake3_256 }: VDRInceptArgs): Serder { + + const vs = versify(Ident.KERI, version, kind, 0); + let isn = 0; + let ilk = Ilks.vcp; + + if (cnfg.includes(TraitDex.NoBackers) && baks.length > 0) { + throw new Error(`${baks.length} backers specified for NB vcp, 0 allowed`); + } + + if (new Set(baks).size < baks.length) { + throw new Error(`Invalid baks ${baks} has duplicates`); + } + + let _toad: number + if (toad === undefined) { + if (baks.length === 0) { + _toad = 0 + } else { + _toad = ample(baks.length); + } + } else { + _toad = +toad; + } + + if (baks.length > 0) { + if (_toad < 1 || (_toad > baks.length)) { + throw new Error(`Invalid toad ${_toad} for baks in ${baks}`); + } + } else { + if (_toad != 0) { + throw new Error(`Invalid toad ${_toad} for no baks`); + } + } + + let ked = { + v: vs, + t: ilk, + d: "", + i: "", + ii: pre, + s: "" + isn, + c: cnfg, + bt: "0", + b: baks, + n: nonce + }; + + let prefixer = new Prefixer({ code }, ked); + ked.i = prefixer.qb64; + ked.d = prefixer.qb64; + + return new Serder(ked); + } +} + +export { vdr }; diff --git a/test/app/registry.test.ts b/test/app/registry.test.ts index c148b726..6cef4666 100644 --- a/test/app/registry.test.ts +++ b/test/app/registry.test.ts @@ -1,125 +1,58 @@ -import {strict as assert} from "assert" -import { SignifyClient } from "../../src/keri/app/clienting" - -import { Authenticater } from "../../src/keri/core/authing" -import { Salter, Tier } from "../../src/keri/core/salter" -import libsodium from "libsodium-wrappers-sumo" -import fetchMock from "jest-fetch-mock" -import 'whatwg-fetch' - -fetchMock.enableMocks(); +import { SignifyClient } from "../../src/keri/app/clienting"; +import { anyOfClass, anything, instance, mock, when } from 'ts-mockito'; +import libsodium from "libsodium-wrappers-sumo"; +import 'whatwg-fetch'; +import { Registries } from "../../src/keri/app/credentialing"; +import { Identifier, KeyManager, SaltyKeeper } from "../../src"; +import { strict as assert } from "assert"; + +describe('registry', () => { + it('should create a registry', async () => { + await libsodium.ready; + let mockedClient = mock(SignifyClient); + let mockedIdentifiers = mock(Identifier); + let mockedKeyManager = mock(KeyManager); + let mockedKeeper = mock(SaltyKeeper); -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" + let hab = { prefix: "hab prefix", state: { s: 0, d: 'a digest' } }; -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ - '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ - '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ - '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ - '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ - '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ - '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ - '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ - '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ - '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ - '"pidx":0}' -const mockGetAID ={ - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true - }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] - }, - "di": "" - }, - "windexes": [] -} + when(mockedClient.manager).thenReturn(instance(mockedKeyManager)); + when(mockedKeyManager.get(hab)).thenReturn(instance(mockedKeeper)); -const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} + when(mockedKeeper.sign(anyOfClass(Uint8Array))).thenReturn(["a signature"]); + when(mockedIdentifiers.get("a name")).thenResolve(hab); + when(mockedClient.identifiers()).thenReturn(instance(mockedIdentifiers)); -fetchMock.mockResponse(req => { - if (req.url.startsWith(url+'/agent')) { - return Promise.resolve({body: mockConnect, init:{ status: 202 }}) - } else if (req.url == boot_url+'/boot') { - return Promise.resolve({body: "", init:{ status: 202 }}) - } else { - let headers = new Headers() - let signed_headers = new Headers() + let mockedResponse = mock(Response) + when(mockedClient.fetch("/identifiers/a name/registries", "POST", anything())).thenResolve(instance(mockedResponse)) - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') + let registries = new Registries(instance(mockedClient)); - const requrl = new URL(req.url) - let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) - let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) + let actual = await registries.create({ name: "a name", registryName: "a registry name", nonce: "" }); - let authn = new Authenticater(signer!,signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID - - return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) - } + assert.equal(actual.regser.raw, '{"v":"KERI10JSON0000c5_","t":"vcp","d":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX","i":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX","ii":"hab prefix","s":"0","c":["NB"],"bt":"0","b":[],"n":""}'); + assert.equal(actual.serder.raw, '{"v":"KERI10JSON0000f4_","t":"ixn","d":"EE5R61289Xnpxc2M-euPtsAkp849tUdNJ7DuyBeSiRtm","i":"hab prefix","s":"1","p":"a digest","a":[{"i":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX","s":"0","d":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX"}]}'); + }); -}) - -describe('Registry', () => { - it('Registry', async () => { + it('should fail on estanblishmnet only for now', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" + let mockedClient = mock(SignifyClient); + let mockedIdentifiers = mock(Identifier); + + let hab = { prefix: "hab prefix", state: { s: 0, d: 'a digest', c: ['EO'] } }; - let client = new SignifyClient(url, bran, Tier.low, boot_url) + when(mockedIdentifiers.get("a name")).thenResolve(hab); + when(mockedClient.identifiers()).thenReturn(instance(mockedIdentifiers)); - await client.boot() - await client.connect() + let registries = new Registries(instance(mockedClient)); - }) + assert.rejects(async () => { + await registries.create({ name: "a name", registryName: "a registry name", nonce: "" }) + }, + { + name: 'Error', + message: 'establishment only not implemented', + }); + }); }) \ No newline at end of file diff --git a/test/core/vdring.test.ts b/test/core/vdring.test.ts new file mode 100644 index 00000000..38cc1353 --- /dev/null +++ b/test/core/vdring.test.ts @@ -0,0 +1,95 @@ +import libsodium from "libsodium-wrappers-sumo"; +import { vdr } from "../../src/keri/core/vdring"; +import { strict as assert } from "assert"; + +describe('vdr', () => { + it('should create registry inception events ', async () => { + await libsodium.ready; + let actual = vdr.incept({ pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 0 }); + assert.equal(actual.pre.length, 44); + + actual = vdr.incept({ pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 0, nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s" }); + assert.equal(actual.pre, "EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS"); + assert.equal(actual.code, "E"); + assert.equal(actual.raw, + '{"v":"KERI10JSON00010f_","t":"vcp","d":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","i":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":[],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}'); + assert.equal(actual.size, 271); + }); + + it('should fail on NB config with backers', async () => { + await libsodium.ready; + let cnfg = ["NB"]; + assert.throws(() => { + vdr.incept({ + pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 0, nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s", + cnfg: cnfg, baks: ["a backer"] + }) + }, + { + name: 'Error', + message: '1 backers specified for NB vcp, 0 allowed', + }); + }); + + it('should fail with duplicate backers', async () => { + await libsodium.ready; + assert.throws(() => { + vdr.incept({ + pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 0, nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s", + baks: ["a backer", "a backer"] + }) + }, + { + name: 'Error', + message: 'Invalid baks a backer,a backer has duplicates', + }); + }); + + + it('should fail with invalid toad config for backers', async () => { + await libsodium.ready; + assert.throws(() => { + vdr.incept({ + pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 0, nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s", + baks: ["a backer"] + }) + }, + { + name: 'Error', + message: 'Invalid toad 0 for baks in a backer', + }); + }); + + it('should fail with invalid toad for no backers', async () => { + await libsodium.ready; + assert.throws(() => { + vdr.incept({ pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 1, nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s" }) + }, + { + name: 'Error', + message: 'Invalid toad 1 for no baks', + }); + }); + + it('should allow optional toad and no backers', async () => { + await libsodium.ready; + let actual = vdr.incept({ pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s" }); + + assert.equal(actual.pre, "EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS"); + assert.equal(actual.code, "E"); + assert.equal(actual.raw, + '{"v":"KERI10JSON00010f_","t":"vcp","d":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","i":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":[],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}'); + assert.equal(actual.size, 271); + }); + + it('should allow optional toad and backers', async () => { + await libsodium.ready; + let actual = vdr.incept({ pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s", baks: ["a backer"]}); + + assert.equal(actual.pre, "ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou"); + assert.equal(actual.code, "E"); + assert.equal(actual.raw, + '{"v":"KERI10JSON000119_","t":"vcp","d":"ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou","i":"ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":["a backer"],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}'); + assert.equal(actual.size, 281); + }); +}); \ No newline at end of file From 2d78d37355df64fc43805321912247cbb02b0b72 Mon Sep 17 00:00:00 2001 From: Kevin Griffin Date: Fri, 29 Sep 2023 12:36:38 -0400 Subject: [PATCH 049/186] fixes create registry comments Signed-off-by: Kevin Griffin --- test/app/registry.test.ts | 2 +- test/core/vdring.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/app/registry.test.ts b/test/app/registry.test.ts index 6cef4666..c430e12d 100644 --- a/test/app/registry.test.ts +++ b/test/app/registry.test.ts @@ -55,4 +55,4 @@ describe('registry', () => { message: 'establishment only not implemented', }); }); -}) \ No newline at end of file +}); diff --git a/test/core/vdring.test.ts b/test/core/vdring.test.ts index 38cc1353..388377d9 100644 --- a/test/core/vdring.test.ts +++ b/test/core/vdring.test.ts @@ -92,4 +92,4 @@ describe('vdr', () => { '{"v":"KERI10JSON000119_","t":"vcp","d":"ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou","i":"ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":["a backer"],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}'); assert.equal(actual.size, 281); }); -}); \ No newline at end of file +}); From bd5989d8d8c16de47da27f8a3f92bbc87a537f16 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Mon, 2 Oct 2023 17:33:55 -0300 Subject: [PATCH 050/186] update challenge --- examples/integration-scripts/challenge.ts | 26 ++++--- .../integration-scripts/package-lock.json | 1 + src/keri/app/contacting.ts | 72 ++++++------------- test/app/contacting.test.ts | 18 +++-- 4 files changed, 44 insertions(+), 73 deletions(-) diff --git a/examples/integration-scripts/challenge.ts b/examples/integration-scripts/challenge.ts index b8398d42..0f109fbb 100644 --- a/examples/integration-scripts/challenge.ts +++ b/examples/integration-scripts/challenge.ts @@ -1,5 +1,5 @@ import { strict as assert } from "assert" -import signify from "signify-ts" +import signify,{Serder} from "signify-ts" const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" @@ -80,29 +80,27 @@ async function run() { // List Client 1 contacts let contacts1 = await client1.contacts().list() - assert.equal(contacts1.length,1) assert.equal(contacts1[0].alias,'bob') // Bob responds to Alice challenge await client2.challenges().respond('bob', aid1.i, challenge1_small.words) console.log("Bob responded to Alice challenge with signed words") - // Alice check response, compare challenge words and accept the challenge - let challenge_received = false - let contacts:any = [] - while (!challenge_received) { - contacts = await client1.contacts().list(undefined, undefined, undefined) - if (contacts[0].challenges.length > 0 ){ - assert.equal(JSON.stringify(contacts[0].challenges[0].words), JSON.stringify(challenge1_small.words)) - challenge_received = true - } - await new Promise(resolve => setTimeout(resolve, 1000)); // sleep for 1 second + // Alice verifies Bob's response + op1 = await client1.challenges().verify('alice', aid2.i, challenge1_small.words) + while (!op1["done"]) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); } - await client1.challenges().accept('alice', aid2.i, contacts[0].challenges[0].said) + console.log("Alice verified challenge response") + //Alice mark response as accepted + let exn = new Serder(op1.response.exn) + op1 = await client1.challenges().responded('alice', aid2.i, exn.ked.d) + console.log("Alice marked challenge response as accepted") + // Check Bob's challenge in conctats contacts1 = await client1.contacts().list() - assert.equal(contacts1[0].challenges[0].authenticated, true) console.log("Challenge authenticated") } \ No newline at end of file diff --git a/examples/integration-scripts/package-lock.json b/examples/integration-scripts/package-lock.json index 287da06d..0bb18ad0 100644 --- a/examples/integration-scripts/package-lock.json +++ b/examples/integration-scripts/package-lock.json @@ -54,6 +54,7 @@ "minami": "^1.2.3", "size-limit": "^5.0.4", "ts-migrate": "^0.1.23", + "ts-mockito": "^2.6.1", "tsdx": "^0.14.1", "tslib": "^2.3.1", "typedoc": "^0.24.8", diff --git a/src/keri/app/contacting.ts b/src/keri/app/contacting.ts index b4f67586..0ad627e7 100644 --- a/src/keri/app/contacting.ts +++ b/src/keri/app/contacting.ts @@ -1,10 +1,4 @@ import { SignifyClient } from "./clienting" -import { messagize} from "../core/eventing" -import {b, Ident, Ilks, Serials, versify} from "../core/core" -import {Saider} from "../core/saider" -import {Serder} from "../core/serder" -import {Siger} from "../core/siger" -import {TextDecoder} from "util" /** * Contacts @@ -139,65 +133,45 @@ export class Challenges { * @returns {Promise} A promise to the result of the response */ async respond(name: string, recipient: string, words: string[]): Promise { - let path = `/challenges/${name}` - let method = 'POST' let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix + let exchanges = this.client.exchanges() + let resp = await exchanges.send(name, "challenge", hab, "/challenge/response", {words: words},{},[recipient]) + return resp + } + + /** + * Ask Agent to verify a given sender signed the provided words + * @param {string} name Name or alias of the identifier + * @param {string} source Prefix of the identifier that was challenged + * @param {Array} words List of challenge words to check for + * @returns {Promise} A promise to the result + */ + async verify(name: string, source: string, words: string[]): Promise { + let path = `/challenges/${name}/verify/${source}` + let method = 'POST' let data = { - i: pre, words: words } + let res = await this.client.fetch(path, method, data) - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) - - const _sad = { - v: vs, - t: Ilks.exn, - d: "", - dt: new Date().toISOString().replace("Z","000+00:00"), - r: "/challenge/response", - q: {}, - a: data - } - const [, sad] = Saider.saidify(_sad) - const exn = new Serder(sad) - - let keeper = this.client!.manager!.get(hab) - - let sig = keeper.sign(b(exn.raw),true) - - let siger = new Siger({qb64:sig[0]}) - let seal = ["SealLast" , {i:pre}] - let ims = messagize(exn,[siger],seal, undefined, undefined, true) - ims = ims.slice(JSON.stringify(exn.ked).length) - - let jsondata = { - recipient: recipient, - words: words, - exn: exn.ked, - sig: new TextDecoder().decode(ims) - } - - return await this.client.fetch(path, method, jsondata) + return await res.json() } /** - * Accept a challenge response as valid (list of words are correct) + * Mark challenge response as signed and accepted * @param {string} name Name or alias of the identifier - * @param {string} pre Prefix of the identifier that was challenged - * @param {string} said SAID of the challenge response message - * @returns {Promise} A promise to the result of the response + * @param {string} source Prefix of the identifier that was challenged + * @param {string} said qb64 AID of exn message representing the signed response + * @returns {Promise} A promise to the result */ - async accept(name: string, pre: string, said: string): Promise { - let path = `/challenges/${name}` + async responded(name:string, source:string, said:string): Promise { + let path = `/challenges/${name}/verify/${source}` let method = 'PUT' let data = { - aid: pre, said: said } let res = await this.client.fetch(path, method, data) - return res } } diff --git a/test/app/contacting.test.ts b/test/app/contacting.test.ts index d675cbde..5f6b2d79 100644 --- a/test/app/contacting.test.ts +++ b/test/app/contacting.test.ts @@ -181,23 +181,21 @@ describe('Contacting', () => { const words = ["shell", "gloom", "mimic", "cereal", "stool", "furnace", "nominee", "nation", "sauce", "sausage", "rather", "venue"] await challenges.respond("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p",words) lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/challenges/aid1') + assert.equal(lastCall[0]!,url+'/identifiers/aid1/exchanges') assert.equal(lastCall[1]!.method,'POST') let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.deepEqual(lastBody.words,words) - assert.equal(lastBody.recipient,"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p") + assert.equal(lastBody.tpc,"challenge") assert.equal(lastBody.exn.r,"/challenge/response") - assert.equal(lastBody.exn.a.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") + assert.equal(lastBody.exn.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") assert.deepEqual(lastBody.exn.a.words,words) - assert.equal(lastBody.sig.length,144) + assert.equal(lastBody.sigs[0].length,88) - await challenges.accept("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p","EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + await challenges.verify("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p",words) lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/challenges/aid1') - assert.equal(lastCall[1]!.method,'PUT') + assert.equal(lastCall[0]!,url+'/challenges/aid1/verify/EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p') + assert.equal(lastCall[1]!.method,'POST') lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastBody.aid,"EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p") - assert.equal(lastBody.said,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + assert.deepEqual(lastBody.words,words) }) From 1265d263807009f9dc606a71e2bb22b5c772e3e7 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Mon, 2 Oct 2023 18:26:03 -0300 Subject: [PATCH 051/186] add challenge to multisig --- examples/integration-scripts/multisig.ts | 37 ++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index 574242a2..354c000f 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -1,5 +1,5 @@ import { strict as assert } from "assert" -import signify from "signify-ts" +import signify, {Serder} from "signify-ts" const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" @@ -119,7 +119,40 @@ async function run() { await new Promise(resolve => setTimeout(resolve, 1000)); } console.log("Member3 resolved 2 OOBIs") - + + // First member challenge the other members with a random list of words + // List of words should be passed to the other members out of band + // The other members should do the same challenge/response flow, not shown here for brevity + const words = (await client1.challenges().generate(128)).words + console.log("Member1 generated challenge words:", words) + + await client2.challenges().respond('member2', aid1.prefix, words) + console.log("Member2 responded challenge with signed words") + + await client3.challenges().respond('member3', aid1.prefix, words) + console.log("Member3 responded challenge with signed words") + + op1 = await client1.challenges().verify('member1', aid2.prefix, words) + while (!op1["done"]) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + console.log("Member1 verified challenge response from member2") + let exnwords = new Serder(op1.response.exn) + op1 = await client1.challenges().responded('member1', aid2.prefix, exnwords.ked.d) + console.log("Member1 marked challenge response as accepted") + + + op1 = await client1.challenges().verify('member1', aid3.prefix, words) + while (!op1["done"]) { + op1 = await client1.operations().get(op1.name); + await new Promise(resolve => setTimeout(resolve, 1000)); + } + console.log("Member1 verified challenge response from member3") + exnwords = new Serder(op1.response.exn) + op1 = await client1.challenges().responded('member1', aid3.prefix, exnwords.ked.d) + console.log("Member1 marked challenge response as accepted") + // First member start the creation of a multisig identifier let rstates = [aid1["state"], aid2["state"], aid3["state"]] let states = rstates From c2a066daf5abc0864ddd09f37ace5a0ca13158f3 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Mon, 2 Oct 2023 18:32:24 -0300 Subject: [PATCH 052/186] test coverage --- test/app/contacting.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/app/contacting.test.ts b/test/app/contacting.test.ts index 5f6b2d79..4ed3db68 100644 --- a/test/app/contacting.test.ts +++ b/test/app/contacting.test.ts @@ -197,6 +197,13 @@ describe('Contacting', () => { lastBody = JSON.parse(lastCall[1]!.body!.toString()) assert.deepEqual(lastBody.words,words) + await challenges.responded("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p","EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! + assert.equal(lastCall[0]!,url+'/challenges/aid1/verify/EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p') + assert.equal(lastCall[1]!.method,'PUT') + lastBody = JSON.parse(lastCall[1]!.body!.toString()) + assert.equal(lastBody.said,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") + }) From cf0cf816cc6f5bb86506b106e41ef36a5e6f727d Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 23 Sep 2023 08:21:11 -0300 Subject: [PATCH 053/186] extern modules --- .../bip39_shim/package.json | 19 +++ .../bip39_shim/src/bip39_shim.ts | 128 ++++++++++++++++++ .../bip39_shim/tsconfig.json | 0 .../bip39_shim/tsconfig.node.json | 0 .../integration-scripts/externalModule.ts | 28 ++++ src/keri/app/clienting.ts | 9 +- src/keri/core/keeping.ts | 26 +++- src/keri/core/manager.ts | 3 +- 8 files changed, 206 insertions(+), 7 deletions(-) create mode 100644 examples/integration-scripts/bip39_shim/package.json create mode 100644 examples/integration-scripts/bip39_shim/src/bip39_shim.ts create mode 100644 examples/integration-scripts/bip39_shim/tsconfig.json create mode 100644 examples/integration-scripts/bip39_shim/tsconfig.node.json create mode 100644 examples/integration-scripts/externalModule.ts diff --git a/examples/integration-scripts/bip39_shim/package.json b/examples/integration-scripts/bip39_shim/package.json new file mode 100644 index 00000000..b8924452 --- /dev/null +++ b/examples/integration-scripts/bip39_shim/package.json @@ -0,0 +1,19 @@ +{ + "name": "bip39_shim", + "type": "module", + "private": true, + "version": "0.0.1", + "scripts": { + }, + "dependencies": { + "signify-ts": "file:../../../" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2" + } + } \ No newline at end of file diff --git a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts new file mode 100644 index 00000000..93b3d895 --- /dev/null +++ b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts @@ -0,0 +1,128 @@ +import bip39 from 'bip39-light' +import { Diger, Signer, Verfer } from 'signify-ts'; + + + + +export class BIP39Shim { + + private icount:number + private ncount:number + private dcode:string | undefined + private pidx: number + private kidx: number + private transferable:boolean + private stem: string + private mnemonics: string[] + private signer: Signer + + constructor(pidx, kargs ) { + this.icount = kargs.icount + this.ncount = kargs.ncount + this.pidx = pidx + this.kidx = kargs.kidx + this.transferable = kargs.transferable + this.stem = kargs.stem + this.mnemonics = kargs.mnemonics + + const seed = bip39.mnemonicToEntropy(this.mnemonics); + this.signer = new Signer({raw: seed, code: this.dcode, transferable: this.transferable}) + + } + + params(){ + return { + pidx: this.pidx, + kidx: this.kidx, + mnemonics: this.mnemonics + } + } + + keys(count, kidx, transferable){ + let keys = [] + for (let idx in range(count)){ + let keyId = `${this.stem}-${this.pidx}-${kidx + idx}` + verkey = bip39 aldo + verfer = new Verfer(verkey, + coring.MtrDex.Ed25519 if transferable + else coring.MtrDex.Ed25519N) + keys.push(verfer.qb64) + } + return keys + } + + + incept(transferable:boolean){ + this.transferable = transferable + + let signers = this.creator.create(this.icodes, this.count, this.code, this.transferable) + + let verfers = signers.signers.map(signer => signer.verfer.qb64); + + let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable) + + + let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); + + return [verfers, digers] + } + + rotate(){ + this.ncodes = ncodes + this.transferable = transferable + this.prxs = this.nxts + + let signers = this.nxts!.map(nxt => this.decrypter.decrypt(undefined, new Cipher({qb64:nxt}), this.transferable)) + let verfers = signers.map(signer => signer.verfer.qb64) + let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable) + + this.nxts = nsigners.signers.map(signer => this.encrypter.encrypt(undefined, signer).qb64); + + let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); + + return [verfers, digers] + } + + sign(ser: Uint8Array, indexed=true, indices:number[]|undefined=undefined, ondices:number[]|undefined=undefined){ + // let signers = this.prxs!.map(prx => this.decrypter.decrypt(new Cipher({qb64:prx}).qb64b, undefined, this.transferable)) + let signers = [] + + if (indexed){ + let sigers = [] + let i = 0 + for (const [j, signer] of signers.entries()) { + if (indices!= undefined){ + i = indices![j] + if (typeof i != "number" || i < 0){ + throw new Error(`Invalid signing index = ${i}, not whole number.`) + } + } else { + i = j + } + let o = 0 + if (ondices!=undefined){ + o = ondices![j] + if ((o == undefined || typeof o == "number" && typeof o != "number" && o>=0)!) { + throw new Error(`Invalid ondex = ${o}, not whole number.`) + } + } else { + o = i + } + sigers.push(signer.sign(ser, i, o==undefined?true:false, o)) + } + return sigers.map(siger => siger.qb64); + } else { + let cigars = [] + for (const [_, signer] of signers.entries()) { + cigars.push(signer.sign(ser)) + } + return cigars.map(cigar => cigar.qb64); + } + + } + + generateMnemonic(strength){ + return bip39.generateMnemonic(strength) + } + +} \ No newline at end of file diff --git a/examples/integration-scripts/bip39_shim/tsconfig.json b/examples/integration-scripts/bip39_shim/tsconfig.json new file mode 100644 index 00000000..e69de29b diff --git a/examples/integration-scripts/bip39_shim/tsconfig.node.json b/examples/integration-scripts/bip39_shim/tsconfig.node.json new file mode 100644 index 00000000..e69de29b diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts new file mode 100644 index 00000000..4d32ce2e --- /dev/null +++ b/examples/integration-scripts/externalModule.ts @@ -0,0 +1,28 @@ +import { strict as assert } from "assert" +import signify from "signify-ts" + +const url = "http://127.0.0.1:3901" +const boot_url = "http://127.0.0.1:3903" + +await run() + +async function run() { + await signify.ready() + // Boot client + const bran1 = signify.randomPasscode() + const externalModule:ExternalModule = { + type: "bip39", + name: "bip39", + params: [] + } + const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url,externalModule); + await client1.boot() + await client1.connect() + const state1 = await client1.state() + console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) + let words = ["asd", "asd", "asds"] + let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39", extern:{mnemonics: words}}) + let op = await icpResult.op() + assert.equal(op['done'], true) + let aid = op['response'] +} \ No newline at end of file diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 1fb3bd99..d36bc38d 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -1,7 +1,7 @@ import { Agent, Controller } from "./controller" import { Tier } from "../core/salter" import { Authenticater } from "../core/authing" -import { KeyManager } from "../core/keeping" +import { ExternalModule, KeyManager } from "../core/keeping" import { Identifier } from "./aiding" import { Contacts, Challenges } from "./contacting" @@ -39,6 +39,7 @@ export class SignifyClient { public manager: KeyManager | null public tier: Tier public bootUrl: string + public exteralModules: ExternalModule[] /** * SignifyClient constructor @@ -46,8 +47,9 @@ export class SignifyClient { * @param {string} bran Base64 21 char string that is used as base material for seed of the client AID * @param {Tier} tier Security tier for generating keys of the client AID (high | mewdium | low) * @param {string} bootUrl KERIA boot interface URL + * @param {ExternalModule[]} externalModules list of external modules to load */ - constructor(url: string, bran: string, tier: Tier = Tier.low, bootUrl: string = DEFAULT_BOOT_URL) { + constructor(url: string, bran: string, tier: Tier = Tier.low, bootUrl: string = DEFAULT_BOOT_URL, externalModules:ExternalModule[]=[]) { this.url = url if (bran.length < 21) { throw Error("bran must be 21 characters") @@ -60,6 +62,7 @@ export class SignifyClient { this.manager = null this.tier = tier this.bootUrl = bootUrl + this.exteralModules = externalModules } get data() { @@ -130,7 +133,7 @@ export class SignifyClient { if (this.controller.serder.ked.s == 0) { await this.approveDelegation() } - this.manager = new KeyManager(this.controller.salter, null) + this.manager = new KeyManager(this.controller.salter, this.exteralModules) this.authn = new Authenticater(this.controller.signer, this.agent.verfer!) } diff --git a/src/keri/core/keeping.ts b/src/keri/core/keeping.ts index 78cefe83..6e4f7c2b 100644 --- a/src/keri/core/keeping.ts +++ b/src/keri/core/keeping.ts @@ -14,14 +14,26 @@ import { Cigar } from './cigar'; export {}; +/** External module definition */ +export interface ExternalModule { + type: string, + name: string, + params: any[], +} + export class KeyManager { private salter?: Salter - // private externalModulees?: any + private modules?: any - constructor(salter: Salter, _externalModules: any = undefined ) { + constructor(salter: Salter, externalModules: ExternalModule[] = [] ) { this.salter = salter - // this.externalModulees = _externalModules + this.modules = [] + externalModules.forEach((module) => { + let pkg = require(module.name) + let mod = new pkg(module.params) + this.modules[module.type] = mod + }) } new(algo: Algos, pidx: number, kargs: any){ @@ -32,6 +44,14 @@ export class KeyManager { return new RandyKeeper(this.salter!, kargs["code"], kargs["count"], kargs["icodes"], kargs["transferable"], kargs["ncode"], kargs["ncount"], kargs["ncodes"], kargs["dcode"], kargs["prxs"], kargs["nxts"]) case Algos.group: return new GroupKeeper(this, kargs["mhab"], kargs["states"], kargs["rstates"],kargs["keys"],kargs["ndigs"]) + case Algos.extern: + let typ = kargs.extern_type + if ( !this.modules.contains(typ)) { + throw new Error(`unsupported external module type ${typ}`) + } else { + let mod = this.modules[typ] + return new mod(pidx,kargs.extern) + } default: throw new Error('Unknown algo') } diff --git a/src/keri/core/manager.ts b/src/keri/core/manager.ts index 9a75b25c..6a0a1c95 100644 --- a/src/keri/core/manager.ts +++ b/src/keri/core/manager.ts @@ -13,7 +13,8 @@ import {b} from "./core"; export enum Algos { randy = "randy", salty = "salty", - group = "group" + group = "group", + extern = "extern" } class PubLot { From 961587793dcfa1c1996b4529114104d017f9afac Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 23 Sep 2023 15:29:49 -0300 Subject: [PATCH 054/186] bip39_shim --- .../bip39_shim/package-lock.json | 1846 +++++++++++++++++ .../bip39_shim/package.json | 21 +- .../bip39_shim/src/bip39_shim.ts | 87 +- .../bip39_shim/tsconfig.json | 25 + .../bip39_shim/tsconfig.node.json | 11 + .../integration-scripts/externalModule.ts | 17 +- .../integration-scripts/package-lock.json | 19 + src/keri/app/aiding.ts | 10 +- src/keri/core/keeping.ts | 16 +- 9 files changed, 1974 insertions(+), 78 deletions(-) create mode 100644 examples/integration-scripts/bip39_shim/package-lock.json diff --git a/examples/integration-scripts/bip39_shim/package-lock.json b/examples/integration-scripts/bip39_shim/package-lock.json new file mode 100644 index 00000000..2a5b45bd --- /dev/null +++ b/examples/integration-scripts/bip39_shim/package-lock.json @@ -0,0 +1,1846 @@ +{ + "name": "bip39_shim", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "bip39_shim", + "version": "0.0.1", + "dependencies": { + "bip39": "^3.1.0", + "bip39-light": "^1.0.7", + "signify-ts": "file:../../../" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2" + } + }, + "../../..": { + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "@types/libsodium-wrappers-sumo": "^0.7.5", + "blake3": "^2.1.7", + "buffer": "^6.0.3", + "cbor": "^8.0.0", + "collections": "^5.1.12", + "jest-fetch-mock": "^3.0.3", + "libsodium-wrappers-sumo": "^0.7.9", + "lodash": "^4.17.21", + "mathjs": "^11.8.2", + "msgpack5": "^5.3.2", + "structured-headers": "^0.5.0", + "text-encoding": "^0.7.0", + "ts-node": "^10.9.1", + "urlsafe-base64": "^1.0.0", + "whatwg-fetch": "^3.6.17", + "xregexp": "^5.1.0" + }, + "devDependencies": { + "@mermaid-js/mermaid-cli": "^10.3.0", + "@size-limit/preset-small-lib": "^5.0.4", + "@types/lodash": "^4.14.185", + "@types/node": "^18.11.18", + "@types/text-encoding": "^0.0.36", + "@types/urlsafe-base64": "^1.0.28", + "husky": "^7.0.2", + "jest": "^29.3.1", + "jsdoc": "^4.0.2", + "minami": "^1.2.3", + "size-limit": "^5.0.4", + "ts-migrate": "^0.1.23", + "tsdx": "^0.14.1", + "tslib": "^2.3.1", + "typedoc": "^0.24.8", + "typescript": "^4.9.4" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bip39": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", + "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", + "dependencies": { + "@noble/hashes": "^1.2.0" + } + }, + "node_modules/bip39-light": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", + "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", + "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signify-ts": { + "resolved": "../../..", + "link": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/examples/integration-scripts/bip39_shim/package.json b/examples/integration-scripts/bip39_shim/package.json index b8924452..c556ee30 100644 --- a/examples/integration-scripts/bip39_shim/package.json +++ b/examples/integration-scripts/bip39_shim/package.json @@ -3,17 +3,18 @@ "type": "module", "private": true, "version": "0.0.1", - "scripts": { - }, + "scripts": {}, "dependencies": { - "signify-ts": "file:../../../" + "bip39": "^3.1.0", + "bip39-light": "^1.0.7", + "signify-ts": "file:../../../" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2" + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2" } - } \ No newline at end of file +} diff --git a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts index 93b3d895..9aff6891 100644 --- a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts +++ b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts @@ -1,5 +1,5 @@ -import bip39 from 'bip39-light' -import { Diger, Signer, Verfer } from 'signify-ts'; +import bip39 from 'bip39' +import { Diger, Signer, MtrDex} from 'signify-ts'; @@ -9,25 +9,24 @@ export class BIP39Shim { private icount:number private ncount:number private dcode:string | undefined - private pidx: number - private kidx: number + private pidx: number = 0 + private kidx: number = 0 private transferable:boolean - private stem: string - private mnemonics: string[] - private signer: Signer + private stem: string + private mnemonics: string = "" - constructor(pidx, kargs ) { - this.icount = kargs.icount - this.ncount = kargs.ncount + constructor(pidx:number, kargs:any ) { + console.log(kargs) + this.icount = kargs.icount??1 + this.ncount = kargs.ncount??1 this.pidx = pidx - this.kidx = kargs.kidx - this.transferable = kargs.transferable - this.stem = kargs.stem - this.mnemonics = kargs.mnemonics - - const seed = bip39.mnemonicToEntropy(this.mnemonics); - this.signer = new Signer({raw: seed, code: this.dcode, transferable: this.transferable}) - + this.kidx = kargs.kidx??0 + this.transferable = kargs.transferable??true + this.stem = kargs.stem?? "bip39_shim" + if (kargs.extern != undefined && kargs.extern.mnemonics != undefined){ + this.mnemonics = kargs.extern.mnemonics + } + this.dcode = kargs.dcode } params(){ @@ -38,54 +37,44 @@ export class BIP39Shim { } } - keys(count, kidx, transferable){ + keys(count:number, kidx:number, transferable:boolean){ let keys = [] - for (let idx in range(count)){ + for (let idx = 0; idx < count; idx++) { let keyId = `${this.stem}-${this.pidx}-${kidx + idx}` - verkey = bip39 aldo - verfer = new Verfer(verkey, - coring.MtrDex.Ed25519 if transferable - else coring.MtrDex.Ed25519N) - keys.push(verfer.qb64) + let seed = bip39.mnemonicToSeedSync(this.mnemonics, keyId); + let signer = new Signer({raw: new Uint8Array(seed), code: MtrDex.Ed25519_Seed, transferable: transferable}) + keys.push(signer) } return keys } - incept(transferable:boolean){ - this.transferable = transferable - - let signers = this.creator.create(this.icodes, this.count, this.code, this.transferable) - let verfers = signers.signers.map(signer => signer.verfer.qb64); - - let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable) + let signers = this.keys(this.icount, this.kidx, transferable) + let verfers = signers.map(signer => signer.verfer.qb64); - - let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); - + let nsigners = this.keys(this.ncount, this.kidx + this.icount, transferable) + let digers = nsigners.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); return [verfers, digers] } - rotate(){ - this.ncodes = ncodes - this.transferable = transferable - this.prxs = this.nxts - - let signers = this.nxts!.map(nxt => this.decrypter.decrypt(undefined, new Cipher({qb64:nxt}), this.transferable)) - let verfers = signers.map(signer => signer.verfer.qb64) - let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable) - - this.nxts = nsigners.signers.map(signer => this.encrypter.encrypt(undefined, signer).qb64); + rotate(ncount:number, transferable:boolean){ + let signers = this.keys(this.ncount, this.kidx + this.icount, transferable) + let verfers = signers.map(signer => signer.verfer.qb64); + + this.kidx = this.kidx + this.icount + this.icount = this.ncount + this.ncount = ncount - let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); + let nsigners = this.keys(this.ncount, this.kidx + this.icount, this.transferable) + let digers = nsigners.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); return [verfers, digers] } sign(ser: Uint8Array, indexed=true, indices:number[]|undefined=undefined, ondices:number[]|undefined=undefined){ - // let signers = this.prxs!.map(prx => this.decrypter.decrypt(new Cipher({qb64:prx}).qb64b, undefined, this.transferable)) - let signers = [] + + let signers = this.keys(this.icount, this.kidx, this.transferable) if (indexed){ let sigers = [] @@ -121,7 +110,7 @@ export class BIP39Shim { } - generateMnemonic(strength){ + generateMnemonic(strength:number){ return bip39.generateMnemonic(strength) } diff --git a/examples/integration-scripts/bip39_shim/tsconfig.json b/examples/integration-scripts/bip39_shim/tsconfig.json index e69de29b..4b4e8fa4 100644 --- a/examples/integration-scripts/bip39_shim/tsconfig.json +++ b/examples/integration-scripts/bip39_shim/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] + } + \ No newline at end of file diff --git a/examples/integration-scripts/bip39_shim/tsconfig.node.json b/examples/integration-scripts/bip39_shim/tsconfig.node.json index e69de29b..bdc58063 100644 --- a/examples/integration-scripts/bip39_shim/tsconfig.node.json +++ b/examples/integration-scripts/bip39_shim/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + } + } + \ No newline at end of file diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts index 4d32ce2e..e4dea27e 100644 --- a/examples/integration-scripts/externalModule.ts +++ b/examples/integration-scripts/externalModule.ts @@ -1,5 +1,6 @@ import { strict as assert } from "assert" import signify from "signify-ts" +import {BIP39Shim} from './bip39_shim/src/bip39_shim.ts' const url = "http://127.0.0.1:3901" const boot_url = "http://127.0.0.1:3903" @@ -8,21 +9,21 @@ await run() async function run() { await signify.ready() - // Boot client const bran1 = signify.randomPasscode() - const externalModule:ExternalModule = { - type: "bip39", - name: "bip39", - params: [] + const externalModule:signify.ExternalModule = { + type: "bip39_shim", + name: "bip39_shim", + module: BIP39Shim } - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url,externalModule); + const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url,[externalModule]); await client1.boot() await client1.connect() const state1 = await client1.state() console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - let words = ["asd", "asd", "asds"] - let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39", extern:{mnemonics: words}}) + let words = new BIP39Shim(0,{}).generateMnemonic(256) + let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39_shim", extern:{mnemonics: words}}) let op = await icpResult.op() assert.equal(op['done'], true) let aid = op['response'] + console.log(aid) } \ No newline at end of file diff --git a/examples/integration-scripts/package-lock.json b/examples/integration-scripts/package-lock.json index 0bb18ad0..55c1e052 100644 --- a/examples/integration-scripts/package-lock.json +++ b/examples/integration-scripts/package-lock.json @@ -61,6 +61,25 @@ "typescript": "^4.9.4" } }, + "bip39_shim": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "bip39-light": "^1.0.7", + "signify-ts": "file:../../../" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2" + } + }, + "bip39_shim/src/bip39_shim": { + "extraneous": true + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index b1597fe3..a1938514 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -31,7 +31,9 @@ export interface CreateIdentiferArgs { bran?: string, count?: number, ncount?: number, - tier?: Tier + tier?: Tier, + extern_type?: string, + extern?: any } /** Arguments required to rotate an identfier */ @@ -134,6 +136,8 @@ export class Identifier { let count = kargs.count let ncount = kargs.ncount let tier = kargs.tier + let extern_type = kargs.extern_type + let extern = kargs.extern let xargs = { transferable: transferable, @@ -157,7 +161,9 @@ export class Identifier { bran: bran, count: count, ncount: ncount, - tier: tier + tier: tier, + extern_type: extern_type, + extern: extern } let keeper = this.client.manager!.new(algo, this.client.pidx, xargs) diff --git a/src/keri/core/keeping.ts b/src/keri/core/keeping.ts index 6e4f7c2b..ae218f4f 100644 --- a/src/keri/core/keeping.ts +++ b/src/keri/core/keeping.ts @@ -18,7 +18,7 @@ export {}; export interface ExternalModule { type: string, name: string, - params: any[], + module: any, } export class KeyManager { @@ -29,10 +29,8 @@ export class KeyManager { this.salter = salter this.modules = [] - externalModules.forEach((module) => { - let pkg = require(module.name) - let mod = new pkg(module.params) - this.modules[module.type] = mod + externalModules.forEach((mod) => { + this.modules[mod.type] = mod.module }) } @@ -46,11 +44,11 @@ export class KeyManager { return new GroupKeeper(this, kargs["mhab"], kargs["states"], kargs["rstates"],kargs["keys"],kargs["ndigs"]) case Algos.extern: let typ = kargs.extern_type - if ( !this.modules.contains(typ)) { - throw new Error(`unsupported external module type ${typ}`) + if ( typ in this.modules) { + let mod = new this.modules[typ](pidx,kargs) + return mod } else { - let mod = this.modules[typ] - return new mod(pidx,kargs.extern) + throw new Error(`unsupported external module type ${typ}`) } default: throw new Error('Unknown algo') From 5b0aff35c4c52af782170b6258db5acb03497280 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 23 Sep 2023 15:40:29 -0300 Subject: [PATCH 055/186] clean --- examples/integration-scripts/bip39_shim/src/bip39_shim.ts | 4 ---- examples/integration-scripts/bip39_shim/tsconfig.json | 1 - examples/integration-scripts/externalModule.ts | 2 -- examples/integration-scripts/tsconfig.node.json | 7 +++++-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts index 9aff6891..f4524ee0 100644 --- a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts +++ b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts @@ -1,9 +1,6 @@ import bip39 from 'bip39' import { Diger, Signer, MtrDex} from 'signify-ts'; - - - export class BIP39Shim { private icount:number @@ -16,7 +13,6 @@ export class BIP39Shim { private mnemonics: string = "" constructor(pidx:number, kargs:any ) { - console.log(kargs) this.icount = kargs.icount??1 this.ncount = kargs.ncount??1 this.pidx = pidx diff --git a/examples/integration-scripts/bip39_shim/tsconfig.json b/examples/integration-scripts/bip39_shim/tsconfig.json index 4b4e8fa4..60003ca7 100644 --- a/examples/integration-scripts/bip39_shim/tsconfig.json +++ b/examples/integration-scripts/bip39_shim/tsconfig.json @@ -20,6 +20,5 @@ "noFallthroughCasesInSwitch": true }, "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] } \ No newline at end of file diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts index e4dea27e..07c128b9 100644 --- a/examples/integration-scripts/externalModule.ts +++ b/examples/integration-scripts/externalModule.ts @@ -24,6 +24,4 @@ async function run() { let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39_shim", extern:{mnemonics: words}}) let op = await icpResult.op() assert.equal(op['done'], true) - let aid = op['response'] - console.log(aid) } \ No newline at end of file diff --git a/examples/integration-scripts/tsconfig.node.json b/examples/integration-scripts/tsconfig.node.json index b1035cbd..f34049fe 100644 --- a/examples/integration-scripts/tsconfig.node.json +++ b/examples/integration-scripts/tsconfig.node.json @@ -5,6 +5,9 @@ "target": "ESNext", "module": "ESNext", "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true + "allowSyntheticDefaultImports": true, + "noEmit": true, + "emitDeclarationOnly": false, // added emitDeclarationOnly option + "allowImportingTsExtensions": true // moved this option to be used with noEmit or emitDeclarationOnly + } } -} From 57e705b2b2ccec76f7e929e257c7980a502ef223 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Tue, 3 Oct 2023 16:34:59 -0300 Subject: [PATCH 056/186] add async calls --- examples/integration-scripts/credentials.ts | 2 +- examples/integration-scripts/externalModule.ts | 2 +- examples/integration-scripts/multisig.ts | 12 ++++++------ examples/integration-scripts/randy.ts | 2 +- examples/integration-scripts/salty.ts | 4 ++-- src/keri/app/aiding.ts | 14 +++++++------- src/keri/app/credentialing.ts | 10 +++++----- src/keri/app/exchanging.ts | 6 +++--- src/keri/core/keeping.ts | 15 ++++++++++++--- 9 files changed, 38 insertions(+), 29 deletions(-) diff --git a/examples/integration-scripts/credentials.ts b/examples/integration-scripts/credentials.ts index ad28c718..76719b36 100644 --- a/examples/integration-scripts/credentials.ts +++ b/examples/integration-scripts/credentials.ts @@ -30,7 +30,7 @@ async function run() { // Create two identifiers, one for each client - let icpResult1 = client1.identifiers().create('issuer', { + let icpResult1 = await client1.identifiers().create('issuer', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts index 07c128b9..03c0e012 100644 --- a/examples/integration-scripts/externalModule.ts +++ b/examples/integration-scripts/externalModule.ts @@ -21,7 +21,7 @@ async function run() { const state1 = await client1.state() console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) let words = new BIP39Shim(0,{}).generateMnemonic(256) - let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39_shim", extern:{mnemonics: words}}) + let icpResult = await client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39_shim", extern:{mnemonics: words}}) let op = await icpResult.op() assert.equal(op['done'], true) } \ No newline at end of file diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index 354c000f..d30c94b9 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -30,7 +30,7 @@ async function run() { // Create three identifiers, one for each client - let icpResult1 = client1.identifiers().create('member1', { + let icpResult1 = await client1.identifiers().create('member1', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", @@ -46,7 +46,7 @@ async function run() { await client1.identifiers().addEndRole("member1", 'agent', client1!.agent!.pre) console.log("Member1's AID:", aid1.prefix) - let icpResult2 = client2.identifiers().create('member2', { + let icpResult2 = await client2.identifiers().create('member2', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", @@ -62,7 +62,7 @@ async function run() { await client2.identifiers().addEndRole("member2", 'agent', client2!.agent!.pre) console.log("Member2's AID:", aid2.prefix) - let icpResult3 = client3.identifiers().create('member3', { + let icpResult3 = await client3.identifiers().create('member3', { toad: 3, wits: [ "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", @@ -156,7 +156,7 @@ async function run() { // First member start the creation of a multisig identifier let rstates = [aid1["state"], aid2["state"], aid3["state"]] let states = rstates - icpResult1 = client1.identifiers().create("multisig",{ + icpResult1 = await client1.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid1, isith: 3, @@ -206,7 +206,7 @@ async function run() { let exn = res[0].exn let icp = exn.e.icp - icpResult2 = client2.identifiers().create("multisig",{ + icpResult2 = await client2.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid2, isith: icp.kt, @@ -252,7 +252,7 @@ async function run() { res = await client3.groups().getRequest(msgSaid) exn = res[0].exn icp = exn.e.icp - icpResult3 = client3.identifiers().create("multisig",{ + icpResult3 = await client3.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid3, isith: icp.kt, diff --git a/examples/integration-scripts/randy.ts b/examples/integration-scripts/randy.ts index caa1ad7a..103311fc 100644 --- a/examples/integration-scripts/randy.ts +++ b/examples/integration-scripts/randy.ts @@ -16,7 +16,7 @@ async function run() { const state1 = await client1.state() console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - let icpResult = client1.identifiers().create('aid1', {algo: signify.Algos.randy}) + let icpResult = await client1.identifiers().create('aid1', {algo: signify.Algos.randy}) let op = await icpResult.op() assert.equal(op['done'], true) let aid = op['response'] diff --git a/examples/integration-scripts/salty.ts b/examples/integration-scripts/salty.ts index 9a222489..09d8a7b5 100644 --- a/examples/integration-scripts/salty.ts +++ b/examples/integration-scripts/salty.ts @@ -16,7 +16,7 @@ async function run() { const state1 = await client1.state() console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - let icpResult = client1.identifiers().create('aid1', {bran: '0123456789abcdefghijk'}) + let icpResult = await client1.identifiers().create('aid1', {bran: '0123456789abcdefghijk'}) let op = await icpResult.op() assert.equal(op['done'], true) const aid1 = op['response'] @@ -37,7 +37,7 @@ async function run() { assert.equal(salt.stem, 'signify:aid') assert.equal(aid.prefix, icp.pre) - icpResult = client1.identifiers().create('aid2', {count:3, ncount:3, isith:"2", nsith:"2", bran:"0123456789lmnopqrstuv"}) + icpResult = await client1.identifiers().create('aid2', {count:3, ncount:3, isith:"2", nsith:"2", bran:"0123456789lmnopqrstuv"}) op = await icpResult.op() assert.equal(op['done'], true) const aid2 = op['response'] diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index a1938514..b8855ad2 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -111,7 +111,7 @@ export class Identifier { * @param {CreateIdentiferArgs} [kargs] Optional parameters to create the identifier * @returns {EventResult} The inception result */ - create(name: string, kargs:CreateIdentiferArgs={}): EventResult { + async create(name: string, kargs:CreateIdentiferArgs={}): Promise { const algo = kargs.algo == undefined ? Algos.salty : kargs.algo @@ -167,7 +167,7 @@ export class Identifier { } let keeper = this.client.manager!.new(algo, this.client.pidx, xargs) - let [keys, ndigs] = keeper!.incept(transferable) + let [keys, ndigs] = await keeper!.incept(transferable) wits = wits !== undefined ? wits : [] let serder: Serder|undefined = undefined if (delpre == undefined) { @@ -204,7 +204,7 @@ export class Identifier { }) } - let sigs = keeper!.sign(b(serder.raw)) + let sigs = await keeper!.sign(b(serder.raw)) var jsondata: any = { name: name, icp: serder.ked, @@ -240,7 +240,7 @@ export class Identifier { let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) let keeper = this.client!.manager!.get(hab) - let sigs = keeper.sign(b(serder.raw)) + let sigs = await keeper.sign(b(serder.raw)) let jsondata: any = { ixn: serder.ked, @@ -293,7 +293,7 @@ export class Identifier { let states = kargs.states == undefined? [] : kargs.states let rstates = kargs.rstates == undefined? [] : kargs.rstates - let [keys, ndigs] = keeper!.rotate(ncodes, transferable, states, rstates) + let [keys, ndigs] = await keeper!.rotate(ncodes, transferable, states, rstates) let cuts = kargs.cuts ?? [] let adds = kargs.adds ?? [] @@ -314,7 +314,7 @@ export class Identifier { data: data }) - let sigs = keeper.sign(b(serder.raw)) + let sigs = await keeper.sign(b(serder.raw)) var jsondata: any = { rot: serder.ked, @@ -345,7 +345,7 @@ export class Identifier { const rpy = this.makeEndRole(pre, role, eid, stamp) const keeper = this.client.manager!.get(hab) - const sigs = keeper.sign(b(rpy.raw)) + const sigs = await keeper.sign(b(rpy.raw)) const jsondata = { rpy: rpy.ked, diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index e5fdb687..c6c1f0e8 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -150,7 +150,7 @@ export class Credentials { // Create paths and sign let cpath = '6AABAAA-' let keeper = this.client!.manager!.get(hab) - let csigs = keeper.sign(b(JSON.stringify(vc))) + let csigs = await keeper.sign(b(JSON.stringify(vc))) // Create ixn let ixn = {} @@ -178,7 +178,7 @@ export class Credentials { } else { let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) - sigs = keeper.sign(b(serder.raw)) + sigs = await keeper.sign(b(serder.raw)) ixn = serder.ked } @@ -259,7 +259,7 @@ export class Credentials { } else { let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) let keeper = this.client!.manager!.get(hab) - sigs = keeper.sign(b(serder.raw)) + sigs = await keeper.sign(b(serder.raw)) ixn = serder.ked } @@ -379,7 +379,7 @@ export class Credentials { let keeper = this.client!.manager!.get(hab) - let sig = keeper.sign(b(exn.raw),true) + let sig = await keeper.sign(b(exn.raw),true) let siger = new Siger({qb64:sig[0]}) let seal = ["SealLast" , {i:pre}] @@ -511,7 +511,7 @@ export class Registries { let serder = interact({pre: pre, sn: sn + 1, data: data, dig: dig, version: Versionage, kind: Serials.JSON}) let keeper = this.client.manager!.get(hab) - let sigs = keeper.sign(b(serder.raw)) + let sigs = await keeper.sign(b(serder.raw)) let res = this.createFromEvents(hab, name, registryName, regser.ked, serder.ked, sigs) return new RegistryResult(regser, serder, sigs, res); } diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts index 56554534..3739a698 100644 --- a/src/keri/app/exchanging.ts +++ b/src/keri/app/exchanging.ts @@ -29,13 +29,13 @@ export class Exchanges { * @param payload * @param embeds */ - createExchangeMessage(sender: Dict, route: string, payload: Dict, embeds: Dict): [Serder, string[], string] { + async createExchangeMessage(sender: Dict, route: string, payload: Dict, embeds: Dict): Promise<[Serder, string[], string]> { let keeper = this.client.manager!.get(sender) let [exn, end] = exchange(route, payload, sender["prefix"], undefined, undefined, undefined, undefined, embeds) - let sigs = keeper.sign(b(exn.raw)) + let sigs = await keeper.sign(b(exn.raw)) return [exn, sigs, d(end)] } @@ -54,7 +54,7 @@ export class Exchanges { async send(name: string, topic: string, sender: Dict, route: string, payload: Dict, embeds: Dict, recipients: string[]): Promise { - let [exn, sigs, atc] = this.createExchangeMessage(sender, route, payload, embeds) + let [exn, sigs, atc] = await this.createExchangeMessage(sender, route, payload, embeds) return await this.sendFromEvents(name, topic, exn, sigs, atc, recipients) } diff --git a/src/keri/core/keeping.ts b/src/keri/core/keeping.ts index ae218f4f..e51192a3 100644 --- a/src/keri/core/keeping.ts +++ b/src/keri/core/keeping.ts @@ -66,7 +66,16 @@ export class KeyManager { } else if (Algos.group in aid) { let kargs = aid[Algos.group] return new GroupKeeper(this, kargs["mhab"], kargs["states"], kargs["rstates"],kargs["keys"],kargs["ndigs"]) - } else{ + } else if (Algos.extern in aid) { + let kargs = aid[Algos.randy] + let typ = kargs.extern_type + if ( typ in this.modules) { + let mod = new this.modules[typ](kargs["pidx"],kargs) + return mod + } else { + throw new Error(`unsupported external module type ${typ}`) + } + } else { throw new Error(`Algo not allowed yet`) } } @@ -403,7 +412,7 @@ export class RandyKeeper { this.gdigs = rstates.map(state => state['n'][0]) return [this.gkeys, this.gdigs] } - sign(ser:Uint8Array, indexed:boolean=true, _indices:number[]|undefined=undefined, _ondices:number[]|undefined=undefined):Siger[]|Cigar[]{ + async sign(ser:Uint8Array, indexed:boolean=true, _indices:number[]|undefined=undefined, _ondices:number[]|undefined=undefined):Promise{ let key = this.mhab['state']['k'][0] let ndig = this.mhab['state']['n'][0] @@ -411,7 +420,7 @@ export class RandyKeeper { let pni = this.gdigs!.indexOf(ndig) let mkeeper = this.manager.get(this.mhab) - return mkeeper.sign(ser, indexed, [csi], [pni]) + return await mkeeper.sign(ser, indexed, [csi], [pni]) } params(){ From fa2abbd002cc9144702c764e6daef26b0c9cd0b3 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 4 Oct 2023 12:31:08 -0300 Subject: [PATCH 057/186] secp256r1 --- package-lock.json | 25 ++++++++++++++++++------- package.json | 1 + src/keri/core/matter.ts | 25 ++++++++++++++++++------- src/keri/core/verfer.ts | 15 ++++++++++++++- 4 files changed, 51 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 996053ee..5aa100e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "buffer": "^6.0.3", "cbor": "^8.0.0", "collections": "^5.1.12", + "ecdsa-secp256r1": "^1.3.3", "jest-fetch-mock": "^3.0.3", "libsodium-wrappers-sumo": "^0.7.9", "lodash": "^4.17.21", @@ -4227,7 +4228,6 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -4238,8 +4238,7 @@ "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/assert": { "version": "1.5.1", @@ -6710,6 +6709,20 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/ecdsa-secp256r1": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/ecdsa-secp256r1/-/ecdsa-secp256r1-1.3.3.tgz", + "integrity": "sha512-7JkHQ43iv9vT1U9tyGuxcE4+SMF/da+YiIMRpcwmbHmJQmqfFUuT6c7LKMasJ9soEpwFL0b9JyNkRjQ+vjVgpQ==", + "dependencies": { + "asn1.js": "^5.0.1", + "bn.js": "^4.11.8" + } + }, + "node_modules/ecdsa-secp256r1/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/electron-to-chromium": { "version": "1.4.513", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz", @@ -13866,8 +13879,7 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", @@ -16915,8 +16927,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sane": { "version": "4.1.0", diff --git a/package.json b/package.json index 14fafc5d..3da5e202 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "buffer": "^6.0.3", "cbor": "^8.0.0", "collections": "^5.1.12", + "ecdsa-secp256r1": "^1.3.3", "jest-fetch-mock": "^3.0.3", "libsodium-wrappers-sumo": "^0.7.9", "lodash": "^4.17.21", diff --git a/src/keri/core/matter.ts b/src/keri/core/matter.ts index 052addd7..bd3f817d 100644 --- a/src/keri/core/matter.ts +++ b/src/keri/core/matter.ts @@ -18,17 +18,27 @@ export class MatterCodex extends Codex { X25519: string = 'C' // X25519 public encryption key, converted from Ed25519 or Ed25519N. Ed25519: string = 'D' // Ed25519 verification key basic derivation Blake3_256: string = 'E' // Blake3 256 bit digest self-addressing derivation. + SHA3_256: string = 'H' // SHA3 256 bit digest self-addressing derivation. + SHA2_256: string = 'I' // SHA2 256 bit digest self-addressing derivation. + ECDSA_256k1_Seed: string = 'J' // ECDSA secp256k1 256 bit random Seed for private key X25519_Private: string = 'O' // X25519 private decryption key converted from Ed25519 X25519_Cipher_Seed: string = 'P' // X25519 124 char b64 Cipher of 44 char qb64 Seed - X25519_Cipher_Salt: string = '1AAH' // X25519 100 char b64 Cipher of 24 char qb64 Salt + ECDSA_256r1_Seed: string = 'Q' // ECDSA secp256r1 256 bit random Seed for private key Salt_128: string = '0A' // 128 bit random salt or 128 bit number (see Huge) Ed25519_Sig: string = '0B' // Ed25519 signature. - StrB64_L0: string = '4A' //String Base64 Only Lead Size 0 - StrB64_L1: string = '5A' //String Base64 Only Lead Size 1 - StrB64_L2: string = '6A' //String Base64 Only Lead Size 2 - StrB64_Big_L0: string = '7AAA' //String Base64 Only Big Lead Size 0 - StrB64_Big_L1: string = '8AAA' //String Base64 Only Big Lead Size 1 - StrB64_Big_L2: string = '9AAA' //String Base64 Only Big Lead Size 2 + ECDSA_256k1_Sig: string = '0C' // ECDSA secp256k1 signature. + ECDSA_256r1_Sig: string = '0I' // ECDSA secp256r1 signature. + StrB64_L0: string = '4A' // String Base64 Only Lead Size 0 + StrB64_L1: string = '5A' // String Base64 Only Lead Size 1 + StrB64_L2: string = '6A' // String Base64 Only Lead Size 2 + ECDSA_256k1N: string = '1AAA' // ECDSA secp256k1 verification key non-transferable, basic derivation. + ECDSA_256k1: string = '1AAB' // ECDSA public verification or encryption key, basic derivation + X25519_Cipher_Salt: string = '1AAH' // X25519 100 char b64 Cipher of 24 char qb64 Salt + ECDSA_256r1N: string = '1AAI' // ECDSA secp256r1 verification key non-transferable, basic derivation. + ECDSA_256r1: string = '1AAJ' // ECDSA secp256r1 verification or encryption key, basic derivation + StrB64_Big_L0: string = '7AAA' // String Base64 Only Big Lead Size 0 + StrB64_Big_L1: string = '8AAA' // String Base64 Only Big Lead Size 1 + StrB64_Big_L2: string = '9AAA' // String Base64 Only Big Lead Size 2 } export const MtrDex = new MatterCodex() @@ -38,6 +48,7 @@ export class NonTransCodex extends Codex { Ed25519N: string = 'B' // Ed25519 verification key non-transferable, basic derivation. ECDSA_256k1N: string = '1AAA' // ECDSA secp256k1 verification key non-transferable, basic derivation. Ed448N: string = '1AAC' // Ed448 non-transferable prefix public signing verification key. Basic derivation. + ECDSA_256r1N: string = '1AAI' // ECDSA secp256r1 verification key non-transferable, basic derivation. } export const NonTransDex = new NonTransCodex() diff --git a/src/keri/core/verfer.ts b/src/keri/core/verfer.ts index f330df94..824339ef 100644 --- a/src/keri/core/verfer.ts +++ b/src/keri/core/verfer.ts @@ -1,8 +1,10 @@ export {}; import libsodium from "libsodium-wrappers-sumo" - import {Matter, MatterArgs, MtrDex} from './matter'; +// @ts-ignore +import secp256r1 from "ecdsa-secp256r1" + /** * @description Verfer :sublclass of Matter,helps to verify signature of serialization * using .raw as verifier key and .code as signature cypher suite @@ -14,6 +16,8 @@ export class Verfer extends Matter { if (Array.from([MtrDex.Ed25519N, MtrDex.Ed25519]).includes(this.code)) { this._verify = this._ed25519 + } else if (Array.from([MtrDex.ECDSA_256r1N, MtrDex.ECDSA_256r1]).includes(this.code)) { + this._verify = this._secp256r1 } else { throw new Error(`Unsupported code = ${this.code} for verifier.`) } @@ -31,4 +35,13 @@ export class Verfer extends Matter { throw new Error(error as string); } } + _secp256r1(sig: any, ser: any, key: any) { + try { + const publicKey = secp256r1.fromCompressedPublicKey(key) + return publicKey.verify(ser, sig) + + } catch (error) { + throw new Error(error as string); + } + } } From a93f343c82bae950645369636a687619a4c34295 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 4 Oct 2023 15:00:30 -0300 Subject: [PATCH 058/186] types --- src/keri/core/verfer.ts | 4 +--- types/index.d.ts | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 types/index.d.ts diff --git a/src/keri/core/verfer.ts b/src/keri/core/verfer.ts index 824339ef..f966d3c2 100644 --- a/src/keri/core/verfer.ts +++ b/src/keri/core/verfer.ts @@ -1,8 +1,6 @@ export {}; import libsodium from "libsodium-wrappers-sumo" -import {Matter, MatterArgs, MtrDex} from './matter'; - -// @ts-ignore +import {Matter, MatterArgs, MtrDex} from './matter' import secp256r1 from "ecdsa-secp256r1" /** diff --git a/types/index.d.ts b/types/index.d.ts new file mode 100644 index 00000000..33e1af77 --- /dev/null +++ b/types/index.d.ts @@ -0,0 +1 @@ +declare module 'ecdsa-secp256r1'; \ No newline at end of file From 6f1fb319c564e0063ddb5d652d43f0daf0032ba5 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 4 Oct 2023 16:31:45 -0300 Subject: [PATCH 059/186] test coverage --- test/core/verfer.test.ts | 41 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/test/core/verfer.test.ts b/test/core/verfer.test.ts index 682ab7b6..e1fad051 100644 --- a/test/core/verfer.test.ts +++ b/test/core/verfer.test.ts @@ -1,11 +1,18 @@ import {MtrDex} from "../../src/keri/core/matter"; - import libsodium from "libsodium-wrappers-sumo" - import {strict as assert} from "assert"; +import { Verfer } from '../../src/keri/core/verfer'; +import secp256r1 from "ecdsa-secp256r1" +function base64ToUint8Array(base64:string) { + var binaryString = atob(base64); + var bytes = new Uint8Array(binaryString.length); + for (var i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return new Uint8Array(bytes.buffer); +} -import { Verfer } from '../../src/keri/core/verfer'; describe('Verfer', () => { it('should verify digests', async () => { @@ -32,6 +39,34 @@ describe('Verfer', () => { assert.deepStrictEqual(verfer.raw, new Uint8Array([104, 21, 7, 144, 26, 175, 90, 78, 175, 189, 39, 70, 146, 102, 68, 15, 209, 63, 175, 7, 18, 183, 229, 54, 139, 232, 16, 195, 251, 111, 185, 137])) }); + it('should verify secp256r1', async () => { + await libsodium.ready; + // let seed = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); + // const keypair = libsodium.crypto_sign_seed_keypair(seed); + + const privateKey = secp256r1.generateKey() + const publicKey = base64ToUint8Array(privateKey.toCompressedPublicKey()) + let verfer = new Verfer({raw: publicKey, code: MtrDex.ECDSA_256r1}) + assert.notEqual(verfer, null) + + assert.deepStrictEqual(verfer.raw, publicKey); + assert.deepStrictEqual(verfer.code, MtrDex.ECDSA_256r1); + + let ser = 'abcdefghijklmnopqrstuvwxyz0123456789' + + let sig = privateKey.sign(ser) + + assert.equal(verfer.verify(sig, ser), true) + + verfer = new Verfer({qb64: "1AAJAwf0oSqmdjPud5gnK6bAPKkBLrXUMQZiOW4Vpc4XpOPf"}) + assert.deepStrictEqual(verfer.raw, new Uint8Array([ + 3, 7, 244, 161, 42, 166, 118, 51, + 238, 119, 152, 39, 43, 166, 192, 60, + 169, 1, 46, 181, 212, 49, 6, 98, + 57, 110, 21, 165, 206, 23, 164, 227, + 223 + ])) + }); }); From 53fdfbbf5b41d6dbb681ca9a32e3ee1aa11829ce Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 4 Oct 2023 17:10:02 -0300 Subject: [PATCH 060/186] test unsuported code --- test/core/verfer.test.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/test/core/verfer.test.ts b/test/core/verfer.test.ts index e1fad051..f5fabbff 100644 --- a/test/core/verfer.test.ts +++ b/test/core/verfer.test.ts @@ -40,10 +40,6 @@ describe('Verfer', () => { 102, 68, 15, 209, 63, 175, 7, 18, 183, 229, 54, 139, 232, 16, 195, 251, 111, 185, 137])) }); it('should verify secp256r1', async () => { - await libsodium.ready; - // let seed = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); - // const keypair = libsodium.crypto_sign_seed_keypair(seed); - const privateKey = secp256r1.generateKey() const publicKey = base64ToUint8Array(privateKey.toCompressedPublicKey()) let verfer = new Verfer({raw: publicKey, code: MtrDex.ECDSA_256r1}) @@ -67,6 +63,17 @@ describe('Verfer', () => { 223 ])) }); + it('should not verify secp256k1', async () => { + + let publicKey = new Uint8Array([ + 2, 79, 93, 30, 107, 249, 254, 237, + 205, 87, 8, 149, 203, 214, 36, 187, + 162, 251, 58, 206, 241, 203, 27, 76, + 236, 37, 189, 148, 240, 178, 204, 133, + 31 + ]) + expect(function(){new Verfer({raw: publicKey, code: MtrDex.ECDSA_256k1})}).toThrow(new Error(`Unsupported code = 1AAB for verifier.`)) + }); }); From 48c6b7dfeb09366702c232e6c7ca06b90d1b7be9 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Fri, 6 Oct 2023 10:00:02 -0300 Subject: [PATCH 061/186] add r1 indexes --- src/keri/core/indexer.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/keri/core/indexer.ts b/src/keri/core/indexer.ts index 682da9a4..30b736e1 100644 --- a/src/keri/core/indexer.ts +++ b/src/keri/core/indexer.ts @@ -26,12 +26,16 @@ export class IndexedSigCodex { Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only. ECDSA_256k1_Sig: string = 'C' // ECDSA secp256k1 sig appears same in both lists if any. ECDSA_256k1_Crt_Sig: string = 'D' // ECDSA secp256k1 sig appears in current list. + ECDSA_256r1_Sig: string = "E" // ECDSA secp256r1 sig appears same in both lists if any. + ECDSA_256r1_Crt_Sig: string = "F" // ECDSA secp256r1 sig appears in current list. Ed448_Sig: string = '0A' // Ed448 signature appears in both lists. Ed448_Crt_Sig: string = '0B' // Ed448 signature appears in current list only. Ed25519_Big_Sig: string = '2A' // Ed25519 sig appears in both lists. Ed25519_Big_Crt_Sig: string = '2B' // Ed25519 sig appears in current list only. ECDSA_256k1_Big_Sig: string = '2C' // ECDSA secp256k1 sig appears in both lists. ECDSA_256k1_Big_Crt_Sig: string = '2D' // ECDSA secp256k1 sig appears in current list only. + ECDSA_256r1_Big_Sig: string = "2E" // ECDSA secp256r1 sig appears in both lists. + ECDSA_256r1_Big_Crt_Sig: string = "2F" // ECDSA secp256r1 sig appears in current list only. Ed448_Big_Sig: string = '3A' // Ed448 signature appears in both lists. Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only. From bab8bfb8c628ad4bf02b08283bcffa9d50db3a75 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Fri, 6 Oct 2023 10:38:41 -0300 Subject: [PATCH 062/186] sizes --- src/keri/core/indexer.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/keri/core/indexer.ts b/src/keri/core/indexer.ts index 30b736e1..fb0cc62b 100644 --- a/src/keri/core/indexer.ts +++ b/src/keri/core/indexer.ts @@ -8,12 +8,16 @@ export class IndexerCodex { Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only. ECDSA_256k1_Sig: string = 'C' // ECDSA secp256k1 sig appears same in both lists if any. ECDSA_256k1_Crt_Sig: string = 'D' // ECDSA secp256k1 sig appears in current list. + ECDSA_256r1_Sig: string = "E" // ECDSA secp256r1 sig appears same in both lists if any. + ECDSA_256r1_Crt_Sig: string = "F" // ECDSA secp256r1 sig appears in current list. Ed448_Sig: string = '0A' // Ed448 signature appears in both lists. Ed448_Crt_Sig: string = '0B' // Ed448 signature appears in current list only. Ed25519_Big_Sig: string = '2A' // Ed25519 sig appears in both lists. Ed25519_Big_Crt_Sig: string = '2B' // Ed25519 sig appears in current list only. ECDSA_256k1_Big_Sig: string = '2C' // ECDSA secp256k1 sig appears in both lists. ECDSA_256k1_Big_Crt_Sig: string = '2D' // ECDSA secp256k1 sig appears in current list only. + ECDSA_256r1_Big_Sig: string = "2E" // ECDSA secp256r1 sig appears in both lists. + ECDSA_256r1_Big_Crt_Sig: string = "2F" // ECDSA secp256r1 sig appears in current list only. Ed448_Big_Sig: string = '3A' // Ed448 signature appears in both lists. Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only. @@ -50,9 +54,11 @@ export const IdxSigDex = new IndexedSigCodex() export class IndexedCurrentSigCodex { Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only. ECDSA_256k1_Crt_Sig: string = 'D' // ECDSA secp256k1 sig appears in current list only. + ECDSA_256r1_Crt_Sig: string = "F" // ECDSA secp256r1 sig appears in current list. Ed448_Crt_Sig: string = '0B' // Ed448 signature appears in current list only. Ed25519_Big_Crt_Sig: string = '2B' // Ed25519 sig appears in current list only. ECDSA_256k1_Big_Crt_Sig: string = '2D' // ECDSA secp256k1 sig appears in current list only. + ECDSA_256r1_Big_Crt_Sig: string = "2F" // ECDSA secp256r1 sig appears in current list only. Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only. has(prop: string): boolean { @@ -121,6 +127,8 @@ export class Indexer { 'B': new Xizage(1, 1, 0, 88, 0), 'C': new Xizage(1, 1, 0, 88, 0), 'D': new Xizage(1, 1, 0, 88, 0), + 'E': new Xizage(1, 1, 0, 88, 0), + 'F': new Xizage(1, 1, 0, 88, 0), '0A': new Xizage(2, 2, 1, 156, 0), '0B': new Xizage(2, 2, 1, 156, 0), @@ -128,6 +136,8 @@ export class Indexer { '2B': new Xizage(2, 4, 2, 92, 0), '2C': new Xizage(2, 4, 2, 92, 0), '2D': new Xizage(2, 4, 2, 92, 0), + '2E': new Xizage(2, 4, 2, 92, 0), + '2F': new Xizage(2, 4, 2, 92, 0), '3A': new Xizage(2, 6, 3, 160, 0), '3B': new Xizage(2, 6, 3, 160, 0), From c6d2284237f01057ee0cd4c03d752044180b674c Mon Sep 17 00:00:00 2001 From: Kevin Griffin Date: Wed, 4 Oct 2023 22:35:46 -0400 Subject: [PATCH 063/186] adds prettier Signed-off-by: Kevin Griffin --- .prettierrc | 7 + examples/integration-scripts/challenge.ts | 175 +-- examples/integration-scripts/credentials.ts | 363 ++--- examples/integration-scripts/delegation.ts | 128 +- examples/integration-scripts/multisig.ts | 1194 ++++++++++------- examples/integration-scripts/randy.ts | 107 +- .../integration-scripts/request-present.ts | 355 ++--- examples/integration-scripts/salty.ts | 147 +- examples/integration-scripts/witness.ts | 131 +- examples/scripts/client.ts | 157 ++- examples/scripts/list_notifications.ts | 151 ++- examples/scripts/make_endroles.ts | 71 +- examples/signify-react-ts/vite.config.ts | 10 +- package-lock.json | 26 +- package.json | 4 +- src/index.ts | 100 +- src/keri/app/aiding.ts | 302 +++-- src/keri/app/clienting.ts | 414 +++--- src/keri/app/contacting.ts | 146 +- src/keri/app/controller.ts | 381 +++--- src/keri/app/coring.ts | 121 +- src/keri/app/credentialing.ts | 549 ++++---- src/keri/app/escrowing.ts | 27 +- src/keri/app/exchanging.ts | 143 +- src/keri/app/grouping.ts | 39 +- src/keri/app/habery.ts | 200 +-- src/keri/app/notifying.ts | 55 +- src/keri/core/authing.ts | 133 +- src/keri/core/bexter.ts | 71 +- src/keri/core/cigar.ts | 21 +- src/keri/core/cipher.ts | 37 +- src/keri/core/core.ts | 286 ++-- src/keri/core/counter.ts | 278 ++-- src/keri/core/decrypter.ts | 78 +- src/keri/core/diger.ts | 35 +- src/keri/core/encrypter.ts | 62 +- src/keri/core/eventing.ts | 586 ++++---- src/keri/core/httping.ts | 259 ++-- src/keri/core/indexer.ts | 463 ++++--- src/keri/core/keeping.ts | 820 +++++++---- src/keri/core/kering.ts | 10 +- src/keri/core/manager.ts | 1150 +++++++++------- src/keri/core/matter.ts | 550 ++++---- src/keri/core/number.ts | 60 +- src/keri/core/pather.ts | 63 +- src/keri/core/prefixer.ts | 214 +-- src/keri/core/saider.ts | 177 ++- src/keri/core/salter.ts | 108 +- src/keri/core/seqner.ts | 23 +- src/keri/core/serder.ts | 129 +- src/keri/core/siger.ts | 37 +- src/keri/core/signer.ts | 124 +- src/keri/core/tholder.ts | 137 +- src/keri/core/utils.ts | 122 +- src/keri/core/vdring.ts | 70 +- src/keri/core/verfer.ts | 30 +- src/keri/end/ending.ts | 205 +-- test/app/aiding.test.ts | 566 +++++--- test/app/clienting.test.ts | 558 +++++--- test/app/contacting.test.ts | 471 ++++--- test/app/controller.test.ts | 58 +- test/app/coring.test.ts | 423 +++--- test/app/credentialing.test.ts | 487 ++++--- test/app/escrowing.test.ts | 252 ++-- test/app/exchanging.test.ts | 503 ++++--- test/app/grouping.test.ts | 263 ++-- test/app/habery.test.ts | 80 +- test/app/notifying.test.ts | 303 +++-- test/app/registry.test.ts | 73 +- test/core/authing.test.ts | 112 +- test/core/bexter.test.ts | 197 ++- test/core/coring.test.ts | 211 ++- test/core/counter.test.ts | 259 ++-- test/core/decrypter.test.ts | 207 +-- test/core/diger.test.ts | 92 +- test/core/encrypter.test.ts | 123 +- test/core/eventing.test.ts | 246 ++-- test/core/httping.test.ts | 119 +- test/core/indexer.test.ts | 578 ++++---- test/core/manager.test.ts | 1093 ++++++++------- test/core/matter.test.ts | 13 +- test/core/number.test.ts | 50 +- test/core/pather.test.ts | 93 +- test/core/prefixer.test.ts | 87 +- test/core/saider.test.ts | 60 +- test/core/salter.test.ts | 61 +- test/core/seqner.test.ts | 69 +- test/core/serder.test.ts | 116 +- test/core/signer.test.ts | 35 +- test/core/tholder.test.ts | 235 ++-- test/core/vdring.test.ts | 139 +- test/core/verfer.test.ts | 157 ++- test/end/ending.test.ts | 266 ++-- 93 files changed, 11906 insertions(+), 8590 deletions(-) create mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..8875da91 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": true, + "printWidth": 80, + "tabWidth": 4 +} \ No newline at end of file diff --git a/examples/integration-scripts/challenge.ts b/examples/integration-scripts/challenge.ts index 0f109fbb..57004b3f 100644 --- a/examples/integration-scripts/challenge.ts +++ b/examples/integration-scripts/challenge.ts @@ -1,106 +1,131 @@ -import { strict as assert } from "assert" -import signify,{Serder} from "signify-ts" +import { strict as assert } from 'assert'; +import signify, { Serder } from 'signify-ts'; -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -await run() +await run(); async function run() { - await signify.ready() + await signify.ready(); // Boot two clients - const bran1 = signify.randomPasscode() - const bran2 = signify.randomPasscode() - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); - const client2 = new signify.SignifyClient(url, bran2, signify.Tier.low, boot_url); - await client1.boot() - await client2.boot() - await client1.connect() - await client2.connect() - const state1 = await client1.state() - const state2 = await client2.state() - console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - console.log("Client 2 connected. Client AID:",state2.controller.state.i,"Agent AID: ", state2.agent.i) + const bran1 = signify.randomPasscode(); + const bran2 = signify.randomPasscode(); + const client1 = new signify.SignifyClient( + url, + bran1, + signify.Tier.low, + boot_url + ); + const client2 = new signify.SignifyClient( + url, + bran2, + signify.Tier.low, + boot_url + ); + await client1.boot(); + await client2.boot(); + await client1.connect(); + await client2.connect(); + const state1 = await client1.state(); + const state2 = await client2.state(); + console.log( + 'Client 1 connected. Client AID:', + state1.controller.state.i, + 'Agent AID: ', + state1.agent.i + ); + console.log( + 'Client 2 connected. Client AID:', + state2.controller.state.i, + 'Agent AID: ', + state2.agent.i + ); // Generate challenge words - const challenge1_small = await client1.challenges().generate(128) - assert.equal(challenge1_small.words.length, 12) - const challenge1_big = await client1.challenges().generate(256) - assert.equal(challenge1_big.words.length, 24) + const challenge1_small = await client1.challenges().generate(128); + assert.equal(challenge1_small.words.length, 12); + const challenge1_big = await client1.challenges().generate(256); + assert.equal(challenge1_big.words.length, 24); // Create two identifiers, one for each client - let icpResult1 = await client1.identifiers().create('alice', { + let icpResult1 = await client1.identifiers().create('alice', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - let op1 = await icpResult1.op() - while (!op1["done"] ) { - op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - const aid1 = op1['response'] - await client1.identifiers().addEndRole("alice", 'agent', client1!.agent!.pre) - console.log("Alice's AID:", aid1.i) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op1 = await icpResult1.op(); + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + const aid1 = op1['response']; + await client1 + .identifiers() + .addEndRole('alice', 'agent', client1!.agent!.pre); + console.log("Alice's AID:", aid1.i); - let icpResult2 = await client2.identifiers().create('bob', { + let icpResult2 = await client2.identifiers().create('bob', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - let op2 = await icpResult2.op() - while (!op2["done"] ) { - op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - const aid2 = op2['response'] - await client2.identifiers().addEndRole("bob", 'agent', client2!.agent!.pre) - console.log("Bob's AID:", aid2.i) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op2 = await icpResult2.op(); + while (!op2['done']) { + op2 = await client2.operations().get(op2.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + const aid2 = op2['response']; + await client2.identifiers().addEndRole('bob', 'agent', client2!.agent!.pre); + console.log("Bob's AID:", aid2.i); // Exchenge OOBIs - let oobi1 = await client1.oobis().get("alice","agent") - let oobi2 = await client2.oobis().get("bob","agent") - - op1 = await client1.oobis().resolve(oobi2.oobis[0],"bob") - while (!op1["done"]) { + let oobi1 = await client1.oobis().get('alice', 'agent'); + let oobi2 = await client2.oobis().get('bob', 'agent'); + + op1 = await client1.oobis().resolve(oobi2.oobis[0], 'bob'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Client 1 resolved Bob's OOBI") - op2 = await client2.oobis().resolve(oobi1.oobis[0],"alice") - while (!op2["done"]) { + console.log("Client 1 resolved Bob's OOBI"); + op2 = await client2.oobis().resolve(oobi1.oobis[0], 'alice'); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Client 2 resolved Alice's OOBI") + console.log("Client 2 resolved Alice's OOBI"); // List Client 1 contacts - let contacts1 = await client1.contacts().list() - assert.equal(contacts1[0].alias,'bob') + let contacts1 = await client1.contacts().list(); + assert.equal(contacts1[0].alias, 'bob'); // Bob responds to Alice challenge - await client2.challenges().respond('bob', aid1.i, challenge1_small.words) - console.log("Bob responded to Alice challenge with signed words") + await client2.challenges().respond('bob', aid1.i, challenge1_small.words); + console.log('Bob responded to Alice challenge with signed words'); // Alice verifies Bob's response - op1 = await client1.challenges().verify('alice', aid2.i, challenge1_small.words) - while (!op1["done"]) { + op1 = await client1 + .challenges() + .verify('alice', aid2.i, challenge1_small.words); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Alice verified challenge response") + console.log('Alice verified challenge response'); //Alice mark response as accepted - let exn = new Serder(op1.response.exn) - op1 = await client1.challenges().responded('alice', aid2.i, exn.ked.d) - console.log("Alice marked challenge response as accepted") - - // Check Bob's challenge in conctats - contacts1 = await client1.contacts().list() - console.log("Challenge authenticated") + let exn = new Serder(op1.response.exn); + op1 = await client1.challenges().responded('alice', aid2.i, exn.ked.d); + console.log('Alice marked challenge response as accepted'); -} \ No newline at end of file + // Check Bob's challenge in conctats + contacts1 = await client1.contacts().list(); + console.log('Challenge authenticated'); +} diff --git a/examples/integration-scripts/credentials.ts b/examples/integration-scripts/credentials.ts index 76719b36..0e404ec8 100644 --- a/examples/integration-scripts/credentials.ts +++ b/examples/integration-scripts/credentials.ts @@ -1,186 +1,226 @@ -import { strict as assert } from "assert" -import signify from "signify-ts" +import { strict as assert } from 'assert'; +import signify from 'signify-ts'; -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -await run() +await run(); async function run() { - await signify.ready() + await signify.ready(); // Boot three clients - const bran1 = signify.randomPasscode() - const bran2 = signify.randomPasscode() - const bran3 = signify.randomPasscode() - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); - const client2 = new signify.SignifyClient(url, bran2, signify.Tier.low, boot_url); - const client3 = new signify.SignifyClient(url, bran3, signify.Tier.low, boot_url); - await client1.boot() - await client2.boot() - await client3.boot() - await client1.connect() - await client2.connect() - await client3.connect() - const state1 = await client1.state() - const state2 = await client2.state() - const state3 = await client3.state() - console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - console.log("Client 2 connected. Client AID:",state2.controller.state.i,"Agent AID: ", state2.agent.i) - console.log("Client 3 connected. Client AID:",state3.controller.state.i,"Agent AID: ", state3.agent.i) - + const bran1 = signify.randomPasscode(); + const bran2 = signify.randomPasscode(); + const bran3 = signify.randomPasscode(); + const client1 = new signify.SignifyClient( + url, + bran1, + signify.Tier.low, + boot_url + ); + const client2 = new signify.SignifyClient( + url, + bran2, + signify.Tier.low, + boot_url + ); + const client3 = new signify.SignifyClient( + url, + bran3, + signify.Tier.low, + boot_url + ); + await client1.boot(); + await client2.boot(); + await client3.boot(); + await client1.connect(); + await client2.connect(); + await client3.connect(); + const state1 = await client1.state(); + const state2 = await client2.state(); + const state3 = await client3.state(); + console.log( + 'Client 1 connected. Client AID:', + state1.controller.state.i, + 'Agent AID: ', + state1.agent.i + ); + console.log( + 'Client 2 connected. Client AID:', + state2.controller.state.i, + 'Agent AID: ', + state2.agent.i + ); + console.log( + 'Client 3 connected. Client AID:', + state3.controller.state.i, + 'Agent AID: ', + state3.agent.i + ); // Create two identifiers, one for each client let icpResult1 = await client1.identifiers().create('issuer', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - let op1 = await icpResult1.op() - while (!op1["done"] ) { - op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - const aid1 = await client1.identifiers().get("issuer") - await client1.identifiers().addEndRole("issuer", 'agent', client1!.agent!.pre) - console.log("Issuer's AID:", aid1.prefix) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op1 = await icpResult1.op(); + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + const aid1 = await client1.identifiers().get('issuer'); + await client1 + .identifiers() + .addEndRole('issuer', 'agent', client1!.agent!.pre); + console.log("Issuer's AID:", aid1.prefix); - let icpResult2 = await client2.identifiers().create('recipient', { + let icpResult2 = await client2.identifiers().create('recipient', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - let op2 = await icpResult2.op() - while (!op2["done"] ) { - op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - const aid2 = await client2.identifiers().get("recipient") - await client2.identifiers().addEndRole("recipient", 'agent', client2!.agent!.pre) - console.log("Recipient's AID:", aid2.prefix) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op2 = await icpResult2.op(); + while (!op2['done']) { + op2 = await client2.operations().get(op2.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + const aid2 = await client2.identifiers().get('recipient'); + await client2 + .identifiers() + .addEndRole('recipient', 'agent', client2!.agent!.pre); + console.log("Recipient's AID:", aid2.prefix); - let icpResult3 = await client3.identifiers().create('verifier', { + let icpResult3 = await client3.identifiers().create('verifier', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - let op3 = await icpResult3.op() - while (!op3["done"] ) { - op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - const aid3 = await client3.identifiers().get("verifier") - await client3.identifiers().addEndRole("verifier", 'agent', client3!.agent!.pre) - console.log("Verifier's AID:", aid3.prefix) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op3 = await icpResult3.op(); + while (!op3['done']) { + op3 = await client3.operations().get(op3.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + const aid3 = await client3.identifiers().get('verifier'); + await client3 + .identifiers() + .addEndRole('verifier', 'agent', client3!.agent!.pre); + console.log("Verifier's AID:", aid3.prefix); - const schemaSAID = "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao" + const schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; // Exchenge OOBIs - console.log("Resolving OOBIs...") - let oobi1 = await client1.oobis().get("issuer","agent") - let oobi2 = await client2.oobis().get("recipient","agent") - let oobi3 = await client3.oobis().get("verifier","agent") - let schemaOobi = "http://127.0.0.1:7723/oobi/" + schemaSAID - - op1 = await client1.oobis().resolve(oobi2.oobis[0],"recipient") - while (!op1["done"]) { + console.log('Resolving OOBIs...'); + let oobi1 = await client1.oobis().get('issuer', 'agent'); + let oobi2 = await client2.oobis().get('recipient', 'agent'); + let oobi3 = await client3.oobis().get('verifier', 'agent'); + let schemaOobi = 'http://127.0.0.1:7723/oobi/' + schemaSAID; + + op1 = await client1.oobis().resolve(oobi2.oobis[0], 'recipient'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op1 = await client1.oobis().resolve(oobi3.oobis[0],"verifier") - while (!op1["done"]) { + op1 = await client1.oobis().resolve(oobi3.oobis[0], 'verifier'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op1 = await client1.oobis().resolve(schemaOobi,"schema") - while (!op1["done"]) { + op1 = await client1.oobis().resolve(schemaOobi, 'schema'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Issuer resolved 3 OOBIs") - - op2 = await client2.oobis().resolve(oobi1.oobis[0],"issuer") - while (!op2["done"]) { + console.log('Issuer resolved 3 OOBIs'); + + op2 = await client2.oobis().resolve(oobi1.oobis[0], 'issuer'); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op2 = await client2.oobis().resolve(oobi3.oobis[0],"verifier") - while (!op2["done"]) { + op2 = await client2.oobis().resolve(oobi3.oobis[0], 'verifier'); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op2 = await client2.oobis().resolve(schemaOobi,"schema") - while (!op2["done"]) { + op2 = await client2.oobis().resolve(schemaOobi, 'schema'); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Recipient resolved 3 OOBIs") + console.log('Recipient resolved 3 OOBIs'); - op3 = await client3.oobis().resolve(oobi1.oobis[0],"issuer") - while (!op3["done"]) { + op3 = await client3.oobis().resolve(oobi1.oobis[0], 'issuer'); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op3 = await client3.oobis().resolve(oobi2.oobis[0],"recipient") - while (!op3["done"]) { + op3 = await client3.oobis().resolve(oobi2.oobis[0], 'recipient'); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op3 = await client3.oobis().resolve(schemaOobi,"schema") - while (!op3["done"]) { + op3 = await client3.oobis().resolve(schemaOobi, 'schema'); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Verifier resolved 3 OOBIs") + console.log('Verifier resolved 3 OOBIs'); // Create registry for issuer - op1 = await client1.registries().create('issuer','vLEI') - while (!op1["done"]) { + op1 = await client1.registries().create('issuer', 'vLEI'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - let registries = await client1.registries().list('issuer') - assert.equal(registries.length, 1) - assert.equal(registries[0].name, 'vLEI') - let schema = await client1.schemas().get(schemaSAID) - assert.equal(schema.$id, schemaSAID) - let schemas = await client2.schemas().list() - assert.equal(schemas.length, 1) - assert.equal(schemas[0].$id, schemaSAID) - console.log("Registry created") + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + let registries = await client1.registries().list('issuer'); + assert.equal(registries.length, 1); + assert.equal(registries[0].name, 'vLEI'); + let schema = await client1.schemas().get(schemaSAID); + assert.equal(schema.$id, schemaSAID); + let schemas = await client2.schemas().list(); + assert.equal(schemas.length, 1); + assert.equal(schemas[0].$id, schemaSAID); + console.log('Registry created'); // Issue credential const vcdata = { - "LEI": "5493001KJTIIGC8Y1R17" - } - op1 = await client1.credentials().issue('issuer',registries[0].regk, schemaSAID,aid2.prefix,vcdata) - while (!op1["done"]) { + LEI: '5493001KJTIIGC8Y1R17', + }; + op1 = await client1 + .credentials() + .issue('issuer', registries[0].regk, schemaSAID, aid2.prefix, vcdata); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - let creds1 = await client1.credentials().list('issuer') - assert.equal(creds1.length, 1) - assert.equal(creds1[0].sad.s, schemaSAID) - assert.equal(creds1[0].sad.i, aid1.prefix) - assert.equal(creds1[0].status.s, "0") // 0 = issued - console.log("Credential issued") + let creds1 = await client1.credentials().list('issuer'); + assert.equal(creds1.length, 1); + assert.equal(creds1[0].sad.s, schemaSAID); + assert.equal(creds1[0].sad.i, aid1.prefix); + assert.equal(creds1[0].status.s, '0'); // 0 = issued + console.log('Credential issued'); // Recipient check issued credential - let credentialReceived = false + let credentialReceived = false; while (!credentialReceived) { - let notifications = await client2.notifications().list() - for (let notif of notifications.notes){ + let notifications = await client2.notifications().list(); + for (let notif of notifications.notes) { if (notif.a.r == '/exn//credential/issue') { - credentialReceived = true - await client2.notifications().mark(notif.i) + credentialReceived = true; + await client2.notifications().mark(notif.i); } } - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } // Credetials are no longer accepted by default @@ -190,30 +230,32 @@ async function run() { // assert.equal(creds2[0].sad.s, schemaSAID) // assert.equal(creds2[0].sad.i, aid1.prefix) // assert.equal(creds2[0].status.s, "0") // 0 = issued - console.log("Credential received by recipient") + console.log('Credential received by recipient'); // Present credential - await client1.credentials().present('issuer', creds1[0].sad.d, 'verifier', true) - await new Promise(resolve => setTimeout(resolve, 5000)) - let creds3 = await client3.credentials().list('verifier') - assert.equal(creds3.length, 1) - assert.equal(creds3[0].sad.s, schemaSAID) - assert.equal(creds3[0].sad.i, aid1.prefix) - assert.equal(creds3[0].status.s, "0") // 0 = issued - console.log("Credential presented and received by verifier") + await client1 + .credentials() + .present('issuer', creds1[0].sad.d, 'verifier', true); + await new Promise((resolve) => setTimeout(resolve, 5000)); + let creds3 = await client3.credentials().list('verifier'); + assert.equal(creds3.length, 1); + assert.equal(creds3[0].sad.s, schemaSAID); + assert.equal(creds3[0].sad.i, aid1.prefix); + assert.equal(creds3[0].status.s, '0'); // 0 = issued + console.log('Credential presented and received by verifier'); // Revoke credential - op1 = await client1.credentials().revoke('issuer', creds1[0].sad.d) - while (!op1["done"]) { + op1 = await client1.credentials().revoke('issuer', creds1[0].sad.d); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - creds1 = await client1.credentials().list('issuer') - assert.equal(creds1.length, 1) - assert.equal(creds1[0].sad.s, schemaSAID) - assert.equal(creds1[0].sad.i, aid1.prefix) - assert.equal(creds1[0].status.s, "1") // 1 = revoked - console.log("Credential revoked") + creds1 = await client1.credentials().list('issuer'); + assert.equal(creds1.length, 1); + assert.equal(creds1[0].sad.s, schemaSAID); + assert.equal(creds1[0].sad.i, aid1.prefix); + assert.equal(creds1[0].status.s, '1'); // 1 = revoked + console.log('Credential revoked'); // Recipient check revoked credential // credentialReceived = false @@ -230,15 +272,16 @@ async function run() { // assert.equal(creds2[0].sad.i, aid1.prefix) // assert.equal(creds2[0].status.s, "1") // 1 = revoked // console.log("Revocation received by recipient") - + // Present revoked credential - await client1.credentials().present('issuer', creds1[0].sad.d, 'verifier', true) - await new Promise(resolve => setTimeout(resolve, 5000)) - creds3 = await client3.credentials().list('verifier') - assert.equal(creds3.length, 1) - assert.equal(creds3[0].sad.s, schemaSAID) - assert.equal(creds3[0].sad.i, aid1.prefix) - assert.equal(creds3[0].status.s, "1") // 1 = revoked - console.log("Revocation presented and received by verifier") - -} \ No newline at end of file + await client1 + .credentials() + .present('issuer', creds1[0].sad.d, 'verifier', true); + await new Promise((resolve) => setTimeout(resolve, 5000)); + creds3 = await client3.credentials().list('verifier'); + assert.equal(creds3.length, 1); + assert.equal(creds3[0].sad.s, schemaSAID); + assert.equal(creds3[0].sad.i, aid1.prefix); + assert.equal(creds3[0].status.s, '1'); // 1 = revoked + console.log('Revocation presented and received by verifier'); +} diff --git a/examples/integration-scripts/delegation.ts b/examples/integration-scripts/delegation.ts index 3c6dc821..66005721 100644 --- a/examples/integration-scripts/delegation.ts +++ b/examples/integration-scripts/delegation.ts @@ -1,77 +1,101 @@ -import { strict as assert } from "assert" -import signify from "signify-ts" +import { strict as assert } from 'assert'; +import signify from 'signify-ts'; -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -await run() +await run(); async function run() { - await signify.ready() + await signify.ready(); // Boot two clients - const bran1 = signify.randomPasscode() - const bran2 = signify.randomPasscode() - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); - const client2 = new signify.SignifyClient(url, bran2, signify.Tier.low, boot_url); - await client1.boot() - await client2.boot() - await client1.connect() - await client2.connect() - const state1 = await client1.state() - const state2 = await client2.state() - console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - console.log("Client 2 connected. Client AID:",state2.controller.state.i,"Agent AID: ", state2.agent.i) + const bran1 = signify.randomPasscode(); + const bran2 = signify.randomPasscode(); + const client1 = new signify.SignifyClient( + url, + bran1, + signify.Tier.low, + boot_url + ); + const client2 = new signify.SignifyClient( + url, + bran2, + signify.Tier.low, + boot_url + ); + await client1.boot(); + await client2.boot(); + await client1.connect(); + await client2.connect(); + const state1 = await client1.state(); + const state2 = await client2.state(); + console.log( + 'Client 1 connected. Client AID:', + state1.controller.state.i, + 'Agent AID: ', + state1.agent.i + ); + console.log( + 'Client 2 connected. Client AID:', + state2.controller.state.i, + 'Agent AID: ', + state2.agent.i + ); // Client 1 create delegator AID - let icpResult1 = await client1.identifiers().create('delegator',{ + let icpResult1 = await client1.identifiers().create('delegator', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - let op1 = await icpResult1.op() - while (!op1["done"] ) { - op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - const aid1 = await client1.identifiers().get("delegator") - await client1.identifiers().addEndRole("delegator", 'agent', client1!.agent!.pre) - console.log("Delegator's AID:",aid1.prefix) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op1 = await icpResult1.op(); + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + const aid1 = await client1.identifiers().get('delegator'); + await client1 + .identifiers() + .addEndRole('delegator', 'agent', client1!.agent!.pre); + console.log("Delegator's AID:", aid1.prefix); // Client 2 resolves delegator OOBI - console.log("Client 2 resolving delegator OOBI") - let oobi1 = await client1.oobis().get("delegator","agent") - let op2 = await client2.oobis().resolve(oobi1.oobis[0],"delegator") - while (!op2["done"]) { + console.log('Client 2 resolving delegator OOBI'); + let oobi1 = await client1.oobis().get('delegator', 'agent'); + let op2 = await client2.oobis().resolve(oobi1.oobis[0], 'delegator'); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("OOBI resolved") + console.log('OOBI resolved'); // Client 2 creates delegate AID - let icpResult2 = await client2.identifiers().create('delegate',{delpre: aid1.prefix}) - op2 = await icpResult2.op() - let delegatePrefix = op2.name.split(".")[1] - console.log("Delegate's prefix:", delegatePrefix) - console.log("Delegate waiting for approval...") + let icpResult2 = await client2 + .identifiers() + .create('delegate', { delpre: aid1.prefix }); + op2 = await icpResult2.op(); + let delegatePrefix = op2.name.split('.')[1]; + console.log("Delegate's prefix:", delegatePrefix); + console.log('Delegate waiting for approval...'); // Client 1 approves deletation const anchor = { i: delegatePrefix, s: 0, d: delegatePrefix, - } - op1 = await client1.identifiers().interact('delegator', anchor) - console.log("Delegator approved delegation") + }; + op1 = await client1.identifiers().interact('delegator', anchor); + console.log('Delegator approved delegation'); // Client 2 check approval - while (!op2["done"] ) { + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - const aid2 = await client2.identifiers().get("delegate") - assert.equal(aid2.prefix, delegatePrefix) - console.log("Delegation approved for aid:", aid2.prefix) - -} \ No newline at end of file + const aid2 = await client2.identifiers().get('delegate'); + assert.equal(aid2.prefix, delegatePrefix); + console.log('Delegation approved for aid:', aid2.prefix); +} diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index d30c94b9..a15becf7 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -1,157 +1,198 @@ -import { strict as assert } from "assert" -import signify, {Serder} from "signify-ts" +import { strict as assert } from 'assert'; +import signify, { Serder } from 'signify-ts'; -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -await run() +await run(); async function run() { - await signify.ready() + await signify.ready(); // Boot three clients - const bran1 = signify.randomPasscode() - const bran2 = signify.randomPasscode() - const bran3 = signify.randomPasscode() - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); - const client2 = new signify.SignifyClient(url, bran2, signify.Tier.low, boot_url); - const client3 = new signify.SignifyClient(url, bran3, signify.Tier.low, boot_url); - await client1.boot() - await client2.boot() - await client3.boot() - await client1.connect() - await client2.connect() - await client3.connect() - const state1 = await client1.state() - const state2 = await client2.state() - const state3 = await client3.state() - console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - console.log("Client 2 connected. Client AID:",state2.controller.state.i,"Agent AID: ", state2.agent.i) - console.log("Client 3 connected. Client AID:",state3.controller.state.i,"Agent AID: ", state3.agent.i) - + const bran1 = signify.randomPasscode(); + const bran2 = signify.randomPasscode(); + const bran3 = signify.randomPasscode(); + const client1 = new signify.SignifyClient( + url, + bran1, + signify.Tier.low, + boot_url + ); + const client2 = new signify.SignifyClient( + url, + bran2, + signify.Tier.low, + boot_url + ); + const client3 = new signify.SignifyClient( + url, + bran3, + signify.Tier.low, + boot_url + ); + await client1.boot(); + await client2.boot(); + await client3.boot(); + await client1.connect(); + await client2.connect(); + await client3.connect(); + const state1 = await client1.state(); + const state2 = await client2.state(); + const state3 = await client3.state(); + console.log( + 'Client 1 connected. Client AID:', + state1.controller.state.i, + 'Agent AID: ', + state1.agent.i + ); + console.log( + 'Client 2 connected. Client AID:', + state2.controller.state.i, + 'Agent AID: ', + state2.agent.i + ); + console.log( + 'Client 3 connected. Client AID:', + state3.controller.state.i, + 'Agent AID: ', + state3.agent.i + ); // Create three identifiers, one for each client let icpResult1 = await client1.identifiers().create('member1', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - let op1 = await icpResult1.op() - while (!op1["done"] ) { - op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - let aid1 = await client1.identifiers().get("member1") - await client1.identifiers().addEndRole("member1", 'agent', client1!.agent!.pre) - console.log("Member1's AID:", aid1.prefix) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op1 = await icpResult1.op(); + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + let aid1 = await client1.identifiers().get('member1'); + await client1 + .identifiers() + .addEndRole('member1', 'agent', client1!.agent!.pre); + console.log("Member1's AID:", aid1.prefix); let icpResult2 = await client2.identifiers().create('member2', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - let op2 = await icpResult2.op() - while (!op2["done"] ) { - op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - let aid2 = await client2.identifiers().get("member2") - await client2.identifiers().addEndRole("member2", 'agent', client2!.agent!.pre) - console.log("Member2's AID:", aid2.prefix) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op2 = await icpResult2.op(); + while (!op2['done']) { + op2 = await client2.operations().get(op2.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + let aid2 = await client2.identifiers().get('member2'); + await client2 + .identifiers() + .addEndRole('member2', 'agent', client2!.agent!.pre); + console.log("Member2's AID:", aid2.prefix); let icpResult3 = await client3.identifiers().create('member3', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - let op3 = await icpResult3.op() - while (!op3["done"] ) { - op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - let aid3 = await client3.identifiers().get("member3") - await client3.identifiers().addEndRole("member3", 'agent', client3!.agent!.pre) - console.log("Member3's AID:", aid3.prefix) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op3 = await icpResult3.op(); + while (!op3['done']) { + op3 = await client3.operations().get(op3.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + let aid3 = await client3.identifiers().get('member3'); + await client3 + .identifiers() + .addEndRole('member3', 'agent', client3!.agent!.pre); + console.log("Member3's AID:", aid3.prefix); // Exchange OOBIs - console.log("Resolving OOBIs") - let oobi1 = await client1.oobis().get("member1","agent") - let oobi2 = await client2.oobis().get("member2","agent") - let oobi3 = await client3.oobis().get("member3","agent") - - op1 = await client1.oobis().resolve(oobi2.oobis[0],"member2") - while (!op1["done"]) { + console.log('Resolving OOBIs'); + let oobi1 = await client1.oobis().get('member1', 'agent'); + let oobi2 = await client2.oobis().get('member2', 'agent'); + let oobi3 = await client3.oobis().get('member3', 'agent'); + + op1 = await client1.oobis().resolve(oobi2.oobis[0], 'member2'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op1 = await client1.oobis().resolve(oobi3.oobis[0],"member3") - while (!op1["done"]) { + op1 = await client1.oobis().resolve(oobi3.oobis[0], 'member3'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Member1 resolved 2 OOBIs") - - op2 = await client2.oobis().resolve(oobi1.oobis[0],"member1") - while (!op2["done"]) { + console.log('Member1 resolved 2 OOBIs'); + + op2 = await client2.oobis().resolve(oobi1.oobis[0], 'member1'); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op2 = await client2.oobis().resolve(oobi3.oobis[0],"member3") - while (!op2["done"]) { + op2 = await client2.oobis().resolve(oobi3.oobis[0], 'member3'); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Member2 resolved 2 OOBIs") + console.log('Member2 resolved 2 OOBIs'); - op3 = await client3.oobis().resolve(oobi1.oobis[0],"member1") - while (!op3["done"]) { + op3 = await client3.oobis().resolve(oobi1.oobis[0], 'member1'); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op3 = await client3.oobis().resolve(oobi2.oobis[0],"member2") - while (!op3["done"]) { + op3 = await client3.oobis().resolve(oobi2.oobis[0], 'member2'); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Member3 resolved 2 OOBIs") + console.log('Member3 resolved 2 OOBIs'); // First member challenge the other members with a random list of words // List of words should be passed to the other members out of band // The other members should do the same challenge/response flow, not shown here for brevity - const words = (await client1.challenges().generate(128)).words - console.log("Member1 generated challenge words:", words) + const words = (await client1.challenges().generate(128)).words; + console.log('Member1 generated challenge words:', words); - await client2.challenges().respond('member2', aid1.prefix, words) - console.log("Member2 responded challenge with signed words") + await client2.challenges().respond('member2', aid1.prefix, words); + console.log('Member2 responded challenge with signed words'); - await client3.challenges().respond('member3', aid1.prefix, words) - console.log("Member3 responded challenge with signed words") + await client3.challenges().respond('member3', aid1.prefix, words); + console.log('Member3 responded challenge with signed words'); - op1 = await client1.challenges().verify('member1', aid2.prefix, words) - while (!op1["done"]) { + op1 = await client1.challenges().verify('member1', aid2.prefix, words); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Member1 verified challenge response from member2") - let exnwords = new Serder(op1.response.exn) - op1 = await client1.challenges().responded('member1', aid2.prefix, exnwords.ked.d) - console.log("Member1 marked challenge response as accepted") + console.log('Member1 verified challenge response from member2'); + let exnwords = new Serder(op1.response.exn); + op1 = await client1 + .challenges() + .responded('member1', aid2.prefix, exnwords.ked.d); + console.log('Member1 marked challenge response as accepted'); - - op1 = await client1.challenges().verify('member1', aid3.prefix, words) - while (!op1["done"]) { + op1 = await client1.challenges().verify('member1', aid3.prefix, words); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Member1 verified challenge response from member3") - exnwords = new Serder(op1.response.exn) - op1 = await client1.challenges().responded('member1', aid3.prefix, exnwords.ked.d) - console.log("Member1 marked challenge response as accepted") + console.log('Member1 verified challenge response from member3'); + exnwords = new Serder(op1.response.exn); + op1 = await client1 + .challenges() + .responded('member1', aid3.prefix, exnwords.ked.d); + console.log('Member1 marked challenge response as accepted'); // First member start the creation of a multisig identifier let rstates = [aid1["state"], aid2["state"], aid3["state"]] @@ -159,47 +200,59 @@ async function run() { icpResult1 = await client1.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid1, - isith: 3, + isith: 3, nsith: 3, toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"], + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], states: states, - rstates: rstates - }) - op1 = await icpResult1.op() - let serder = icpResult1.serder - - let sigs = icpResult1.sigs - let sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + rstates: rstates, + }); + op1 = await icpResult1.op(); + let serder = icpResult1.serder; + + let sigs = icpResult1.sigs; + let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - let ims = signify.d(signify.messagize(serder, sigers)) - let atc = ims.substring(serder.size) + let ims = signify.d(signify.messagize(serder, sigers)); + let atc = ims.substring(serder.size); let embeds = { icp: [serder, atc], - } - - let smids = states.map((state) => state['i']) - let recp = [aid2["state"], aid3["state"]].map((state) => state['i']) - - await client1.exchanges().send("member1", "multisig", aid1, "/multisig/icp", - {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) - console.log("Member1 initiated multisig, waiting for others to join...") - - // Second member check notifications and join the multisig - let msgSaid = "" - while (msgSaid=="") { - let notifications = await client2.notifications().list() - for (let notif of notifications.notes){ + }; + + let smids = states.map((state) => state['i']); + let recp = [aid2['state'], aid3['state']].map((state) => state['i']); + + await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/icp', + { gid: serder.pre, smids: smids, rmids: smids }, + embeds, + recp + ); + console.log('Member1 initiated multisig, waiting for others to join...'); + + // Second member check notifications and join the multisig + let msgSaid = ''; + while (msgSaid == '') { + let notifications = await client2.notifications().list(); + for (let notif of notifications.notes) { if (notif.a.r == '/multisig/icp') { - msgSaid = notif.a.d - await client2.notifications().mark(notif.i) - console.log("Member2 received exchange message to join multisig") + msgSaid = notif.a.d; + await client2.notifications().mark(notif.i); + console.log( + 'Member2 received exchange message to join multisig' + ); } } - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } let res = await client2.groups().getRequest(msgSaid) @@ -209,44 +262,54 @@ async function run() { icpResult2 = await client2.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid2, - isith: icp.kt, + isith: icp.kt, nsith: icp.nt, toad: parseInt(icp.bt), wits: icp.b, states: states, - rstates: rstates - }) - op2 = await icpResult2.op() - serder = icpResult2.serder - sigs = icpResult2.sigs - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) - - ims = signify.d(signify.messagize(serder, sigers)) - atc = ims.substring(serder.size) + rstates: rstates, + }); + op2 = await icpResult2.op(); + serder = icpResult2.serder; + sigs = icpResult2.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); embeds = { icp: [serder, atc], - } - - smids = exn.a.smids - recp = [aid1["state"], aid3["state"]].map((state) => state['i']) - - await client2.exchanges().send("member2", "multisig", aid2, "/multisig/icp", - {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) - console.log("Member2 joined multisig, waiting for others...") - - - // Third member check notifications and join the multisig - msgSaid = "" - while (msgSaid=="") { - let notifications = await client3.notifications().list() - for (let notif of notifications.notes){ + }; + + smids = exn.a.smids; + recp = [aid1['state'], aid3['state']].map((state) => state['i']); + + await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/icp', + { gid: serder.pre, smids: smids, rmids: smids }, + embeds, + recp + ); + console.log('Member2 joined multisig, waiting for others...'); + + // Third member check notifications and join the multisig + msgSaid = ''; + while (msgSaid == '') { + let notifications = await client3.notifications().list(); + for (let notif of notifications.notes) { if (notif.a.r == '/multisig/icp') { - msgSaid = notif.a.d - await client3.notifications().mark(notif.i) - console.log("Member3 received exchange message to join multisig") + msgSaid = notif.a.d; + await client3.notifications().mark(notif.i); + console.log( + 'Member3 received exchange message to join multisig' + ); } } - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } res = await client3.groups().getRequest(msgSaid) @@ -255,471 +318,616 @@ async function run() { icpResult3 = await client3.identifiers().create("multisig",{ algo: signify.Algos.group, mhab: aid3, - isith: icp.kt, + isith: icp.kt, nsith: icp.nt, toad: parseInt(icp.bt), wits: icp.b, states: states, - rstates: rstates - }) - op3 = await icpResult3.op() - serder = icpResult3.serder - sigs = icpResult3.sigs - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) - - ims = signify.d(signify.messagize(serder, sigers)) - atc = ims.substring(serder.size) + rstates: rstates, + }); + op3 = await icpResult3.op(); + serder = icpResult3.serder; + sigs = icpResult3.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); embeds = { icp: [serder, atc], - } - - smids = exn.a.smids - recp = [aid1["state"], aid2["state"]].map((state) => state['i']) - - await client3.exchanges().send("member3", "multisig", aid3, "/multisig/icp", - {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) - console.log("Member3 joined, multisig waiting for others...") + }; + + smids = exn.a.smids; + recp = [aid1['state'], aid2['state']].map((state) => state['i']); + + await client3 + .exchanges() + .send( + 'member3', + 'multisig', + aid3, + '/multisig/icp', + { gid: serder.pre, smids: smids, rmids: smids }, + embeds, + recp + ); + console.log('Member3 joined, multisig waiting for others...'); // Check for completion - while (!op1["done"]) { + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - while (!op2["done"]) { + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - while (!op3["done"]) { + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - console.log("Multisig created!") - - const identifiers1 = await client1.identifiers().list() - assert.equal(identifiers1.aids.length, 2) - assert.equal(identifiers1.aids[0].name, "member1") - assert.equal(identifiers1.aids[1].name, "multisig") - - const identifiers2 = await client2.identifiers().list() - assert.equal(identifiers2.aids.length, 2) - assert.equal(identifiers2.aids[0].name, "member2") - assert.equal(identifiers2.aids[1].name, "multisig") - - const identifiers3 = await client3.identifiers().list() - assert.equal(identifiers3.aids.length, 2) - assert.equal(identifiers3.aids[0].name, "member3") - assert.equal(identifiers3.aids[1].name, "multisig") - - console.log("Client 1 managed AIDs:\n", identifiers1.aids[0].name, `[${identifiers1.aids[0].prefix}]\n`, - identifiers1.aids[1].name, `[${identifiers1.aids[1].prefix}]`) - console.log("Client 2 managed AIDs:\n", identifiers2.aids[0].name, `[${identifiers2.aids[0].prefix}]\n`, - identifiers2.aids[1].name, `[${identifiers2.aids[1].prefix}]`) - console.log("Client 3 managed AIDs:\n", identifiers3.aids[0].name, `[${identifiers3.aids[0].prefix}]\n`, - identifiers3.aids[1].name, `[${identifiers3.aids[1].prefix}]`) - - let multisig = identifiers3.aids[1].prefix + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + console.log('Multisig created!'); + + const identifiers1 = await client1.identifiers().list(); + assert.equal(identifiers1.aids.length, 2); + assert.equal(identifiers1.aids[0].name, 'member1'); + assert.equal(identifiers1.aids[1].name, 'multisig'); + + const identifiers2 = await client2.identifiers().list(); + assert.equal(identifiers2.aids.length, 2); + assert.equal(identifiers2.aids[0].name, 'member2'); + assert.equal(identifiers2.aids[1].name, 'multisig'); + + const identifiers3 = await client3.identifiers().list(); + assert.equal(identifiers3.aids.length, 2); + assert.equal(identifiers3.aids[0].name, 'member3'); + assert.equal(identifiers3.aids[1].name, 'multisig'); + + console.log( + 'Client 1 managed AIDs:\n', + identifiers1.aids[0].name, + `[${identifiers1.aids[0].prefix}]\n`, + identifiers1.aids[1].name, + `[${identifiers1.aids[1].prefix}]` + ); + console.log( + 'Client 2 managed AIDs:\n', + identifiers2.aids[0].name, + `[${identifiers2.aids[0].prefix}]\n`, + identifiers2.aids[1].name, + `[${identifiers2.aids[1].prefix}]` + ); + console.log( + 'Client 3 managed AIDs:\n', + identifiers3.aids[0].name, + `[${identifiers3.aids[0].prefix}]\n`, + identifiers3.aids[1].name, + `[${identifiers3.aids[1].prefix}]` + ); + + let multisig = identifiers3.aids[1].prefix; // MultiSig Interaction // Member1 initiates an interaction event - let data = {"i": "EE77q3_zWb5ojgJr-R1vzsL5yiL4Nzm-bfSOQzQl02dy"} - let eventResponse1 = await client1.identifiers().interact("multisig", data) - op1 = await eventResponse1.op() - serder = eventResponse1.serder - sigs = eventResponse1.sigs - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) - - ims = signify.d(signify.messagize(serder, sigers)) - atc = ims.substring(serder.size) + let data = { i: 'EE77q3_zWb5ojgJr-R1vzsL5yiL4Nzm-bfSOQzQl02dy' }; + let eventResponse1 = await client1.identifiers().interact('multisig', data); + op1 = await eventResponse1.op(); + serder = eventResponse1.serder; + sigs = eventResponse1.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); let xembeds = { ixn: [serder, atc], - } - - smids = states.map((state) => state['i']) - recp = [aid2["state"], aid3["state"]].map((state) => state['i']) - - await client1.exchanges().send("member1", "multisig", aid1, "/multisig/ixn", - {'gid': serder.pre, smids: smids, rmids: smids}, xembeds, recp) - console.log("Member1 initiates interaction event, waiting for others to join...") + }; + + smids = states.map((state) => state['i']); + recp = [aid2['state'], aid3['state']].map((state) => state['i']); + + await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/ixn', + { gid: serder.pre, smids: smids, rmids: smids }, + xembeds, + recp + ); + console.log( + 'Member1 initiates interaction event, waiting for others to join...' + ); // Member2 check for notifications and join the interaction event - msgSaid = "" - while (msgSaid=="") { - let notifications = await client2.notifications().list() - for (let notif of notifications.notes){ + msgSaid = ''; + while (msgSaid == '') { + let notifications = await client2.notifications().list(); + for (let notif of notifications.notes) { if (notif.a.r == '/multisig/ixn') { - msgSaid = notif.a.d - await client2.notifications().mark(notif.i) - console.log("Member2 received exchange message to join the interaction event") + msgSaid = notif.a.d; + await client2.notifications().mark(notif.i); + console.log( + 'Member2 received exchange message to join the interaction event' + ); } } - await new Promise(resolve => setTimeout(resolve, 1000)); - } - res = await client2.groups().getRequest(msgSaid) - exn = res[0].exn - let ixn = exn.e.ixn - data = ixn.a - - icpResult2 = await client2.identifiers().interact("multisig",data) - op2 = await icpResult2.op() - serder = icpResult2.serder - sigs = icpResult2.sigs - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) - - ims = signify.d(signify.messagize(serder, sigers)) - atc = ims.substring(serder.size) - xembeds = { - ixn: [serder, atc], + await new Promise((resolve) => setTimeout(resolve, 1000)); } + res = await client2.groups().getRequest(msgSaid); + exn = res[0].exn; + let ixn = exn.e.ixn; + data = ixn.a; - smids = exn.a.smids - recp = [aid1["state"], aid3["state"]].map((state) => state['i']) + icpResult2 = await client2.identifiers().interact('multisig', data); + op2 = await icpResult2.op(); + serder = icpResult2.serder; + sigs = icpResult2.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - await client2.exchanges().send("member2", "multisig", aid2, "/multisig/ixn", - {'gid': serder.pre, smids: smids, rmids: smids}, xembeds, recp) - console.log("Member2 joins interaction event, waiting for others...") + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); + xembeds = { + ixn: [serder, atc], + }; + + smids = exn.a.smids; + recp = [aid1['state'], aid3['state']].map((state) => state['i']); + + await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/ixn', + { gid: serder.pre, smids: smids, rmids: smids }, + xembeds, + recp + ); + console.log('Member2 joins interaction event, waiting for others...'); // Member3 check for notifications and join the interaction event - msgSaid = "" - while (msgSaid=="") { - let notifications = await client3.notifications().list() - for (let notif of notifications.notes){ + msgSaid = ''; + while (msgSaid == '') { + let notifications = await client3.notifications().list(); + for (let notif of notifications.notes) { if (notif.a.r == '/multisig/ixn') { - msgSaid = notif.a.d - await client3.notifications().mark(notif.i) - console.log("Member3 received exchange message to join the interaction event") + msgSaid = notif.a.d; + await client3.notifications().mark(notif.i); + console.log( + 'Member3 received exchange message to join the interaction event' + ); } } - await new Promise(resolve => setTimeout(resolve, 1000)); - } - res = await client3.groups().getRequest(msgSaid) - exn = res[0].exn - ixn = exn.e.ixn - data = ixn.a - - icpResult3 = await client3.identifiers().interact("multisig",data) - op3 = await icpResult3.op() - serder = icpResult3.serder - sigs = icpResult3.sigs - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) - - ims = signify.d(signify.messagize(serder, sigers)) - atc = ims.substring(serder.size) - xembeds = { - ixn: [serder, atc], + await new Promise((resolve) => setTimeout(resolve, 1000)); } + res = await client3.groups().getRequest(msgSaid); + exn = res[0].exn; + ixn = exn.e.ixn; + data = ixn.a; - smids = exn.a.smids - recp = [aid1["state"], aid2["state"]].map((state) => state['i']) + icpResult3 = await client3.identifiers().interact('multisig', data); + op3 = await icpResult3.op(); + serder = icpResult3.serder; + sigs = icpResult3.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - await client3.exchanges().send("member3", "multisig", aid3, "/multisig/ixn", - {'gid': serder.pre, smids: smids, rmids: smids}, xembeds, recp) - console.log("Member3 joins interaction event, waiting for others...") + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); + xembeds = { + ixn: [serder, atc], + }; + + smids = exn.a.smids; + recp = [aid1['state'], aid2['state']].map((state) => state['i']); + + await client3 + .exchanges() + .send( + 'member3', + 'multisig', + aid3, + '/multisig/ixn', + { gid: serder.pre, smids: smids, rmids: smids }, + xembeds, + recp + ); + console.log('Member3 joins interaction event, waiting for others...'); // Check for completion - while (!op1["done"]) { + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - while (!op2["done"]) { + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - while (!op3["done"]) { + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Multisig interaction completed!") + console.log('Multisig interaction completed!'); // Members agree out of band to rotate keys - console.log("Members agree out of band to rotate keys") - icpResult1 = await client1.identifiers().rotate('member1') - op1 = await icpResult1.op() - while (!op1["done"]) { + console.log('Members agree out of band to rotate keys'); + icpResult1 = await client1.identifiers().rotate('member1'); + op1 = await icpResult1.op(); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - aid1 = await client1.identifiers().get("member1") + aid1 = await client1.identifiers().get('member1'); - console.log("Member1 rotated keys") - icpResult2 = await client2.identifiers().rotate('member2') - op2 = await icpResult2.op() - while (!op2["done"]) { + console.log('Member1 rotated keys'); + icpResult2 = await client2.identifiers().rotate('member2'); + op2 = await icpResult2.op(); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - aid2 = await client2.identifiers().get("member2") - console.log("Member2 rotated keys") - icpResult3 = await client3.identifiers().rotate('member3') - op3 = await icpResult3.op() - while (!op3["done"]) { + aid2 = await client2.identifiers().get('member2'); + console.log('Member2 rotated keys'); + icpResult3 = await client3.identifiers().rotate('member3'); + op3 = await icpResult3.op(); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - aid3 = await client3.identifiers().get("member3") - console.log("Member3 rotated keys") - + aid3 = await client3.identifiers().get('member3'); + console.log('Member3 rotated keys'); + // Update new key states - op1 = await client1.keyStates().query(aid2.prefix,1) - while (!op1["done"]) { + op1 = await client1.keyStates().query(aid2.prefix, 1); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - let aid2State = op1["response"] - op1 = await client1.keyStates().query(aid3.prefix,1) - while (!op1["done"]) { + let aid2State = op1['response']; + op1 = await client1.keyStates().query(aid3.prefix, 1); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - let aid3State = op1["response"] + let aid3State = op1['response']; - op2 = await client2.keyStates().query(aid3.prefix,1) - while (!op2["done"]) { + op2 = await client2.keyStates().query(aid3.prefix, 1); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op2 = await client2.keyStates().query(aid1.prefix,1) - while (!op2["done"]) { + op2 = await client2.keyStates().query(aid1.prefix, 1); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - let aid1State = op2["response"] + let aid1State = op2['response']; - op3 = await client3.keyStates().query(aid1.prefix,1) - while (!op3["done"]) { + op3 = await client3.keyStates().query(aid1.prefix, 1); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op3 = await client3.keyStates().query(aid2.prefix,1) - while (!op3["done"]) { + op3 = await client3.keyStates().query(aid2.prefix, 1); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - rstates = [aid1State, aid2State, aid3State] - states = rstates + rstates = [aid1State, aid2State, aid3State]; + states = rstates; // Multisig Rotation // Member1 initiates a rotation event - eventResponse1 = await client1.identifiers().rotate("multisig",{states: states,rstates: rstates}) - op1 = await eventResponse1.op() - serder = eventResponse1.serder - sigs = eventResponse1.sigs - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) - - ims = signify.d(signify.messagize(serder, sigers)) - atc = ims.substring(serder.size) + eventResponse1 = await client1 + .identifiers() + .rotate('multisig', { states: states, rstates: rstates }); + op1 = await eventResponse1.op(); + serder = eventResponse1.serder; + sigs = eventResponse1.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); let rembeds = { rot: [serder, atc], - } - - smids = states.map((state) => state['i']) - recp = [aid2State, aid3State].map((state) => state['i']) - - await client1.exchanges().send("member1", "multisig", aid1 , "/multisig/rot", - {'gid': serder.pre, smids: smids, rmids: smids}, rembeds, recp) - console.log("Member1 initiates rotation event, waiting for others to join...") + }; + + smids = states.map((state) => state['i']); + recp = [aid2State, aid3State].map((state) => state['i']); + + await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/rot', + { gid: serder.pre, smids: smids, rmids: smids }, + rembeds, + recp + ); + console.log( + 'Member1 initiates rotation event, waiting for others to join...' + ); // Member2 check for notifications and join the rotation event - msgSaid = "" - while (msgSaid=="") { - let notifications = await client2.notifications().list() - for (let notif of notifications.notes){ + msgSaid = ''; + while (msgSaid == '') { + let notifications = await client2.notifications().list(); + for (let notif of notifications.notes) { if (notif.a.r == '/multisig/rot') { - msgSaid = notif.a.d - await client2.notifications().mark(notif.i) - console.log("Member2 received exchange message to join the rotation event") + msgSaid = notif.a.d; + await client2.notifications().mark(notif.i); + console.log( + 'Member2 received exchange message to join the rotation event' + ); } } - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - await new Promise(resolve => setTimeout(resolve, 5000)); - res = await client2.groups().getRequest(msgSaid) - exn = res[0].exn - - icpResult2 = await client2.identifiers().rotate("multisig",{states: states,rstates: rstates}) - op2 = await icpResult2.op() - serder = icpResult2.serder - sigs = icpResult2.sigs - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) - - ims = signify.d(signify.messagize(serder, sigers)) - atc = ims.substring(serder.size) - rembeds = { - rot: [serder, atc], - } + await new Promise((resolve) => setTimeout(resolve, 5000)); + res = await client2.groups().getRequest(msgSaid); + exn = res[0].exn; - smids = exn.a.smids - recp = [aid1State, aid3State].map((state) => state['i']) + icpResult2 = await client2 + .identifiers() + .rotate('multisig', { states: states, rstates: rstates }); + op2 = await icpResult2.op(); + serder = icpResult2.serder; + sigs = icpResult2.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - await client2.exchanges().send("member2", "multisig", aid2, "/multisig/ixn", - {'gid': serder.pre, smids: smids, rmids: smids}, rembeds, recp) - console.log("Member2 joins rotation event, waiting for others...") + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); + rembeds = { + rot: [serder, atc], + }; + + smids = exn.a.smids; + recp = [aid1State, aid3State].map((state) => state['i']); + + await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/ixn', + { gid: serder.pre, smids: smids, rmids: smids }, + rembeds, + recp + ); + console.log('Member2 joins rotation event, waiting for others...'); // Member3 check for notifications and join the rotation event - msgSaid = "" - while (msgSaid=="") { - let notifications = await client3.notifications().list(1) - for (let notif of notifications.notes){ + msgSaid = ''; + while (msgSaid == '') { + let notifications = await client3.notifications().list(1); + for (let notif of notifications.notes) { if (notif.a.r == '/multisig/rot') { - msgSaid = notif.a.d - await client3.notifications().mark(notif.i) - console.log("Member3 received exchange message to join the rotation event") + msgSaid = notif.a.d; + await client3.notifications().mark(notif.i); + console.log( + 'Member3 received exchange message to join the rotation event' + ); } } - await new Promise(resolve => setTimeout(resolve, 1000)); - } - res = await client3.groups().getRequest(msgSaid) - exn = res[0].exn - - icpResult3 = await client3.identifiers().rotate("multisig",{states: states,rstates: rstates}) - op3 = await icpResult3.op() - serder = icpResult3.serder - sigs = icpResult3.sigs - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) - - ims = signify.d(signify.messagize(serder, sigers)) - atc = ims.substring(serder.size) - rembeds = { - rot: [serder, atc], + await new Promise((resolve) => setTimeout(resolve, 1000)); } + res = await client3.groups().getRequest(msgSaid); + exn = res[0].exn; - smids = exn.a.smids - recp = [aid1State, aid2State].map((state) => state['i']) + icpResult3 = await client3 + .identifiers() + .rotate('multisig', { states: states, rstates: rstates }); + op3 = await icpResult3.op(); + serder = icpResult3.serder; + sigs = icpResult3.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - await client3.exchanges().send("member3", "multisig", aid3, "/multisig/ixn", - {'gid': serder.pre, smids: smids, rmids: smids}, rembeds, recp) - console.log("Member3 joins rotation event, waiting for others...") + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); + rembeds = { + rot: [serder, atc], + }; + + smids = exn.a.smids; + recp = [aid1State, aid2State].map((state) => state['i']); + + await client3 + .exchanges() + .send( + 'member3', + 'multisig', + aid3, + '/multisig/ixn', + { gid: serder.pre, smids: smids, rmids: smids }, + rembeds, + recp + ); + console.log('Member3 joins rotation event, waiting for others...'); // Check for completion - while (!op1["done"]) { + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - while (!op2["done"]) { + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - while (!op3["done"]) { + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Multisig rotation completed!") + console.log('Multisig rotation completed!'); - console.log("Starting multisig registry creation") - - let vcpRes1 = await client1.registries().create({name: "member1", registryName: "vLEI Registry", nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}); + console.log('Starting multisig registry creation'); + + let vcpRes1 = await client1 + .registries() + .create({ + name: 'member1', + registryName: 'vLEI Registry', + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }); op1 = await vcpRes1.op(); - serder = vcpRes1.regser - let anc = vcpRes1.serder - sigs = vcpRes1.sigs + serder = vcpRes1.regser; + let anc = vcpRes1.serder; + sigs = vcpRes1.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(anc, sigers)); atc = ims.substring(anc.size); let regbeds = { - vcp: [serder, ""], - anc: [anc, atc] - } - - recp = [aid2["state"], aid3["state"]].map((state) => state['i']) - res = await client1.exchanges().send("member1", "registry", aid1, "/multisig/vcp", - {gid:multisig, usage:"Issue vLEIs"}, regbeds, recp); - - console.log("Member1 initiated registry, waiting for others to join...") + vcp: [serder, ''], + anc: [anc, atc], + }; + + recp = [aid2['state'], aid3['state']].map((state) => state['i']); + res = await client1 + .exchanges() + .send( + 'member1', + 'registry', + aid1, + '/multisig/vcp', + { gid: multisig, usage: 'Issue vLEIs' }, + regbeds, + recp + ); + + console.log('Member1 initiated registry, waiting for others to join...'); // Member2 check for notifications and join the create registry event - msgSaid = "" - while (msgSaid=="") { - let notifications = await client2.notifications().list() - for (let notif of notifications.notes){ + msgSaid = ''; + while (msgSaid == '') { + let notifications = await client2.notifications().list(); + for (let notif of notifications.notes) { if (notif.a.r == '/multisig/vcp') { - msgSaid = notif.a.d - await client2.notifications().mark(notif.i) - console.log("Member2 received exchange message to join the create registry event") + msgSaid = notif.a.d; + await client2.notifications().mark(notif.i); + console.log( + 'Member2 received exchange message to join the create registry event' + ); } } - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - await new Promise(resolve => setTimeout(resolve, 5000)); - res = await client2.groups().getRequest(msgSaid) - exn = res[0].exn + await new Promise((resolve) => setTimeout(resolve, 5000)); + res = await client2.groups().getRequest(msgSaid); + exn = res[0].exn; - let vcpRes2 = await client2.registries().create({name: "member2", registryName: "vLEI Registry", nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}); - op2 = await vcpRes2.op() - serder = vcpRes2.regser - anc = vcpRes2.serder - sigs = vcpRes2.sigs + let vcpRes2 = await client2 + .registries() + .create({ + name: 'member2', + registryName: 'vLEI Registry', + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }); + op2 = await vcpRes2.op(); + serder = vcpRes2.regser; + anc = vcpRes2.serder; + sigs = vcpRes2.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(anc, sigers)); atc = ims.substring(anc.size); regbeds = { - vcp: [serder, ""], - anc: [anc, atc] - } - - recp = [aid1["state"], aid3["state"]].map((state) => state['i']) - await client2.exchanges().send("member2", "registry", aid2, "/multisig/vcp", - {gid:multisig, usage:"Issue vLEIs"}, regbeds, recp); - console.log("Member2 joins rotation event, waiting for others...") + vcp: [serder, ''], + anc: [anc, atc], + }; + + recp = [aid1['state'], aid3['state']].map((state) => state['i']); + await client2 + .exchanges() + .send( + 'member2', + 'registry', + aid2, + '/multisig/vcp', + { gid: multisig, usage: 'Issue vLEIs' }, + regbeds, + recp + ); + console.log('Member2 joins rotation event, waiting for others...'); // Member3 check for notifications and join the create registry event - msgSaid = "" - while (msgSaid=="") { - let notifications = await client3.notifications().list() - for (let notif of notifications.notes){ + msgSaid = ''; + while (msgSaid == '') { + let notifications = await client3.notifications().list(); + for (let notif of notifications.notes) { if (notif.a.r == '/multisig/vcp') { - msgSaid = notif.a.d - await client3.notifications().mark(notif.i) - console.log("Member3 received exchange message to join the create registry event") + msgSaid = notif.a.d; + await client3.notifications().mark(notif.i); + console.log( + 'Member3 received exchange message to join the create registry event' + ); } } - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - await new Promise(resolve => setTimeout(resolve, 5000)); - res = await client3.groups().getRequest(msgSaid) - exn = res[0].exn + await new Promise((resolve) => setTimeout(resolve, 5000)); + res = await client3.groups().getRequest(msgSaid); + exn = res[0].exn; - let vcpRes3 = await client3.registries().create({name: "member3", registryName: "vLEI Registry", nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}); - op3 = await vcpRes3.op() - serder = vcpRes2.regser - anc = vcpRes2.serder - sigs = vcpRes2.sigs + let vcpRes3 = await client3 + .registries() + .create({ + name: 'member3', + registryName: 'vLEI Registry', + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }); + op3 = await vcpRes3.op(); + serder = vcpRes2.regser; + anc = vcpRes2.serder; + sigs = vcpRes2.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(anc, sigers)); atc = ims.substring(anc.size); regbeds = { - vcp: [serder, ""], - anc: [anc, atc] - } - - recp = [aid1["state"], aid2["state"]].map((state) => state['i']) - await client3.exchanges().send("member3", "multisig", aid3, "/multisig/vcp", - {gid:multisig, usage:"Issue vLEIs"}, regbeds, recp); + vcp: [serder, ''], + anc: [anc, atc], + }; + + recp = [aid1['state'], aid2['state']].map((state) => state['i']); + await client3 + .exchanges() + .send( + 'member3', + 'multisig', + aid3, + '/multisig/vcp', + { gid: multisig, usage: 'Issue vLEIs' }, + regbeds, + recp + ); // Done - while (!op1["done"]) { + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - while (!op2["done"]) { + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - while (!op3["done"]) { + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } // console.log("Multisig create registry completed!") } diff --git a/examples/integration-scripts/randy.ts b/examples/integration-scripts/randy.ts index 103311fc..d42cad80 100644 --- a/examples/integration-scripts/randy.ts +++ b/examples/integration-scripts/randy.ts @@ -1,20 +1,30 @@ -import { strict as assert } from "assert" -import signify from "signify-ts" +import { strict as assert } from 'assert'; +import signify from 'signify-ts'; -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -await run() +await run(); async function run() { - await signify.ready() + await signify.ready(); // Boot client - const bran1 = signify.randomPasscode() - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); - await client1.boot() - await client1.connect() - const state1 = await client1.state() - console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) + const bran1 = signify.randomPasscode(); + const client1 = new signify.SignifyClient( + url, + bran1, + signify.Tier.low, + boot_url + ); + await client1.boot(); + await client1.connect(); + const state1 = await client1.state(); + console.log( + 'Client 1 connected. Client AID:', + state1.controller.state.i, + 'Agent AID: ', + state1.agent.i + ); let icpResult = await client1.identifiers().create('aid1', {algo: signify.Algos.randy}) let op = await icpResult.op() @@ -26,43 +36,44 @@ async function run() { assert.equal(icp.ked['kt'], '1') assert.equal(icp.ked['nt'], '1') + let aids = await client1.identifiers().list(); + assert.equal(aids.aids.length, 1); + aid = aids.aids[0]; + assert.equal(aid.name, 'aid1'); + assert.equal(aid.prefix, icp.pre); - let aids = await client1.identifiers().list() - assert.equal(aids.aids.length, 1) - aid = aids.aids[0] - assert.equal(aid.name, 'aid1') - assert.equal(aid.prefix, icp.pre) + icpResult = await client1.identifiers().interact('aid1', [icp.pre]); + op = await icpResult.op(); + assert.equal(op['done'], true); + let ked = op['response']; + let ixn = new signify.Serder(ked); + assert.equal(ixn.ked['s'], '1'); + assert.deepEqual(ixn.ked['a'], [icp.pre]); - icpResult = await client1.identifiers().interact("aid1", [icp.pre]) - op = await icpResult.op() - assert.equal(op['done'], true) - let ked = op['response'] - let ixn = new signify.Serder(ked) - assert.equal(ixn.ked['s'], '1') - assert.deepEqual(ixn.ked['a'], [icp.pre]) - - aids = await client1.identifiers().list() - assert.equal(aids.aids.length, 1) - aid = aids.aids[0] + aids = await client1.identifiers().list(); + assert.equal(aids.aids.length, 1); + aid = aids.aids[0]; - const events = client1.keyEvents() - let log = await events.get(aid["prefix"]) - assert.equal(log.length, 2) - - icpResult = await client1.identifiers().rotate('aid1') - op = await icpResult.op() - assert.equal(op['done'], true) - ked = op['response'] - let rot = new signify.Serder(ked) - assert.equal(rot.ked['s'], '2') - assert.equal(rot.verfers.length, 1) - assert.equal(rot.digers.length, 1) - assert.notEqual(rot.verfers[0].qb64, icp.verfers[0].qb64) - assert.notEqual(rot.digers[0].qb64, icp.digers[0].qb64) - let dig = new signify.Diger({code: signify.MtrDex.Blake3_256},rot.verfers[0].qb64b, ) - assert.equal(dig.qb64, icp.digers[0].qb64) - log = await events.get(aid["prefix"]) - assert.equal(log.length, 3) - console.log("Randy test passed") + const events = client1.keyEvents(); + let log = await events.get(aid['prefix']); + assert.equal(log.length, 2); -} \ No newline at end of file + icpResult = await client1.identifiers().rotate('aid1'); + op = await icpResult.op(); + assert.equal(op['done'], true); + ked = op['response']; + let rot = new signify.Serder(ked); + assert.equal(rot.ked['s'], '2'); + assert.equal(rot.verfers.length, 1); + assert.equal(rot.digers.length, 1); + assert.notEqual(rot.verfers[0].qb64, icp.verfers[0].qb64); + assert.notEqual(rot.digers[0].qb64, icp.digers[0].qb64); + let dig = new signify.Diger( + { code: signify.MtrDex.Blake3_256 }, + rot.verfers[0].qb64b + ); + assert.equal(dig.qb64, icp.digers[0].qb64); + log = await events.get(aid['prefix']); + assert.equal(log.length, 3); + console.log('Randy test passed'); +} diff --git a/examples/integration-scripts/request-present.ts b/examples/integration-scripts/request-present.ts index 3f4d0523..bbb88667 100644 --- a/examples/integration-scripts/request-present.ts +++ b/examples/integration-scripts/request-present.ts @@ -1,222 +1,263 @@ -import { strict as assert } from "assert" -import signify from "signify-ts" +import { strict as assert } from 'assert'; +import signify from 'signify-ts'; -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -await run() +await run(); async function run() { - await signify.ready() + await signify.ready(); // Boot three clients - const bran1 = signify.randomPasscode() - const bran2 = signify.randomPasscode() - const bran3 = signify.randomPasscode() - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); - const client2 = new signify.SignifyClient(url, bran2, signify.Tier.low, boot_url); - const client3 = new signify.SignifyClient(url, bran3, signify.Tier.low, boot_url); - await client1.boot() - await client2.boot() - await client3.boot() - await client1.connect() - await client2.connect() - await client3.connect() - const state1 = await client1.state() - const state2 = await client2.state() - const state3 = await client3.state() - console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - console.log("Client 2 connected. Client AID:",state2.controller.state.i,"Agent AID: ", state2.agent.i) - console.log("Client 3 connected. Client AID:",state3.controller.state.i,"Agent AID: ", state3.agent.i) - + const bran1 = signify.randomPasscode(); + const bran2 = signify.randomPasscode(); + const bran3 = signify.randomPasscode(); + const client1 = new signify.SignifyClient( + url, + bran1, + signify.Tier.low, + boot_url + ); + const client2 = new signify.SignifyClient( + url, + bran2, + signify.Tier.low, + boot_url + ); + const client3 = new signify.SignifyClient( + url, + bran3, + signify.Tier.low, + boot_url + ); + await client1.boot(); + await client2.boot(); + await client3.boot(); + await client1.connect(); + await client2.connect(); + await client3.connect(); + const state1 = await client1.state(); + const state2 = await client2.state(); + const state3 = await client3.state(); + console.log( + 'Client 1 connected. Client AID:', + state1.controller.state.i, + 'Agent AID: ', + state1.agent.i + ); + console.log( + 'Client 2 connected. Client AID:', + state2.controller.state.i, + 'Agent AID: ', + state2.agent.i + ); + console.log( + 'Client 3 connected. Client AID:', + state3.controller.state.i, + 'Agent AID: ', + state3.agent.i + ); // Create two identifiers, one for each client - let op1 = await client1.identifiers().create('issuer', { + let op1 = await client1.identifiers().create('issuer', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - while (!op1["done"] ) { - op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - const aid1 = await client1.identifiers().get("issuer") - await client1.identifiers().addEndRole("issuer", 'agent', client1!.agent!.pre) - console.log("Issuer's AID:", aid1.prefix) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + const aid1 = await client1.identifiers().get('issuer'); + await client1 + .identifiers() + .addEndRole('issuer', 'agent', client1!.agent!.pre); + console.log("Issuer's AID:", aid1.prefix); - let op2 = await client2.identifiers().create('recipient', { + let op2 = await client2.identifiers().create('recipient', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - while (!op2["done"] ) { - op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - const aid2 = await client2.identifiers().get("recipient") - await client2.identifiers().addEndRole("recipient", 'agent', client2!.agent!.pre) - console.log("Recipient's AID:", aid2.prefix) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + while (!op2['done']) { + op2 = await client2.operations().get(op2.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + const aid2 = await client2.identifiers().get('recipient'); + await client2 + .identifiers() + .addEndRole('recipient', 'agent', client2!.agent!.pre); + console.log("Recipient's AID:", aid2.prefix); - let op3 = await client3.identifiers().create('verifier', { + let op3 = await client3.identifiers().create('verifier', { toad: 3, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"] - }) - while (!op3["done"] ) { - op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - const aid3 = await client3.identifiers().get("verifier") - await client3.identifiers().addEndRole("verifier", 'agent', client3!.agent!.pre) - console.log("Verifier's AID:", aid3.prefix) + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + while (!op3['done']) { + op3 = await client3.operations().get(op3.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + const aid3 = await client3.identifiers().get('verifier'); + await client3 + .identifiers() + .addEndRole('verifier', 'agent', client3!.agent!.pre); + console.log("Verifier's AID:", aid3.prefix); - const schemaSAID = "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao" + const schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; // Exchenge OOBIs - console.log("Resolving OOBIs...") - let oobi1 = await client1.oobis().get("issuer","agent") - let oobi2 = await client2.oobis().get("recipient","agent") - let oobi3 = await client3.oobis().get("verifier","agent") - let schemaOobi = "http://127.0.0.1:7723/oobi/" + schemaSAID - - op1 = await client1.oobis().resolve(oobi2.oobis[0],"recipient") - while (!op1["done"]) { + console.log('Resolving OOBIs...'); + let oobi1 = await client1.oobis().get('issuer', 'agent'); + let oobi2 = await client2.oobis().get('recipient', 'agent'); + let oobi3 = await client3.oobis().get('verifier', 'agent'); + let schemaOobi = 'http://127.0.0.1:7723/oobi/' + schemaSAID; + + op1 = await client1.oobis().resolve(oobi2.oobis[0], 'recipient'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op1 = await client1.oobis().resolve(oobi3.oobis[0],"verifier") - while (!op1["done"]) { + op1 = await client1.oobis().resolve(oobi3.oobis[0], 'verifier'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op1 = await client1.oobis().resolve(schemaOobi,"schema") - while (!op1["done"]) { + op1 = await client1.oobis().resolve(schemaOobi, 'schema'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Issuer resolved 3 OOBIs") - - op2 = await client2.oobis().resolve(oobi1.oobis[0],"issuer") - while (!op2["done"]) { + console.log('Issuer resolved 3 OOBIs'); + + op2 = await client2.oobis().resolve(oobi1.oobis[0], 'issuer'); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op2 = await client2.oobis().resolve(oobi3.oobis[0],"verifier") - while (!op2["done"]) { + op2 = await client2.oobis().resolve(oobi3.oobis[0], 'verifier'); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op2 = await client2.oobis().resolve(schemaOobi,"schema") - while (!op2["done"]) { + op2 = await client2.oobis().resolve(schemaOobi, 'schema'); + while (!op2['done']) { op2 = await client2.operations().get(op2.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Recipient resolved 3 OOBIs") + console.log('Recipient resolved 3 OOBIs'); - op3 = await client3.oobis().resolve(oobi1.oobis[0],"issuer") - while (!op3["done"]) { + op3 = await client3.oobis().resolve(oobi1.oobis[0], 'issuer'); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op3 = await client3.oobis().resolve(oobi2.oobis[0],"recipient") - while (!op3["done"]) { + op3 = await client3.oobis().resolve(oobi2.oobis[0], 'recipient'); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - op3 = await client3.oobis().resolve(schemaOobi,"schema") - while (!op3["done"]) { + op3 = await client3.oobis().resolve(schemaOobi, 'schema'); + while (!op3['done']) { op3 = await client3.operations().get(op3.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Verifier resolved 3 OOBIs") + console.log('Verifier resolved 3 OOBIs'); // Create registry for issuer - op1 = await client1.registries().create('issuer','vLEI') - while (!op1["done"]) { + op1 = await client1.registries().create('issuer', 'vLEI'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - let registries = await client1.registries().list('issuer') - assert.equal(registries.length, 1) - assert.equal(registries[0].name, 'vLEI') - let schema = await client1.schemas().get(schemaSAID) - assert.equal(schema.$id, schemaSAID) - let schemas = await client2.schemas().list() - assert.equal(schemas.length, 1) - assert.equal(schemas[0].$id, schemaSAID) - console.log("Registry created") + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + let registries = await client1.registries().list('issuer'); + assert.equal(registries.length, 1); + assert.equal(registries[0].name, 'vLEI'); + let schema = await client1.schemas().get(schemaSAID); + assert.equal(schema.$id, schemaSAID); + let schemas = await client2.schemas().list(); + assert.equal(schemas.length, 1); + assert.equal(schemas[0].$id, schemaSAID); + console.log('Registry created'); // Issue credential const vcdata = { - "LEI": "5493001KJTIIGC8Y1R17" - } - op1 = await client1.credentials().issue('issuer',registries[0].regk, schemaSAID,aid2.prefix,vcdata) - while (!op1["done"]) { + LEI: '5493001KJTIIGC8Y1R17', + }; + op1 = await client1 + .credentials() + .issue('issuer', registries[0].regk, schemaSAID, aid2.prefix, vcdata); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - let creds1 = await client1.credentials().list('issuer') - assert.equal(creds1.length, 1) - assert.equal(creds1[0].sad.s, schemaSAID) - assert.equal(creds1[0].sad.i, aid1.prefix) - assert.equal(creds1[0].status.s, "0") // 0 = issued - console.log("Credential issued") + let creds1 = await client1.credentials().list('issuer'); + assert.equal(creds1.length, 1); + assert.equal(creds1[0].sad.s, schemaSAID); + assert.equal(creds1[0].sad.i, aid1.prefix); + assert.equal(creds1[0].status.s, '0'); // 0 = issued + console.log('Credential issued'); // Recipient check issued credential - let creds2 = await client2.credentials().list('recipient') - assert.equal(creds2.length, 1) - assert.equal(creds2[0].sad.s, schemaSAID) - assert.equal(creds2[0].sad.i, aid1.prefix) - assert.equal(creds2[0].status.s, "0") // 0 = issued - console.log("Credential received by recipient") + let creds2 = await client2.credentials().list('recipient'); + assert.equal(creds2.length, 1); + assert.equal(creds2[0].sad.s, schemaSAID); + assert.equal(creds2[0].sad.i, aid1.prefix); + assert.equal(creds2[0].status.s, '0'); // 0 = issued + console.log('Credential received by recipient'); // Verifier request credential to recipient - await client3.credentials().request('verifier', aid2.prefix, schemaSAID) + await client3.credentials().request('verifier', aid2.prefix, schemaSAID); // Recipient checks for a presentation request notification - let requestReceived = false + let requestReceived = false; while (!requestReceived) { - let notifications = await client2.notifications().list() - for (let notif of notifications){ + let notifications = await client2.notifications().list(); + for (let notif of notifications) { if (notif.a.r == '/presentation/request') { - assert.equal(notif.a.schema.n, schemaSAID) - requestReceived = true - await client2.notifications().mark(notif.i) + assert.equal(notif.a.schema.n, schemaSAID); + requestReceived = true; + await client2.notifications().mark(notif.i); } } - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - + // Recipient present credential to verifier - await client1.credentials().present('issuer', creds1[0].sad.d, 'verifier', true) + await client1 + .credentials() + .present('issuer', creds1[0].sad.d, 'verifier', true); // Verifier checks for a presentation notification - requestReceived = false + requestReceived = false; while (!requestReceived) { - let notifications = await client3.notifications().list() - for (let notif of notifications){ + let notifications = await client3.notifications().list(); + for (let notif of notifications) { if (notif.a.r == '/presentation') { - assert.equal(notif.a.schema.n, schemaSAID) - requestReceived = true - await client3.notifications().mark(notif.i) + assert.equal(notif.a.schema.n, schemaSAID); + requestReceived = true; + await client3.notifications().mark(notif.i); } } - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - let creds3 = await client3.credentials().list('verifier',{filter:{"-i": {"$eq": aid1.prefix}}}) // filter by issuer - assert.equal(creds3.length, 1) - assert.equal(creds3[0].sad.s, schemaSAID) - assert.equal(creds3[0].sad.i, aid1.prefix) - assert.equal(creds3[0].status.s, "0") // 0 = issued - assert.equal(creds3[0].sad.a.i, aid2.prefix) // verify that the issuee is the same as the presenter - console.log("Credential presented and received by verifier") - - - -} \ No newline at end of file + let creds3 = await client3 + .credentials() + .list('verifier', { filter: { '-i': { $eq: aid1.prefix } } }); // filter by issuer + assert.equal(creds3.length, 1); + assert.equal(creds3[0].sad.s, schemaSAID); + assert.equal(creds3[0].sad.i, aid1.prefix); + assert.equal(creds3[0].status.s, '0'); // 0 = issued + assert.equal(creds3[0].sad.a.i, aid2.prefix); // verify that the issuee is the same as the presenter + console.log('Credential presented and received by verifier'); +} diff --git a/examples/integration-scripts/salty.ts b/examples/integration-scripts/salty.ts index 09d8a7b5..73724ea9 100644 --- a/examples/integration-scripts/salty.ts +++ b/examples/integration-scripts/salty.ts @@ -1,20 +1,30 @@ -import { strict as assert } from "assert" -import signify from "signify-ts" +import { strict as assert } from 'assert'; +import signify from 'signify-ts'; -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -await run() +await run(); async function run() { - await signify.ready() + await signify.ready(); // Boot client - const bran1 = signify.randomPasscode() - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); - await client1.boot() - await client1.connect() - const state1 = await client1.state() - console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) + const bran1 = signify.randomPasscode(); + const client1 = new signify.SignifyClient( + url, + bran1, + signify.Tier.low, + boot_url + ); + await client1.boot(); + await client1.connect(); + const state1 = await client1.state(); + console.log( + 'Client 1 connected. Client AID:', + state1.controller.state.i, + 'Agent AID: ', + state1.agent.i + ); let icpResult = await client1.identifiers().create('aid1', {bran: '0123456789abcdefghijk'}) let op = await icpResult.op() @@ -62,64 +72,69 @@ async function run() { assert.equal(salt.stem, 'signify:aid') assert.equal(aid.prefix, icp2.pre) - await client1.identifiers().create('aid3') - aids = await client1.identifiers().list() - assert.equal(aids.aids.length, 3) - aid = aids.aids[0] - assert.equal(aid.name, 'aid1') - - aids = await client1.identifiers().list(1,2) - assert.equal(aids.aids.length, 2) - aid = aids.aids[0] - assert.equal(aid.name, 'aid2') + await client1.identifiers().create('aid3'); + aids = await client1.identifiers().list(); + assert.equal(aids.aids.length, 3); + aid = aids.aids[0]; + assert.equal(aid.name, 'aid1'); - aids = await client1.identifiers().list(2,2) - assert.equal(aids.aids.length, 1) - aid = aids.aids[0] - assert.equal(aid.name, 'aid3') + aids = await client1.identifiers().list(1, 2); + assert.equal(aids.aids.length, 2); + aid = aids.aids[0]; + assert.equal(aid.name, 'aid2'); - icpResult = await client1.identifiers().rotate('aid1') - op = await icpResult.op() - assert.equal(op['done'], true) - let ked = op['response'] - let rot = new signify.Serder(ked) - assert.equal(rot.ked['d'], 'EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg') - assert.equal(rot.ked['s'], '1') - assert.equal(rot.verfers.length, 1) - assert.equal(rot.digers.length, 1) - assert.equal(rot.verfers[0].qb64, 'DHgomzINlGJHr-XP3sv2ZcR9QsIEYS3LJhs4KRaZYKly') - assert.equal(rot.digers[0].qb64, 'EJMovBlrBuD6BVeUsGSxLjczbLEbZU9YnTSud9K4nVzk') + aids = await client1.identifiers().list(2, 2); + assert.equal(aids.aids.length, 1); + aid = aids.aids[0]; + assert.equal(aid.name, 'aid3'); - icpResult = await client1.identifiers().interact("aid1", [icp.pre]) - op = await icpResult.op() - assert.equal(op['done'], true) - ked = op['response'] - let ixn = new signify.Serder(ked) - assert.equal(ixn.ked['d'], 'ENsmRAg_oM7Hl1S-GTRMA7s4y760lQMjzl0aqOQ2iTce') - assert.equal(ixn.ked['s'], '2') - assert.deepEqual(ixn.ked['a'], [icp.pre]) + icpResult = await client1.identifiers().rotate('aid1'); + op = await icpResult.op(); + assert.equal(op['done'], true); + let ked = op['response']; + let rot = new signify.Serder(ked); + assert.equal(rot.ked['d'], 'EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg'); + assert.equal(rot.ked['s'], '1'); + assert.equal(rot.verfers.length, 1); + assert.equal(rot.digers.length, 1); + assert.equal( + rot.verfers[0].qb64, + 'DHgomzINlGJHr-XP3sv2ZcR9QsIEYS3LJhs4KRaZYKly' + ); + assert.equal( + rot.digers[0].qb64, + 'EJMovBlrBuD6BVeUsGSxLjczbLEbZU9YnTSud9K4nVzk' + ); - aid = await client1.identifiers().get("aid1") - const state = aid["state"] + icpResult = await client1.identifiers().interact('aid1', [icp.pre]); + op = await icpResult.op(); + assert.equal(op['done'], true); + ked = op['response']; + let ixn = new signify.Serder(ked); + assert.equal(ixn.ked['d'], 'ENsmRAg_oM7Hl1S-GTRMA7s4y760lQMjzl0aqOQ2iTce'); + assert.equal(ixn.ked['s'], '2'); + assert.deepEqual(ixn.ked['a'], [icp.pre]); - assert.equal(state['s'], '2') - assert.equal(state['f'], '2') - assert.equal(state['et'], 'ixn') - assert.equal(state['d'], ixn.ked['d']) - assert.equal(state['ee']['d'], rot.ked['d']) + aid = await client1.identifiers().get('aid1'); + const state = aid['state']; - const events = client1.keyEvents() - const log = await events.get(aid["prefix"]) - assert.equal(log.length, 3) - let serder = new signify.Serder(log[0]) - assert.equal(serder.pre, icp.pre) - assert.equal(serder.ked['d'], icp.ked['d']) - serder = new signify.Serder(log[1]) - assert.equal(serder.pre, rot.pre) - assert.equal(serder.ked['d'], rot.ked['d']) - serder = new signify.Serder(log[2]) - assert.equal(serder.pre, ixn.pre) - assert.equal(serder.ked['d'], ixn.ked['d']) - console.log("Salty test passed") + assert.equal(state['s'], '2'); + assert.equal(state['f'], '2'); + assert.equal(state['et'], 'ixn'); + assert.equal(state['d'], ixn.ked['d']); + assert.equal(state['ee']['d'], rot.ked['d']); -} \ No newline at end of file + const events = client1.keyEvents(); + const log = await events.get(aid['prefix']); + assert.equal(log.length, 3); + let serder = new signify.Serder(log[0]); + assert.equal(serder.pre, icp.pre); + assert.equal(serder.ked['d'], icp.ked['d']); + serder = new signify.Serder(log[1]); + assert.equal(serder.pre, rot.pre); + assert.equal(serder.ked['d'], rot.ked['d']); + serder = new signify.Serder(log[2]); + assert.equal(serder.pre, ixn.pre); + assert.equal(serder.ked['d'], ixn.ked['d']); + console.log('Salty test passed'); +} diff --git a/examples/integration-scripts/witness.ts b/examples/integration-scripts/witness.ts index f542df91..37a24a79 100644 --- a/examples/integration-scripts/witness.ts +++ b/examples/integration-scripts/witness.ts @@ -1,79 +1,94 @@ // This scrip also work if you start keria with no config file with witness urls -import { strict as assert } from "assert"; -import signify from "signify-ts"; +import { strict as assert } from 'assert'; +import signify from 'signify-ts'; -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -await run() +await run(); async function run() { - await signify.ready() + await signify.ready(); // Boot client - const bran1 = signify.randomPasscode() - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url); - await client1.boot() - await client1.connect() - const state1 = await client1.state() - console.log("Client connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) + const bran1 = signify.randomPasscode(); + const client1 = new signify.SignifyClient( + url, + bran1, + signify.Tier.low, + boot_url + ); + await client1.boot(); + await client1.connect(); + const state1 = await client1.state(); + console.log( + 'Client connected. Client AID:', + state1.controller.state.i, + 'Agent AID: ', + state1.agent.i + ); - const witness = "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha" + const witness = 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'; // Client 1 resolves witness OOBI - let op1 = await client1.oobis().resolve("http://127.0.0.1:5642/oobi/" + witness,"wit") - while (!op1["done"]) { + let op1 = await client1 + .oobis() + .resolve('http://127.0.0.1:5642/oobi/' + witness, 'wit'); + while (!op1['done']) { op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Witness OOBI resolved") + console.log('Witness OOBI resolved'); // Client 1 creates AID with 1 witness - let icpResult1 = await client1.identifiers().create('aid1',{ + let icpResult1 = await client1.identifiers().create('aid1', { toad: 1, - wits: ["BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha"] - }) - op1 = await icpResult1.op() - while (!op1["done"] ) { - op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - let aid1 = await client1.identifiers().get("aid1") - console.log("AID:",aid1.prefix) - assert.equal(aid1.state.b.length, 1) - assert.equal(aid1.state.b[0], witness) + wits: ['BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'], + }); + op1 = await icpResult1.op(); + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + let aid1 = await client1.identifiers().get('aid1'); + console.log('AID:', aid1.prefix); + assert.equal(aid1.state.b.length, 1); + assert.equal(aid1.state.b[0], witness); - icpResult1 = await client1.identifiers().rotate('aid1') - op1 = await icpResult1.op() - while (!op1["done"] ) { - op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - aid1 = await client1.identifiers().get("aid1") - assert.equal(aid1.state.b.length, 1) - assert.equal(aid1.state.b[0], witness) + icpResult1 = await client1.identifiers().rotate('aid1'); + op1 = await icpResult1.op(); + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + aid1 = await client1.identifiers().get('aid1'); + assert.equal(aid1.state.b.length, 1); + assert.equal(aid1.state.b[0], witness); // Remove witness - icpResult1 = await client1.identifiers().rotate('aid1',{cuts: [witness]}) + icpResult1 = await client1 + .identifiers() + .rotate('aid1', { cuts: [witness] }); - op1 = await icpResult1.op() - while (!op1["done"] ) { - op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - aid1 = await client1.identifiers().get("aid1") - assert.equal(aid1.state.b.length, 0) + op1 = await icpResult1.op(); + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + aid1 = await client1.identifiers().get('aid1'); + assert.equal(aid1.state.b.length, 0); // Add witness again - icpResult1 = await client1.identifiers().rotate('aid1',{adds: [witness]}) + icpResult1 = await client1 + .identifiers() + .rotate('aid1', { adds: [witness] }); - op1 = await icpResult1.op() - while (!op1["done"] ) { - op1 = await client1.operations().get(op1.name); - await new Promise(resolve => setTimeout(resolve, 1000)); - } - aid1 = await client1.identifiers().get("aid1") - assert.equal(aid1.state.b.length, 1) - assert.equal(aid1.state.b.length, 1) - assert.equal(aid1.state.b[0], witness) - -} \ No newline at end of file + op1 = await icpResult1.op(); + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + aid1 = await client1.identifiers().get('aid1'); + assert.equal(aid1.state.b.length, 1); + assert.equal(aid1.state.b.length, 1); + assert.equal(aid1.state.b[0], witness); +} diff --git a/examples/scripts/client.ts b/examples/scripts/client.ts index af503d23..a02a6d04 100644 --- a/examples/scripts/client.ts +++ b/examples/scripts/client.ts @@ -1,118 +1,127 @@ -import signify from "signify-ts"; +import signify from 'signify-ts'; await connect(); async function connect() { - let url = "http://127.0.0.1:3901" - let bran = '0123456789abcdefghijk' + let url = 'http://127.0.0.1:3901'; + let bran = '0123456789abcdefghijk'; await signify.ready(); const client = new signify.SignifyClient(url, bran); - console.log(client.controller.pre) + console.log(client.controller.pre); const [evt, sign] = client.controller?.event ?? []; const data = { icp: evt.ked, sig: sign.qb64, stem: client.controller?.stem, pidx: 1, - tier: client.controller?.tier + tier: client.controller?.tier, }; - await fetch("http://127.0.0.1:3903/boot", { - method: "POST", + await fetch('http://127.0.0.1:3903/boot', { + method: 'POST', body: JSON.stringify(data), headers: { - "Content-Type": "application/json" - } - }) + 'Content-Type': 'application/json', + }, + }); + await client.connect(); + let d = await client.state(); + console.log('Connected: '); + console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - await client.connect() - let d = await client.state() - console.log("Connected: ") - console.log(" Agent: ", d.agent.i, " Controller: ", d.controller.state.i) + let identifiers = client.identifiers(); + const oobis = client.oobis(); + const operations = client.operations(); + const exchanges = client.exchanges(); - let identifiers = client.identifiers() - const oobis = client.oobis() - const operations = client.operations() - const exchanges = client.exchanges() + let salt = 'abcdefghijk0123456789'; + let res = identifiers.create('multisig-ts', { bran: salt }); + let op = await res.op(); + let aid = op['response']; - let salt = 'abcdefghijk0123456789' - let res = identifiers.create("multisig-ts", {bran: salt}) - let op = await res.op() - let aid = op["response"] + await identifiers.addEndRole('multisig-ts', 'agent', d.agent.i); - await identifiers.addEndRole("multisig-ts", "agent", d.agent.i) + console.log('Created AID: ', aid); - console.log("Created AID: ", aid) - - console.log("Resolving delegator...") + console.log('Resolving delegator...'); op = await oobis.resolve( - "http://127.0.0.1:5642/oobi/EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv" + - "_VmF_dJNN6vkf2Ha", - "delegator"); - while (!op["done"]) { - op = await operations.get(op["name"]); - await new Promise(resolve => setTimeout(resolve, 1000)); // sleep for 1 second + 'http://127.0.0.1:5642/oobi/EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv' + + '_VmF_dJNN6vkf2Ha', + 'delegator' + ); + while (!op['done']) { + op = await operations.get(op['name']); + await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second } - console.log("done.") + console.log('done.'); // let delegator = op['response'] - console.log("Resolving multisig-kli...") + console.log('Resolving multisig-kli...'); op = await oobis.resolve( - "http://127.0.0.1:5642/oobi/EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ", - "multisig-kli"); - while (!op["done"]) { - op = await operations.get(op["name"]); - await new Promise(resolve => setTimeout(resolve, 1000)); // sleep for 1 second + 'http://127.0.0.1:5642/oobi/EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ', + 'multisig-kli' + ); + while (!op['done']) { + op = await operations.get(op['name']); + await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second } - console.log("done.") - let kli = op['response'] + console.log('done.'); + let kli = op['response']; - console.log("Resolving multisig-sigpy...") + console.log('Resolving multisig-sigpy...'); op = await oobis.resolve( - "http://127.0.0.1:3902/oobi/EBcIURLpxmVwahksgrsGW6_dUw0zBhyEHYFk17eWrZfk/agent/EERMVxqeHfFo_eIvyzBXaKdT1EyobZdSs1QXuFyYLjmz", - "multisig-sigpy"); - while (!op["done"]) { - op = await operations.get(op["name"]); - await new Promise(resolve => setTimeout(resolve, 1000)); // sleep for 1 second + 'http://127.0.0.1:3902/oobi/EBcIURLpxmVwahksgrsGW6_dUw0zBhyEHYFk17eWrZfk/agent/EERMVxqeHfFo_eIvyzBXaKdT1EyobZdSs1QXuFyYLjmz', + 'multisig-sigpy' + ); + while (!op['done']) { + op = await operations.get(op['name']); + await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second } - console.log("done.") - let sigPy = op['response'] + console.log('done.'); + let sigPy = op['response']; - aid = await identifiers.get("multisig-ts") - let sigTs = aid['state'] + aid = await identifiers.get('multisig-ts'); + let sigTs = aid['state']; - let states = [sigPy, kli, sigTs] - let ires = identifiers.create("multisig", { - algo: signify.Algos.group, mhab: aid, - delpre: "EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7", + let states = [sigPy, kli, sigTs]; + let ires = identifiers.create('multisig', { + algo: signify.Algos.group, + mhab: aid, + delpre: 'EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7', toad: 2, wits: [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ], - isith: ["1/3", "1/3", "1/3"], nsith: ["1/3", "1/3", "1/3"], + isith: ['1/3', '1/3', '1/3'], + nsith: ['1/3', '1/3', '1/3'], states: states, - rstates: states - }) + rstates: states, + }); - let serder = ires.serder - let sigs = ires.sigs - let sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) + let serder = ires.serder; + let sigs = ires.sigs; + let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - let ims = signify.d(signify.messagize(serder, sigers)) - let atc = ims.substring(serder.size) + let ims = signify.d(signify.messagize(serder, sigers)); + let atc = ims.substring(serder.size); let embeds = { icp: [serder, atc], - } - - let smids = states.map((state) => state['i']) - let recp = [sigPy, kli].map((state) => state['i']) - - await exchanges.send("multisig-ts", "multisig", aid, "/multisig/icp", - {'gid': serder.pre, smids: smids, rmids: smids}, embeds, recp) + }; + let smids = states.map((state) => state['i']); + let recp = [sigPy, kli].map((state) => state['i']); + + await exchanges.send( + 'multisig-ts', + 'multisig', + aid, + '/multisig/icp', + { gid: serder.pre, smids: smids, rmids: smids }, + embeds, + recp + ); } - diff --git a/examples/scripts/list_notifications.ts b/examples/scripts/list_notifications.ts index ead6dfb4..f7e3ea9d 100644 --- a/examples/scripts/list_notifications.ts +++ b/examples/scripts/list_notifications.ts @@ -1,4 +1,4 @@ -import signify from "signify-ts"; +import signify from 'signify-ts'; import promptSync from 'prompt-sync'; const prmpt = promptSync({ sigint: true }); @@ -6,86 +6,107 @@ const prmpt = promptSync({ sigint: true }); await list_notifications(); async function list_notifications() { - let url = "http://127.0.0.1:3901" - let bran = '0123456789abcdefghijk' + let url = 'http://127.0.0.1:3901'; + let bran = '0123456789abcdefghijk'; await signify.ready(); const client = new signify.SignifyClient(url, bran); - await client.connect() - let d = await client.state() - console.log("Connected: ") - console.log(" Agent: ", d.agent.i, " Controller: ", d.controller.state.i) + await client.connect(); + let d = await client.state(); + console.log('Connected: '); + console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - let identifiers = client.identifiers() - let notifications = client.notifications() - let groups = client.groups() - let registries = client.registries() + let identifiers = client.identifiers(); + let notifications = client.notifications(); + let groups = client.groups(); + let registries = client.registries(); - let res = await notifications.list() - let notes = res.notes + let res = await notifications.list(); + let notes = res.notes; for (const note of notes) { - let payload = note.a - let route = payload.r + let payload = note.a; + let route = payload.r; if (route === '/multisig/vcp') { - let res = await groups.getRequest(payload.d) + let res = await groups.getRequest(payload.d); if (res.length == 0) { - console.log("error extracting exns matching nre for " + payload.data) + console.log( + 'error extracting exns matching nre for ' + payload.data + ); } - let msg = res[0] - - let sender = msg['sender'] - let group = msg["groupName"] - - let exn = msg['exn'] - let usage = exn['a']["usage"] - console.log("Credential registry inception request for group AID :" + group) - console.log("\tReceived from: " + sender) - console.log("\tPurpose: " + usage) - console.log("\nAuto-creating new registry...") - let yes = prmpt("Approve [Y|n]? ") - if (yes === "y" || yes === "Y" || yes === "") { + let msg = res[0]; + + let sender = msg['sender']; + let group = msg['groupName']; + + let exn = msg['exn']; + let usage = exn['a']['usage']; + console.log( + 'Credential registry inception request for group AID :' + group + ); + console.log('\tReceived from: ' + sender); + console.log('\tPurpose: ' + usage); + console.log('\nAuto-creating new registry...'); + let yes = prmpt('Approve [Y|n]? '); + if (yes === 'y' || yes === 'Y' || yes === '') { try { - let registryName = prmpt("Enter new local name for registry: ") - let embeds = exn['e'] - let vcp = embeds['vcp'] - let ixn = embeds['ixn'] - let serder = new signify.Serder(ixn) - let ghab = await identifiers.get(group) - - let keeper = client.manager!.get(ghab) - let sigs = keeper.sign(signify.b(serder.raw)) - let sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})) - - let ims = signify.d(signify.messagize(serder, sigers)) - let atc = ims.substring(serder.size) + let registryName = prmpt( + 'Enter new local name for registry: ' + ); + let embeds = exn['e']; + let vcp = embeds['vcp']; + let ixn = embeds['ixn']; + let serder = new signify.Serder(ixn); + let ghab = await identifiers.get(group); + + let keeper = client.manager!.get(ghab); + let sigs = keeper.sign(signify.b(serder.raw)); + let sigers = sigs.map( + (sig: any) => new signify.Siger({ qb64: sig }) + ); + + let ims = signify.d(signify.messagize(serder, sigers)); + let atc = ims.substring(serder.size); embeds = { vcp: [new signify.Serder(vcp), undefined], - ixn: [serder, atc] - } - - sender = ghab["group"]["mhab"] - keeper = client.manager!.get(sender) - let [nexn, end] = signify.exchange("/multisig/vcp", - {'gid': ghab["prefix"], 'usage': "test"}, - sender["prefix"], undefined, undefined, undefined, undefined, embeds) - - console.log(nexn.pretty()) - let esigs = keeper.sign(signify.b(nexn.raw)) - await groups.sendRequest(group, nexn.ked, esigs, signify.d(end)) - - return await registries.createFromEvents(ghab, group, registryName, vcp, ixn, sigs) - } catch(e: any) { - console.log(e) + ixn: [serder, atc], + }; + + sender = ghab['group']['mhab']; + keeper = client.manager!.get(sender); + let [nexn, end] = signify.exchange( + '/multisig/vcp', + { gid: ghab['prefix'], usage: 'test' }, + sender['prefix'], + undefined, + undefined, + undefined, + undefined, + embeds + ); + + console.log(nexn.pretty()); + let esigs = keeper.sign(signify.b(nexn.raw)); + await groups.sendRequest( + group, + nexn.ked, + esigs, + signify.d(end) + ); + + return await registries.createFromEvents( + ghab, + group, + registryName, + vcp, + ixn, + sigs + ); + } catch (e: any) { + console.log(e); } } - - - } - } - } - diff --git a/examples/scripts/make_endroles.ts b/examples/scripts/make_endroles.ts index 386a4d4f..6a3f8a91 100644 --- a/examples/scripts/make_endroles.ts +++ b/examples/scripts/make_endroles.ts @@ -1,55 +1,58 @@ -import signify from "signify-ts"; +import signify from 'signify-ts'; await makeends(); async function makeends() { - let url = "http://127.0.0.1:3901" - let bran = '0123456789abcdefghijk' + let url = 'http://127.0.0.1:3901'; + let bran = '0123456789abcdefghijk'; await signify.ready(); const client = new signify.SignifyClient(url, bran); - await client.connect() - let d = await client.state() - console.log("Connected: ") - console.log(" Agent: ", d.agent.i, " Controller: ", d.controller.state.i) + await client.connect(); + let d = await client.state(); + console.log('Connected: '); + console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - let identifiers = client.identifiers() - let escrows = client.escrows() + let identifiers = client.identifiers(); + let escrows = client.escrows(); - let members = await identifiers.members("multisig") - let hab = await identifiers.get("multisig") - let aid = hab["prefix"] - let signing = members['signing'] + let members = await identifiers.members('multisig'); + let hab = await identifiers.get('multisig'); + let aid = hab['prefix']; + let signing = members['signing']; - let auths = new Map() - let stamp = new Date() + let auths = new Map(); + let stamp = new Date(); signing.forEach((end: any) => { - let ends = end["ends"] - let roles = ["agent", "mailbox"] + let ends = end['ends']; + let roles = ['agent', 'mailbox']; roles.forEach((role) => { if (role in ends) { - Object.keys(ends[role]).forEach((k:any) => { - let key = [aid, role, k].join(".") - auths.set(key, stamp) - }) + Object.keys(ends[role]).forEach((k: any) => { + let key = [aid, role, k].join('.'); + auths.set(key, stamp); + }); } - }) - }) + }); + }); - let rpys = await escrows.listReply("/end/role") + let rpys = await escrows.listReply('/end/role'); - rpys.forEach((rpy:object) => { - let serder = new signify.Serder(rpy) - let payload = serder.ked['a'] + rpys.forEach((rpy: object) => { + let serder = new signify.Serder(rpy); + let payload = serder.ked['a']; - let key = Object.values(payload).join(".") - let then = new Date(Date.parse(serder.ked["dt"])) + let key = Object.values(payload).join('.'); + let then = new Date(Date.parse(serder.ked['dt'])); if (auths.has(key) && then < stamp) { - identifiers.addEndRole("multisig", payload["role"], payload["eid"], serder.ked["dt"]) - auths.set(key, then) // track signed role auths by timestamp signed + identifiers.addEndRole( + 'multisig', + payload['role'], + payload['eid'], + serder.ked['dt'] + ); + auths.set(key, then); // track signed role auths by timestamp signed } - }) - + }); } - diff --git a/examples/signify-react-ts/vite.config.ts b/examples/signify-react-ts/vite.config.ts index f35af5b2..d65adb3c 100644 --- a/examples/signify-react-ts/vite.config.ts +++ b/examples/signify-react-ts/vite.config.ts @@ -1,8 +1,8 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' -import wasm from "vite-plugin-wasm"; +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import wasm from 'vite-plugin-wasm'; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react(), wasm()], -}) + plugins: [react(), wasm()], +}); diff --git a/package-lock.json b/package-lock.json index 5aa100e0..7fef9cec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,7 @@ "jest": "^29.3.1", "jsdoc": "^4.0.2", "minami": "^1.2.3", + "prettier": "^3.0.3", "size-limit": "^5.0.4", "ts-migrate": "^0.1.23", "ts-mockito": "^2.6.1", @@ -15626,15 +15627,18 @@ } }, "node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=4" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-linter-helpers": { @@ -21226,6 +21230,18 @@ "node": ">= 0.8.0" } }, + "node_modules/tsdx/node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/tsdx/node_modules/pretty-format": { "version": "25.5.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", diff --git a/package.json b/package.json index 3da5e202..55eecd6e 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "prepare": "tsdx build", "size": "size-limit", "analyze": "size-limit --why", - "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose" + "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", + "pretty": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' 'examples/**/*.ts' --write" }, "husky": { "hooks": { @@ -52,6 +53,7 @@ "jest": "^29.3.1", "jsdoc": "^4.0.2", "minami": "^1.2.3", + "prettier": "^3.0.3", "size-limit": "^5.0.4", "ts-migrate": "^0.1.23", "ts-mockito": "^2.6.1", diff --git a/src/index.ts b/src/index.ts index ed1088a2..588e01c9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,61 +1,60 @@ - import _sodium from 'libsodium-wrappers-sumo'; -import { create, all } from 'mathjs' +import { create, all } from 'mathjs'; -export const ready:() => Promise = (async() => { +export const ready: () => Promise = async () => { try { - let b3 = await import('blake3/browser-async') + let b3 = await import('blake3/browser-async'); // @ts-ignore - await b3.default('https://cdn.jsdelivr.net/npm/blake3@2.1.7/dist/wasm/web/blake3_js_bg.wasm') + await b3.default( + 'https://cdn.jsdelivr.net/npm/blake3@2.1.7/dist/wasm/web/blake3_js_bg.wasm' + ); await _sodium.ready; - } catch(e) { + } catch (e) { await _sodium.ready; } -}) - -export * from './keri/app/habery' -export * from './keri/app/controller' - -export * from './keri/app/aiding' -export * from './keri/app/clienting' -export * from './keri/app/contacting' -export * from './keri/app/coring' -export * from './keri/app/credentialing' -export * from './keri/app/escrowing' -export * from './keri/app/exchanging' -export * from './keri/app/grouping' -export * from './keri/app/notifying' +}; -export * from './keri/core/authing' -export * from './keri/core/cigar' -export * from './keri/core/cipher' -export * from './keri/core/core' -export * from './keri/core/counter' -export * from './keri/core/decrypter' -export * from './keri/core/diger' -export * from './keri/core/encrypter' -export * from './keri/core/eventing' -export * from './keri/core/httping' -export * from './keri/core/indexer' -export * from './keri/core/keeping' -export * from './keri/core/kering' -export * from './keri/core/manager' -export * from './keri/core/matter' -export * from './keri/core/number' -export * from './keri/core/prefixer' -export * from './keri/core/saider' -export * from './keri/core/salter' -export * from './keri/core/seqner' -export * from './keri/core/serder' -export * from './keri/core/siger' -export * from './keri/core/signer' -export * from './keri/core/tholder' -export * from './keri/core/utils' -export * from './keri/core/verfer' +export * from './keri/app/habery'; +export * from './keri/app/controller'; -export * from './keri/end/ending' +export * from './keri/app/aiding'; +export * from './keri/app/clienting'; +export * from './keri/app/contacting'; +export * from './keri/app/coring'; +export * from './keri/app/credentialing'; +export * from './keri/app/escrowing'; +export * from './keri/app/exchanging'; +export * from './keri/app/grouping'; +export * from './keri/app/notifying'; +export * from './keri/core/authing'; +export * from './keri/core/cigar'; +export * from './keri/core/cipher'; +export * from './keri/core/core'; +export * from './keri/core/counter'; +export * from './keri/core/decrypter'; +export * from './keri/core/diger'; +export * from './keri/core/encrypter'; +export * from './keri/core/eventing'; +export * from './keri/core/httping'; +export * from './keri/core/indexer'; +export * from './keri/core/keeping'; +export * from './keri/core/kering'; +export * from './keri/core/manager'; +export * from './keri/core/matter'; +export * from './keri/core/number'; +export * from './keri/core/prefixer'; +export * from './keri/core/saider'; +export * from './keri/core/salter'; +export * from './keri/core/seqner'; +export * from './keri/core/serder'; +export * from './keri/core/siger'; +export * from './keri/core/signer'; +export * from './keri/core/tholder'; +export * from './keri/core/utils'; +export * from './keri/core/verfer'; +export * from './keri/end/ending'; export { Algos } from './keri/core/manager'; @@ -63,8 +62,7 @@ import { Buffer } from 'buffer'; try { window.Buffer = Buffer; -} catch(e) { -} +} catch (e) {} -const config = { } -export const math = create(all, config) +const config = {}; +export const math = create(all, config); diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index b8855ad2..16bdf3f1 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -1,12 +1,12 @@ -import { SignifyClient } from "./clienting" -import { Tier} from "../core/salter" -import {Algos} from '../core/manager' -import {incept, interact, reply, rotate} from "../core/eventing" -import {b,Serials, Versionage} from "../core/core" -import {Tholder} from "../core/tholder" -import {MtrDex} from "../core/matter" -import {Serder} from "../core/serder" -import {parseRangeHeaders} from "../core/httping" +import { SignifyClient } from './clienting'; +import { Tier } from '../core/salter'; +import { Algos } from '../core/manager'; +import { incept, interact, reply, rotate } from '../core/eventing'; +import { b, Serials, Versionage } from '../core/core'; +import { Tholder } from '../core/tholder'; +import { MtrDex } from '../core/matter'; +import { Serder } from '../core/serder'; +import { parseRangeHeaders } from '../core/httping'; /** Arguments required to create an identfier */ export interface CreateIdentiferArgs { @@ -38,28 +38,28 @@ export interface CreateIdentiferArgs { /** Arguments required to rotate an identfier */ export interface RotateIdentifierArgs { - transferable?: boolean, - nsith?: string | number | string[], - toad?: number, - cuts?: string[], - adds?: string[], - data?: Array, - ncode?: string, - ncount?: number, - ncodes?: string[], - states?: any[], - rstates?: any[] + transferable?: boolean; + nsith?: string | number | string[]; + toad?: number; + cuts?: string[]; + adds?: string[]; + data?: Array; + ncode?: string; + ncount?: number; + ncodes?: string[]; + states?: any[]; + rstates?: any[]; } /** Identifier */ export class Identifier { - public client: SignifyClient + public client: SignifyClient; /** * Identifier - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -69,45 +69,45 @@ export class Identifier { * @param {number} [end=24] End index of list of notifications, defaults to 24 * @returns {Promise} A promise to the list of managed identifiers */ - async list(start:number=0, end:number=24): Promise { - let extraHeaders = new Headers() - extraHeaders.append('Range', `aids=${start}-${end}`) - - let path = `/identifiers` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data, extraHeaders) - - let cr = res.headers.get('content-range') - let range = parseRangeHeaders(cr,"aids") - let aids = await res.json() + async list(start: number = 0, end: number = 24): Promise { + let extraHeaders = new Headers(); + extraHeaders.append('Range', `aids=${start}-${end}`); + + let path = `/identifiers`; + let data = null; + let method = 'GET'; + let res = await this.client.fetch(path, method, data, extraHeaders); + + let cr = res.headers.get('content-range'); + let range = parseRangeHeaders(cr, 'aids'); + let aids = await res.json(); return { start: range.start, end: range.end, total: range.total, - aids: aids - } + aids: aids, + }; } - /** + /** * Get information for a managed identifier * @async * @param {string} name Name or alias of the identifier * @returns {Promise} A promise to the identifier information - */ + */ async get(name: string): Promise { - let path = `/identifiers/${name}` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data) - return await res.json() + let path = `/identifiers/${name}`; + let data = null; + let method = 'GET'; + let res = await this.client.fetch(path, method, data); + return await res.json(); } /** * Create a managed identifier * @async - * @param {string} name Name or alias of the identifier + * @param {string} name Name or alias of the identifier * @param {CreateIdentiferArgs} [kargs] Optional parameters to create the identifier * @returns {EventResult} The inception result */ @@ -183,9 +183,8 @@ export class Identifier { version: Versionage, kind: Serials.JSON, code: dcode, - intive: false - }) - + intive: false, + }); } else { serder = incept({ keys: keys!, @@ -200,8 +199,8 @@ export class Identifier { kind: Serials.JSON, code: dcode, intive: false, - delpre: delpre - }) + delpre: delpre, + }); } let sigs = await keeper!.sign(b(serder.raw)) @@ -210,14 +209,20 @@ export class Identifier { icp: serder.ked, sigs: sigs, proxy: proxy, - smids: states != undefined ? states.map(state => state.i) : undefined, - rmids: rstates != undefined ? rstates.map(state => state.i) : undefined - } - jsondata[algo] = keeper.params() - - this.client.pidx = this.client.pidx + 1 - let res = this.client.fetch("/identifiers", "POST", jsondata) - return new EventResult(serder, sigs, res) + smids: + states != undefined + ? states.map((state) => state.i) + : undefined, + rmids: + rstates != undefined + ? rstates.map((state) => state.i) + : undefined, + }; + jsondata[algo] = keeper.params(); + + this.client.pidx = this.client.pidx + 1; + let res = this.client.fetch('/identifiers', 'POST', jsondata); + return new EventResult(serder, sigs, res); } /** @@ -228,13 +233,14 @@ export class Identifier { * @returns {Promise} A promise to the interaction event result */ async interact(name: string, data?: any): Promise { + let hab = await this.get(name); + let pre: string = hab.prefix; - let hab = await this.get(name) - let pre: string = hab.prefix + let state = hab.state; + let sn = Number(state.s); + let dig = state.d; - let state = hab.state - let sn = Number(state.s) - let dig = state.d + data = Array.isArray(data) ? data : [data]; data = Array.isArray(data) ? data : [data] @@ -245,60 +251,67 @@ export class Identifier { let jsondata: any = { ixn: serder.ked, sigs: sigs, - } - jsondata[keeper.algo] = keeper.params() - - let res = this.client.fetch("/identifiers/" + name + "?type=ixn", "PUT", jsondata) - return new EventResult(serder, sigs, res) + }; + jsondata[keeper.algo] = keeper.params(); + + let res = this.client.fetch( + '/identifiers/' + name + '?type=ixn', + 'PUT', + jsondata + ); + return new EventResult(serder, sigs, res); } - /** * Generate a rotation event in a managed identifier * @param {string} name Name or alias of the identifier * @param {RotateIdentifierArgs} [kargs] Optional parameters requiered to generate the rotation event * @returns {Promise} A promise to the rotation event result */ - async rotate(name: string, kargs: RotateIdentifierArgs={}): Promise { - - let transferable = kargs.transferable ?? true - let ncode = kargs.ncode ?? MtrDex.Ed25519_Seed - let ncount = kargs.ncount ?? 1 - - let hab = await this.get(name) - let pre = hab.prefix - - let state = hab.state - let count = state.k.length - let dig = state.d - let ridx = (Number(state.s) + 1) - let wits = state.b - let isith = state.kt - - let nsith = kargs.nsith ?? isith + async rotate( + name: string, + kargs: RotateIdentifierArgs = {} + ): Promise { + let transferable = kargs.transferable ?? true; + let ncode = kargs.ncode ?? MtrDex.Ed25519_Seed; + let ncount = kargs.ncount ?? 1; + + let hab = await this.get(name); + let pre = hab.prefix; + + let state = hab.state; + let count = state.k.length; + let dig = state.d; + let ridx = Number(state.s) + 1; + let wits = state.b; + let isith = state.kt; + + let nsith = kargs.nsith ?? isith; // if isith is None: # compute default from newly rotated verfers above - if (isith == undefined) isith = `${Math.max(1, Math.ceil(count / 2)).toString(16)}` + if (isith == undefined) + isith = `${Math.max(1, Math.ceil(count / 2)).toString(16)}`; // if nsith is None: # compute default from newly rotated digers above - if (nsith == undefined) nsith = `${Math.max(1, Math.ceil(ncount / 2)).toString(16)}` + if (nsith == undefined) + nsith = `${Math.max(1, Math.ceil(ncount / 2)).toString(16)}`; - let cst = new Tholder({sith: isith}).sith // current signing threshold - let nst = new Tholder({sith: nsith}).sith // next signing threshold + let cst = new Tholder({ sith: isith }).sith; // current signing threshold + let nst = new Tholder({ sith: nsith }).sith; // next signing threshold // Regenerate next keys to sign rotation event - let keeper = this.client.manager!.get(hab) + let keeper = this.client.manager!.get(hab); // Create new keys for next digests - let ncodes = kargs.ncodes ?? new Array(ncount).fill(ncode) + let ncodes = kargs.ncodes ?? new Array(ncount).fill(ncode); let states = kargs.states == undefined? [] : kargs.states let rstates = kargs.rstates == undefined? [] : kargs.rstates let [keys, ndigs] = await keeper!.rotate(ncodes, transferable, states, rstates) - let cuts = kargs.cuts ?? [] - let adds = kargs.adds ?? [] - let data = kargs.data != undefined ? [kargs.data] : [] - let toad = kargs.toad + let cuts = kargs.cuts ?? []; + let adds = kargs.adds ?? []; + let data = kargs.data != undefined ? [kargs.data] : []; + let toad = kargs.toad; let serder = rotate({ pre: pre, keys: keys, @@ -311,21 +324,27 @@ export class Identifier { wits: wits, cuts: cuts, adds: adds, - data: data - }) + data: data, + }); let sigs = await keeper.sign(b(serder.raw)) var jsondata: any = { rot: serder.ked, sigs: sigs, - smids: states != undefined ? states.map(state => state.i) : undefined, - rmids: rstates != undefined ? rstates.map(state => state.i) : undefined - } - jsondata[keeper.algo] = keeper.params() - - let res = this.client.fetch("/identifiers/" + name, "PUT", jsondata) - return new EventResult(serder, sigs, res) + smids: + states != undefined + ? states.map((state) => state.i) + : undefined, + rmids: + rstates != undefined + ? rstates.map((state) => state.i) + : undefined, + }; + jsondata[keeper.algo] = keeper.params(); + + let res = this.client.fetch('/identifiers/' + name, 'PUT', jsondata); + return new EventResult(serder, sigs, res); } /** @@ -339,9 +358,14 @@ export class Identifier { * @param {string} [stamp=now] Optional date-time-stamp RFC-3339 profile of iso8601 datetime. Now is the default if not provided * @returns {Promise} A promise to the result of the authorization */ - async addEndRole(name: string, role: string, eid?: string, stamp?: string): Promise { - const hab = await this.get(name) - const pre = hab.prefix + async addEndRole( + name: string, + role: string, + eid?: string, + stamp?: string + ): Promise { + const hab = await this.get(name); + const pre = hab.prefix; const rpy = this.makeEndRole(pre, role, eid, stamp) const keeper = this.client.manager!.get(hab) @@ -349,12 +373,15 @@ export class Identifier { const jsondata = { rpy: rpy.ked, - sigs: sigs - } - - let res = await this.client.fetch("/identifiers/" + name + "/endroles", "POST", jsondata) - return await res.json() - + sigs: sigs, + }; + + let res = await this.client.fetch( + '/identifiers/' + name + '/endroles', + 'POST', + jsondata + ); + return await res.json(); } /** @@ -365,16 +392,21 @@ export class Identifier { * @param {string} [stamp=now] Optional date-time-stamp RFC-3339 profile of iso8601 datetime. Now is the default if not provided * @returns {Serder} The reply message */ - private makeEndRole(pre: string, role: string, eid?: string, stamp?: string): Serder { + private makeEndRole( + pre: string, + role: string, + eid?: string, + stamp?: string + ): Serder { const data: any = { cid: pre, - role: role - } + role: role, + }; if (eid != undefined) { - data.eid = eid + data.eid = eid; } - const route = "/end/role/add" - return reply(route, data, stamp, undefined, Serials.JSON) + const route = '/end/role/add'; + return reply(route, data, stamp, undefined, Serials.JSON); } /** @@ -384,33 +416,37 @@ export class Identifier { * @returns {Promise} - A promise to the list of members */ async members(name: string): Promise { - let res = await this.client.fetch("/identifiers/" + name + "/members", "GET", undefined) - return await res.json() + let res = await this.client.fetch( + '/identifiers/' + name + '/members', + 'GET', + undefined + ); + return await res.json(); } } /** Event Result */ export class EventResult { - private readonly _serder: Serder - private readonly _sigs: string[] - private readonly promise: Promise + private readonly _serder: Serder; + private readonly _sigs: string[]; + private readonly promise: Promise; constructor(serder: Serder, sigs: string[], promise: Promise) { - this._serder = serder - this._sigs = sigs - this.promise = promise + this._serder = serder; + this._sigs = sigs; + this.promise = promise; } get serder() { - return this._serder + return this._serder; } get sigs() { - return this._sigs + return this._sigs; } async op(): Promise { - let res = await this.promise - return await res.json() + let res = await this.promise; + return await res.json(); } -} \ No newline at end of file +} diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index d36bc38d..42759479 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -3,28 +3,28 @@ import { Tier } from "../core/salter" import { Authenticater } from "../core/authing" import { ExternalModule, KeyManager } from "../core/keeping" -import { Identifier } from "./aiding" -import { Contacts, Challenges } from "./contacting" -import { Oobis, Operations, KeyEvents, KeyStates } from "./coring" -import { Credentials, Registries, Schemas, } from './credentialing' -import { Notifications } from "./notifying" -import { Escrows } from "./escrowing" -import { Groups } from "./grouping" -import { Exchanges } from "./exchanging" +import { Identifier } from './aiding'; +import { Contacts, Challenges } from './contacting'; +import { Oobis, Operations, KeyEvents, KeyStates } from './coring'; +import { Credentials, Registries, Schemas } from './credentialing'; +import { Notifications } from './notifying'; +import { Escrows } from './escrowing'; +import { Groups } from './grouping'; +import { Exchanges } from './exchanging'; -const DEFAULT_BOOT_URL = "http://localhost:3903" +const DEFAULT_BOOT_URL = 'http://localhost:3903'; class State { - agent: any | null - controller: any | null - ridx: number - pidx: number + agent: any | null; + controller: any | null; + ridx: number; + pidx: number; constructor() { - this.agent = null - this.controller = null - this.pidx = 0 - this.ridx = 0 + this.agent = null; + this.controller = null; + this.pidx = 0; + this.ridx = 0; } } @@ -52,7 +52,7 @@ export class SignifyClient { constructor(url: string, bran: string, tier: Tier = Tier.low, bootUrl: string = DEFAULT_BOOT_URL, externalModules:ExternalModule[]=[]) { this.url = url if (bran.length < 21) { - throw Error("bran must be 21 characters") + throw Error('bran must be 21 characters'); } this.bran = bran this.pidx = 0 @@ -66,10 +66,10 @@ export class SignifyClient { } get data() { - return [this.url, this.bran, this.pidx, this.authn] + return [this.url, this.bran, this.pidx, this.authn]; } - /** + /** * Boot a KERIA agent * @async * @returns {Promise} A promise to the result of the boot @@ -81,26 +81,25 @@ export class SignifyClient { sig: sign.qb64, stem: this.controller?.stem, pidx: 1, - tier: this.controller?.tier + tier: this.controller?.tier, }; - return await fetch(this.bootUrl + "/boot", { - method: "POST", + return await fetch(this.bootUrl + '/boot', { + method: 'POST', body: JSON.stringify(data), headers: { - "Content-Type": "application/json" - } + 'Content-Type': 'application/json', + }, }); - } - /** + /** * Get state of the agent and the client * @async * @returns {Promise} A promise to the state */ async state(): Promise { - const caid = this.controller?.pre + const caid = this.controller?.pre; let res = await fetch(this.url + `/agent/${caid}`); if (res.status == 404) { @@ -117,77 +116,101 @@ export class SignifyClient { } /** Connect to a KERIA agent - * @async - */ + * @async + */ async connect() { - const state = await this.state() - this.pidx = state.pidx + const state = await this.state(); + this.pidx = state.pidx; //Create controller representing the local client AID - this.controller = new Controller(this.bran, this.tier, 0, state.controller) - this.controller.ridx = state.ridx !== undefined ? state.ridx : 0 + this.controller = new Controller( + this.bran, + this.tier, + 0, + state.controller + ); + this.controller.ridx = state.ridx !== undefined ? state.ridx : 0; // Create agent representing the AID of KERIA cloud agent - this.agent = new Agent(state.agent) + this.agent = new Agent(state.agent); if (this.agent.anchor != this.controller.pre) { - throw Error("commitment to controller AID missing in agent inception event") + throw Error( + 'commitment to controller AID missing in agent inception event' + ); } if (this.controller.serder.ked.s == 0) { - await this.approveDelegation() + await this.approveDelegation(); } this.manager = new KeyManager(this.controller.salter, this.exteralModules) this.authn = new Authenticater(this.controller.signer, this.agent.verfer!) } /** - * Fetch a resource from the KERIA agent - * @async - * @param {string} path Path to the resource - * @param {string} method HTTP method - * @param {any} data Data to be sent in the body of the resource - * @param {Headers} [extraHeaders] Optional extra headers to be sent with the request - * @returns {Promise} A promise to the result of the fetch - */ - async fetch(path: string, method: string, data: any, extraHeaders?: Headers): Promise { - let headers = new Headers() - let signed_headers = new Headers() - let final_headers = new Headers() - - headers.set('Signify-Resource', this.controller.pre) - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - let _body = method == 'GET' ? null : JSON.stringify(data) + * Fetch a resource from the KERIA agent + * @async + * @param {string} path Path to the resource + * @param {string} method HTTP method + * @param {any} data Data to be sent in the body of the resource + * @param {Headers} [extraHeaders] Optional extra headers to be sent with the request + * @returns {Promise} A promise to the result of the fetch + */ + async fetch( + path: string, + method: string, + data: any, + extraHeaders?: Headers + ): Promise { + let headers = new Headers(); + let signed_headers = new Headers(); + let final_headers = new Headers(); + + headers.set('Signify-Resource', this.controller.pre); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); + headers.set('Content-Type', 'application/json'); + + let _body = method == 'GET' ? null : JSON.stringify(data); if (_body !== null) { - headers.set('Content-Length', String(_body.length)) + headers.set('Content-Length', String(_body.length)); } if (this.authn) { - signed_headers = this.authn.sign(headers, method, path.split('?')[0]) + signed_headers = this.authn.sign( + headers, + method, + path.split('?')[0] + ); } else { - throw new Error('client need to call connect first') + throw new Error('client need to call connect first'); } signed_headers.forEach((value, key) => { - final_headers.set(key, value) - }) + final_headers.set(key, value); + }); if (extraHeaders !== undefined) { extraHeaders.forEach((value, key) => { - final_headers.append(key, value) - }) + final_headers.append(key, value); + }); } let res = await fetch(this.url + path, { method: method, body: _body, - headers: final_headers + headers: final_headers, }); if (!res.ok) { - const error = await res.text() - throw new Error(error) + const error = await res.text(); + throw new Error(error); } - const isSameAgent = this.agent?.pre === res.headers.get('signify-resource'); + const isSameAgent = + this.agent?.pre === res.headers.get('signify-resource'); if (!isSameAgent) { throw new Error('message from a different remote agent'); } - const verification = this.authn.verify(res.headers, method, path.split('?')[0]); + const verification = this.authn.verify( + res.headers, + method, + path.split('?')[0] + ); if (verification) { return res; } else { @@ -198,50 +221,64 @@ export class SignifyClient { /** * Fetch a resource from from an external URL with headers signed by an AID * @async - * @param {string} url URL of the resource + * @param {string} url URL of the resource * @param {string} path Path to the resource - * @param {string} method HTTP method + * @param {string} method HTTP method * @param {any} data Data to be sent in the body of the resource * @param {string} aidName Name or alias of the AID to be used for signing * @returns {Promise} A promise to the result of the fetch */ - async signedFetch(url: string, path: string, method: string, data: any, aidName: string): Promise { - const hab = await this.identifiers().get(aidName) - const keeper = this.manager!.get(hab) - - const authenticator = new Authenticater(keeper.signers[0], keeper.signers[0].verfer) - - let headers = new Headers() - headers.set('Signify-Resource', hab.prefix) - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) + async signedFetch( + url: string, + path: string, + method: string, + data: any, + aidName: string + ): Promise { + const hab = await this.identifiers().get(aidName); + const keeper = this.manager!.get(hab); + + const authenticator = new Authenticater( + keeper.signers[0], + keeper.signers[0].verfer + ); + + let headers = new Headers(); + headers.set('Signify-Resource', hab.prefix); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); if (data !== null) { - headers.set('Content-Length', data.length) - } - else { - headers.set('Content-Length', '0') + headers.set('Content-Length', data.length); + } else { + headers.set('Content-Length', '0'); } - let signed_headers = authenticator.sign(headers, method, path.split('?')[0]) - let _body = null + let signed_headers = authenticator.sign( + headers, + method, + path.split('?')[0] + ); + let _body = null; if (method != 'GET') { if (data instanceof FormData) { - _body = data + _body = data; // do not set the content type, let the browser do it // headers.set('Content-Type', 'multipart/form-data') } else { - _body = JSON.stringify(data) - headers.set('Content-Type', 'application/json') + _body = JSON.stringify(data); + headers.set('Content-Type', 'application/json'); } } else { - headers.set('Content-Type', 'application/json') + headers.set('Content-Type', 'application/json'); } return await fetch(url + path, { method: method, body: _body, - headers: signed_headers + headers: signed_headers, }); - } /** @@ -250,182 +287,185 @@ export class SignifyClient { * @returns {Promise} A promise to the result of the approval */ async approveDelegation(): Promise { - let sigs = this.controller.approveDelegation(this.agent!) + let sigs = this.controller.approveDelegation(this.agent!); let data = { ixn: this.controller.serder.ked, - sigs: sigs - } + sigs: sigs, + }; - return await fetch(this.url + "/agent/" + this.controller.pre + "?type=ixn", { - method: "PUT", - body: JSON.stringify(data), - headers: { - "Content-Type": "application/json" + return await fetch( + this.url + '/agent/' + this.controller.pre + '?type=ixn', + { + method: 'PUT', + body: JSON.stringify(data), + headers: { + 'Content-Type': 'application/json', + }, } - }) + ); } /** - * Save old client passcode in KERIA agent - * @async - * @param {string} passcode Passcode to be saved - * @returns {Promise} A promise to the result of the save - */ + * Save old client passcode in KERIA agent + * @async + * @param {string} passcode Passcode to be saved + * @returns {Promise} A promise to the result of the save + */ async saveOldPasscode(passcode: string): Promise { const caid = this.controller?.pre; const body = { salt: passcode }; - return await fetch(this.url + "/salt/" + caid, { - method: "PUT", + return await fetch(this.url + '/salt/' + caid, { + method: 'PUT', body: JSON.stringify(body), headers: { - "Content-Type": "application/json" - } - }) + 'Content-Type': 'application/json', + }, + }); } /** - * Delete a saved passcode from KERIA agent - * @async - * @returns {Promise} A promise to the result of the deletion - */ + * Delete a saved passcode from KERIA agent + * @async + * @returns {Promise} A promise to the result of the deletion + */ async deletePasscode(): Promise { const caid = this.controller?.pre; - return await fetch(this.url + "/salt/" + caid, { - method: "DELETE", + return await fetch(this.url + '/salt/' + caid, { + method: 'DELETE', headers: { - "Content-Type": "application/json" - } - }) + 'Content-Type': 'application/json', + }, + }); } /** - * Rotate the client AID - * @async - * @param {string} nbran Base64 21 char string that is used as base material for the new seed - * @param {Array} aids List of managed AIDs to be rotated - * @returns {Promise} A promise to the result of the rotation - */ + * Rotate the client AID + * @async + * @param {string} nbran Base64 21 char string that is used as base material for the new seed + * @param {Array} aids List of managed AIDs to be rotated + * @returns {Promise} A promise to the result of the rotation + */ async rotate(nbran: string, aids: string[]): Promise { - let data = this.controller.rotate(nbran, aids) - return await fetch(this.url + "/agent/" + this.controller.pre, { - method: "PUT", + let data = this.controller.rotate(nbran, aids); + return await fetch(this.url + '/agent/' + this.controller.pre, { + method: 'PUT', body: JSON.stringify(data), headers: { - "Content-Type": "application/json" - } - }) + 'Content-Type': 'application/json', + }, + }); } /** - * Get identifiers resource - * @returns {Identifier} - */ + * Get identifiers resource + * @returns {Identifier} + */ identifiers(): Identifier { - return new Identifier(this) + return new Identifier(this); } /** - * Get OOBIs resource - * @returns {Oobis} - */ + * Get OOBIs resource + * @returns {Oobis} + */ oobis(): Oobis { - return new Oobis(this) + return new Oobis(this); } /** - * Get operations resource - * @returns {Operations} - */ + * Get operations resource + * @returns {Operations} + */ operations(): Operations { - return new Operations(this) + return new Operations(this); } /** - * Get keyEvents resource - * @returns {KeyEvents} - */ + * Get keyEvents resource + * @returns {KeyEvents} + */ keyEvents(): KeyEvents { - return new KeyEvents(this) + return new KeyEvents(this); } /** - * Get keyStates resource - * @returns {KeyStates} - */ + * Get keyStates resource + * @returns {KeyStates} + */ keyStates(): KeyStates { - return new KeyStates(this) + return new KeyStates(this); } /** - * Get credentials resource - * @returns {Credentials} - */ + * Get credentials resource + * @returns {Credentials} + */ credentials(): Credentials { - return new Credentials(this) + return new Credentials(this); } /** - * Get registries resource - * @returns {Registries} - */ + * Get registries resource + * @returns {Registries} + */ registries(): Registries { - return new Registries(this) + return new Registries(this); } /** - * Get schemas resource - * @returns {Schemas} - */ + * Get schemas resource + * @returns {Schemas} + */ schemas(): Schemas { - return new Schemas(this) + return new Schemas(this); } /** - * Get challenges resource - * @returns {Challenges} - */ + * Get challenges resource + * @returns {Challenges} + */ challenges(): Challenges { - return new Challenges(this) + return new Challenges(this); } /** - * Get contacts resource - * @returns {Contacts} - */ + * Get contacts resource + * @returns {Contacts} + */ contacts(): Contacts { - return new Contacts(this) + return new Contacts(this); } /** - * Get notifications resource - * @returns {Notifications} - */ + * Get notifications resource + * @returns {Notifications} + */ notifications(): Notifications { - return new Notifications(this) + return new Notifications(this); } /** - * Get escrows resource - * @returns {Escrows} - */ + * Get escrows resource + * @returns {Escrows} + */ escrows(): Escrows { - return new Escrows(this) + return new Escrows(this); } /** - * Get groups resource - * @returns {Groups} - */ + * Get groups resource + * @returns {Groups} + */ groups(): Groups { - return new Groups(this) + return new Groups(this); } /** - * Get exchange resource - * @returns {Exchanges} - */ + * Get exchange resource + * @returns {Exchanges} + */ exchanges(): Exchanges { - return new Exchanges(this) + return new Exchanges(this); } -} \ No newline at end of file +} diff --git a/src/keri/app/contacting.ts b/src/keri/app/contacting.ts index 0ad627e7..2546ef62 100644 --- a/src/keri/app/contacting.ts +++ b/src/keri/app/contacting.ts @@ -1,39 +1,44 @@ -import { SignifyClient } from "./clienting" +import { SignifyClient } from './clienting'; /** * Contacts */ export class Contacts { - client: SignifyClient + client: SignifyClient; /** * Contacts - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** * List contacts * @async - * @param {string} [group] Optional group name to filter contacts + * @param {string} [group] Optional group name to filter contacts * @param {string} [filterField] Optional field name to filter contacts * @param {string} [filterValue] Optional field value to filter contacts * @returns {Promise} A promise to the list of contacts */ - async list(group?:string, filterField?:string, filterValue?:string): Promise { - let params = new URLSearchParams() - if (group !== undefined) {params.append('group', group)} + async list( + group?: string, + filterField?: string, + filterValue?: string + ): Promise { + let params = new URLSearchParams(); + if (group !== undefined) { + params.append('group', group); + } if (filterField !== undefined && filterValue !== undefined) { - params.append("filter_field", filterField); - params.append("filter_value", filterValue); + params.append('filter_field', filterField); + params.append('filter_value', filterValue); } - let path = `/contacts`+ '?' + params.toString() - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - + let path = `/contacts` + '?' + params.toString(); + let method = 'GET'; + let res = await this.client.fetch(path, method, null); + return await res.json(); } /** @@ -42,13 +47,11 @@ export class Contacts { * @param {string} pre Prefix of the contact * @returns {Promise} A promise to the contact */ - async get(pre:string): Promise { - - let path = `/contacts/`+ pre - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - + async get(pre: string): Promise { + let path = `/contacts/` + pre; + let method = 'GET'; + let res = await this.client.fetch(path, method, null); + return await res.json(); } /** @@ -59,11 +62,11 @@ export class Contacts { * @returns {Promise} A promise to the result of the addition */ async add(pre: string, info: any): Promise { - let path = `/contacts/`+ pre - let method = 'POST' + let path = `/contacts/` + pre; + let method = 'POST'; - let res = await this.client.fetch(path, method, info) - return await res.json() + let res = await this.client.fetch(path, method, info); + return await res.json(); } /** @@ -73,11 +76,11 @@ export class Contacts { * @returns {Promise} A promise to the result of the deletion */ async delete(pre: string): Promise { - let path = `/contacts/`+ pre - let method = 'DELETE' + let path = `/contacts/` + pre; + let method = 'DELETE'; - let res = await this.client.fetch(path, method, null) - return await res.json() + let res = await this.client.fetch(path, method, null); + return await res.json(); } /** @@ -88,27 +91,25 @@ export class Contacts { * @returns {Promise} A promise to the result of the update */ async update(pre: string, info: any): Promise { - let path = `/contacts/` + pre - let method = 'PUT' + let path = `/contacts/` + pre; + let method = 'PUT'; - let res = await this.client.fetch(path, method, info) - return await res.json() + let res = await this.client.fetch(path, method, info); + return await res.json(); } - } - /** * Challenges */ export class Challenges { - client: SignifyClient + client: SignifyClient; /** * Challenges - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -118,10 +119,10 @@ export class Challenges { * @returns {Promise} A promise to the list of random words */ async generate(strength: number = 128): Promise { - let path = `/challenges?strength=${strength.toString()}` - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() + let path = `/challenges?strength=${strength.toString()}`; + let method = 'GET'; + let res = await this.client.fetch(path, method, null); + return await res.json(); } /** @@ -132,12 +133,23 @@ export class Challenges { * @param {Array} words List of words to embed in the signed response * @returns {Promise} A promise to the result of the response */ - async respond(name: string, recipient: string, words: string[]): Promise { - - let hab = await this.client.identifiers().get(name) - let exchanges = this.client.exchanges() - let resp = await exchanges.send(name, "challenge", hab, "/challenge/response", {words: words},{},[recipient]) - return resp + async respond( + name: string, + recipient: string, + words: string[] + ): Promise { + let hab = await this.client.identifiers().get(name); + let exchanges = this.client.exchanges(); + let resp = await exchanges.send( + name, + 'challenge', + hab, + '/challenge/response', + { words: words }, + {}, + [recipient] + ); + return resp; } /** @@ -147,15 +159,19 @@ export class Challenges { * @param {Array} words List of challenge words to check for * @returns {Promise} A promise to the result */ - async verify(name: string, source: string, words: string[]): Promise { - let path = `/challenges/${name}/verify/${source}` - let method = 'POST' + async verify( + name: string, + source: string, + words: string[] + ): Promise { + let path = `/challenges/${name}/verify/${source}`; + let method = 'POST'; let data = { - words: words - } - let res = await this.client.fetch(path, method, data) + words: words, + }; + let res = await this.client.fetch(path, method, data); - return await res.json() + return await res.json(); } /** @@ -165,13 +181,17 @@ export class Challenges { * @param {string} said qb64 AID of exn message representing the signed response * @returns {Promise} A promise to the result */ - async responded(name:string, source:string, said:string): Promise { - let path = `/challenges/${name}/verify/${source}` - let method = 'PUT' + async responded( + name: string, + source: string, + said: string + ): Promise { + let path = `/challenges/${name}/verify/${source}`; + let method = 'PUT'; let data = { - said: said - } - let res = await this.client.fetch(path, method, data) - return res + said: said, + }; + let res = await this.client.fetch(path, method, data); + return res; } } diff --git a/src/keri/app/controller.ts b/src/keri/app/controller.ts index 11740cb7..c904427f 100644 --- a/src/keri/app/controller.ts +++ b/src/keri/app/controller.ts @@ -1,17 +1,17 @@ -import { SaltyCreator } from "../core/manager"; -import { Salter, Tier } from "../core/salter"; -import { MtrDex } from "../core/matter"; -import { Diger } from "../core/diger"; -import { incept, rotate, interact } from "../core/eventing"; -import { Serder } from "../core/serder"; -import { Tholder } from "../core/tholder"; -import { Ilks, b, Serials, Versionage } from "../core/core"; -import { Verfer } from "../core/verfer"; -import { Encrypter } from "../core/encrypter"; -import { Decrypter } from "../core/decrypter"; -import { Cipher } from "../core/cipher"; -import { Seqner } from "../core/seqner"; -import { CesrNumber } from "../core/number"; +import { SaltyCreator } from '../core/manager'; +import { Salter, Tier } from '../core/salter'; +import { MtrDex } from '../core/matter'; +import { Diger } from '../core/diger'; +import { incept, rotate, interact } from '../core/eventing'; +import { Serder } from '../core/serder'; +import { Tholder } from '../core/tholder'; +import { Ilks, b, Serials, Versionage } from '../core/core'; +import { Verfer } from '../core/verfer'; +import { Encrypter } from '../core/encrypter'; +import { Decrypter } from '../core/decrypter'; +import { Cipher } from '../core/cipher'; +import { Seqner } from '../core/seqner'; +import { CesrNumber } from '../core/number'; /** * Agent is a custodial entity that can be used in conjuntion with a local Client to establish the @@ -26,20 +26,20 @@ export class Agent { said: string | undefined; constructor(agent: any) { - this.pre = ""; - this.anchor = ""; + this.pre = ''; + this.anchor = ''; this.verfer = null; this.state = null; this.sn = 0; - this.said = ""; + this.said = ''; this.parse(agent); } private parse(agent: Agent) { - let [state, verfer,] = this.event(agent); + let [state, verfer] = this.event(agent); - this.sn = new CesrNumber({}, undefined, state['s']).num - this.said = state['d'] + this.sn = new CesrNumber({}, undefined, state['s']).num; + this.said = state['d']; if (state['et'] !== Ilks.dip) { throw new Error(`invalid inception event type ${state['et']}`); @@ -47,22 +47,21 @@ export class Agent { this.pre = state['i']; if (!state['di']) { - throw new Error("no anchor to controller AID"); + throw new Error('no anchor to controller AID'); } this.anchor = state['di']; - this.verfer = verfer - this.state = state + this.verfer = verfer; + this.state = state; } - private event(evt: any): [any, Verfer, Diger] { if (evt['k'].length !== 1) { throw new Error(`agent inception event can only have one key`); } - let verfer = new Verfer({ qb64: evt['k'][0] }) + let verfer = new Verfer({ qb64: evt['k'][0] }); if (evt['n'].length !== 1) { throw new Error(`agent inception event can only have one next key`); @@ -70,14 +69,16 @@ export class Agent { let diger = new Diger({ qb64: evt['n'][0] }); - let tholder = new Tholder({ sith: evt["kt"] }); + let tholder = new Tholder({ sith: evt['kt'] }); if (tholder.num !== 1) { throw new Error(`invalid threshold ${tholder.num}, must be 1`); } - let ntholder = new Tholder({ sith: evt["nt"] }); + let ntholder = new Tholder({ sith: evt['nt'] }); if (ntholder.num !== 1) { - throw new Error(`invalid next threshold ${ntholder.num}, must be 1`); + throw new Error( + `invalid next threshold ${ntholder.num}, must be 1` + ); } return [evt, verfer, diger]; } @@ -88,7 +89,6 @@ export class Agent { * signing key represents the Account for the client on the agent */ export class Controller { - private bran: string; public stem: string; public tier: Tier; @@ -100,202 +100,267 @@ export class Controller { private keys: string[]; public ndigs: string[]; - constructor(bran: string, tier: Tier, ridx: number = 0, state: any | null = null) { - this.bran = MtrDex.Salt_128 + 'A' + bran.substring(0, 21) // qb64 salt for seed - this.stem = "signify:controller" - this.tier = tier - this.ridx = ridx - - this.salter = new Salter({ qb64: this.bran, tier: this.tier }) - - let creator = new SaltyCreator(this.salter.qb64, this.tier, this.stem) - - this.signer = creator.create(undefined, 1, MtrDex.Ed25519_Seed, true, 0, this.ridx, 0, false).signers.pop() - this.nsigner = creator.create(undefined, 1, MtrDex.Ed25519_Seed, true, 0, this.ridx + 1, 0, false).signers.pop() - this.keys = [this.signer.verfer.qb64] - this.ndigs = [new Diger({ code: MtrDex.Blake3_256 }, this.nsigner.verfer.qb64b).qb64] + constructor( + bran: string, + tier: Tier, + ridx: number = 0, + state: any | null = null + ) { + this.bran = MtrDex.Salt_128 + 'A' + bran.substring(0, 21); // qb64 salt for seed + this.stem = 'signify:controller'; + this.tier = tier; + this.ridx = ridx; + + this.salter = new Salter({ qb64: this.bran, tier: this.tier }); + + let creator = new SaltyCreator(this.salter.qb64, this.tier, this.stem); + + this.signer = creator + .create( + undefined, + 1, + MtrDex.Ed25519_Seed, + true, + 0, + this.ridx, + 0, + false + ) + .signers.pop(); + this.nsigner = creator + .create( + undefined, + 1, + MtrDex.Ed25519_Seed, + true, + 0, + this.ridx + 1, + 0, + false + ) + .signers.pop(); + this.keys = [this.signer.verfer.qb64]; + this.ndigs = [ + new Diger({ code: MtrDex.Blake3_256 }, this.nsigner.verfer.qb64b) + .qb64, + ]; if (state == null || state['ee']['s'] == 0) { this.serder = incept({ keys: this.keys, - isith: "1", - nsith: "1", + isith: '1', + nsith: '1', ndigs: this.ndigs, code: MtrDex.Blake3_256, - toad: "0", - wits: [] - }) + toad: '0', + wits: [], + }); } else { - this.serder = new Serder(state['ee']) + this.serder = new Serder(state['ee']); } } approveDelegation(_agent: Agent) { - - let seqner = new Seqner({sn: _agent.sn}) - let anchor = {i: _agent.pre, s: seqner.snh, d: _agent.said} - let sn = new CesrNumber({}, undefined, this.serder.ked["s"]).num + 1 + let seqner = new Seqner({ sn: _agent.sn }); + let anchor = { i: _agent.pre, s: seqner.snh, d: _agent.said }; + let sn = new CesrNumber({}, undefined, this.serder.ked['s']).num + 1; this.serder = interact({ pre: this.serder.pre, - dig: this.serder.ked["d"], + dig: this.serder.ked['d'], sn: sn, data: [anchor], version: Versionage, - kind: Serials.JSON}) - return [this.signer.sign(this.serder.raw, 0).qb64] + kind: Serials.JSON, + }); + return [this.signer.sign(this.serder.raw, 0).qb64]; } get pre(): string { - return this.serder.pre + return this.serder.pre; } get event() { - let siger = this.signer.sign(this.serder.raw, 0) - return [this.serder, siger] + let siger = this.signer.sign(this.serder.raw, 0); + return [this.serder, siger]; } get verfers(): [] { - return this.signer.verfer() + return this.signer.verfer(); } derive(state: any) { if (state != undefined && state['ee']['s'] === '0') { return incept({ keys: this.keys, - isith: "1", - nsith: "1", + isith: '1', + nsith: '1', ndigs: this.ndigs, code: MtrDex.Blake3_256, - toad: "0", - wits: [] - }) - } - else { - return new Serder({ ked: state.controller['ee'] }) + toad: '0', + wits: [], + }); + } else { + return new Serder({ ked: state.controller['ee'] }); } } rotate(bran: string, aids: Array) { - let nbran = MtrDex.Salt_128 + 'A' + bran.substring(0, 21) // qb64 salt for seed - let nsalter = new Salter({ qb64: nbran, tier: this.tier }) - let nsigner = this.salter.signer(undefined, false) - - - let creator = new SaltyCreator(this.salter.qb64, this.tier, this.stem) - let signer = creator.create(undefined, 1, MtrDex.Ed25519_Seed, true, 0, this.ridx + 1, 0, false).signers.pop() - - let ncreator = new SaltyCreator(nsalter.qb64, this.tier, this.stem) - this.signer = ncreator.create(undefined, 1, MtrDex.Ed25519_Seed, true, 0, this.ridx, 0, false).signers.pop() - this.nsigner = ncreator.create(undefined, 1, MtrDex.Ed25519_Seed, true, 0, this.ridx + 1, 0, false).signers.pop() - - this.keys = [this.signer.verfer.qb64, signer?.verfer.qb64] - this.ndigs = [new Diger({}, this.nsigner.verfer.qb64b).qb64] - - let rot = rotate( - { - pre: this.pre, - keys: this.keys, - dig: this.serder.ked['d'], - isith: ["1", "0"], - nsith: "1", - ndigs: this.ndigs - }) - - let sigs = [signer?.sign(b(rot.raw), 1, false, 0).qb64, this.signer.sign(rot.raw, 0).qb64] - let encrypter = new Encrypter({}, b(nsigner.verfer.qb64)) - let decrypter = new Decrypter({}, nsigner.qb64b) - let sxlt = encrypter.encrypt(b(this.bran)).qb64 - - - let keys: Record = {} + let nbran = MtrDex.Salt_128 + 'A' + bran.substring(0, 21); // qb64 salt for seed + let nsalter = new Salter({ qb64: nbran, tier: this.tier }); + let nsigner = this.salter.signer(undefined, false); + + let creator = new SaltyCreator(this.salter.qb64, this.tier, this.stem); + let signer = creator + .create( + undefined, + 1, + MtrDex.Ed25519_Seed, + true, + 0, + this.ridx + 1, + 0, + false + ) + .signers.pop(); + + let ncreator = new SaltyCreator(nsalter.qb64, this.tier, this.stem); + this.signer = ncreator + .create( + undefined, + 1, + MtrDex.Ed25519_Seed, + true, + 0, + this.ridx, + 0, + false + ) + .signers.pop(); + this.nsigner = ncreator + .create( + undefined, + 1, + MtrDex.Ed25519_Seed, + true, + 0, + this.ridx + 1, + 0, + false + ) + .signers.pop(); + + this.keys = [this.signer.verfer.qb64, signer?.verfer.qb64]; + this.ndigs = [new Diger({}, this.nsigner.verfer.qb64b).qb64]; + + let rot = rotate({ + pre: this.pre, + keys: this.keys, + dig: this.serder.ked['d'], + isith: ['1', '0'], + nsith: '1', + ndigs: this.ndigs, + }); + + let sigs = [ + signer?.sign(b(rot.raw), 1, false, 0).qb64, + this.signer.sign(rot.raw, 0).qb64, + ]; + let encrypter = new Encrypter({}, b(nsigner.verfer.qb64)); + let decrypter = new Decrypter({}, nsigner.qb64b); + let sxlt = encrypter.encrypt(b(this.bran)).qb64; + + let keys: Record = {}; for (let aid of aids) { - let pre: string = aid["prefix"] as string - if ("salty" in aid) { - console.log("salty aid to rotate") - console.log(aid) - let salty: any = aid["salty"] - let cipher = new Cipher({ qb64: salty["sxlt"] }) - let dnxt = decrypter.decrypt(null, cipher).qb64 + let pre: string = aid['prefix'] as string; + if ('salty' in aid) { + console.log('salty aid to rotate'); + console.log(aid); + let salty: any = aid['salty']; + let cipher = new Cipher({ qb64: salty['sxlt'] }); + let dnxt = decrypter.decrypt(null, cipher).qb64; // Now we have the AID salt, use it to verify against the current public keys - let acreator = new SaltyCreator(dnxt, salty["tier"], salty["stem"]) + let acreator = new SaltyCreator( + dnxt, + salty['tier'], + salty['stem'] + ); let signers = acreator.create( - salty["icodes"], - undefined, - MtrDex.Ed25519_Seed, - salty["transferable"], - salty["pidx"], - 0, - salty["kidx"], - false) - let _signers = [] + salty['icodes'], + undefined, + MtrDex.Ed25519_Seed, + salty['transferable'], + salty['pidx'], + 0, + salty['kidx'], + false + ); + let _signers = []; for (let signer of signers.signers) { - _signers.push(signer.verfer.qb64) + _signers.push(signer.verfer.qb64); } - let pubs = aid["state"]["k"] + let pubs = aid['state']['k']; - if (pubs.join(",") != _signers.join(",")) { - throw new Error("Invalid Salty AID") + if (pubs.join(',') != _signers.join(',')) { + throw new Error('Invalid Salty AID'); } - let asxlt = encrypter.encrypt(b(dnxt)).qb64 + let asxlt = encrypter.encrypt(b(dnxt)).qb64; keys[pre] = { - sxlt: asxlt - } - } - else if ("randy" in aid) { - let randy = aid["randy"] - let prxs = randy["prxs"] - let nxts = randy["nxts"] - - let nprxs = [] - let signers = [] + sxlt: asxlt, + }; + } else if ('randy' in aid) { + let randy = aid['randy']; + let prxs = randy['prxs']; + let nxts = randy['nxts']; + + let nprxs = []; + let signers = []; for (let prx of prxs) { - let cipher = new Cipher({ qb64: prx }) - let dsigner = decrypter.decrypt(null, cipher, true) - signers.push(dsigner) - nprxs.push(encrypter.encrypt(b(dsigner.qb64)).qb64) + let cipher = new Cipher({ qb64: prx }); + let dsigner = decrypter.decrypt(null, cipher, true); + signers.push(dsigner); + nprxs.push(encrypter.encrypt(b(dsigner.qb64)).qb64); } - let pubs = aid["state"]["k"] - let _signers = [] + let pubs = aid['state']['k']; + let _signers = []; for (let signer of signers) { - _signers.push(signer.verfer.qb64) + _signers.push(signer.verfer.qb64); } - - if (pubs.join(",") != _signers.join(",")) { - throw new Error(`unable to rotate, validation of encrypted public keys ${pubs} failed`) + + if (pubs.join(',') != _signers.join(',')) { + throw new Error( + `unable to rotate, validation of encrypted public keys ${pubs} failed` + ); } - let nnxts = [] + let nnxts = []; for (let nxt of nxts) { - nnxts.push(this.recrypt(nxt, decrypter, encrypter)) + nnxts.push(this.recrypt(nxt, decrypter, encrypter)); } keys[pre] = { prxs: nprxs, - nxts: nnxts - } - } - else { - throw new Error("invalid aid type ") + nxts: nnxts, + }; + } else { + throw new Error('invalid aid type '); } - } let data = { rot: rot.ked, sigs: sigs, sxlt: sxlt, - keys: keys - } - return data + keys: keys, + }; + return data; } recrypt(enc: string, decrypter: Decrypter, encrypter: Encrypter) { - let cipher = new Cipher({ qb64: enc }) - let dnxt = decrypter.decrypt(null, cipher).qb64 - return encrypter.encrypt(b(dnxt)).qb64 + let cipher = new Cipher({ qb64: enc }); + let dnxt = decrypter.decrypt(null, cipher).qb64; + return encrypter.encrypt(b(dnxt)).qb64; } - -} \ No newline at end of file +} diff --git a/src/keri/app/coring.ts b/src/keri/app/coring.ts index e620212c..de96b104 100644 --- a/src/keri/app/coring.ts +++ b/src/keri/app/coring.ts @@ -1,13 +1,13 @@ -import { SignifyClient } from "./clienting" -import libsodium from "libsodium-wrappers-sumo"; -import { Salter } from "../core/salter"; +import { SignifyClient } from './clienting'; +import libsodium from 'libsodium-wrappers-sumo'; +import { Salter } from '../core/salter'; import { Matter, MtrDex } from '../core/matter'; export function randomPasscode(): string { let raw = libsodium.randombytes_buf(16); - let salter = new Salter({ raw: raw }) + let salter = new Salter({ raw: raw }); - return salter.qb64.substring(2) + return salter.qb64.substring(2); } export function randomNonce(): string { @@ -17,13 +17,13 @@ export function randomNonce(): string { } export class Oobis { - public client: SignifyClient + public client: SignifyClient; /** * Oobis - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -33,32 +33,30 @@ export class Oobis { * @returns {Promise} A promise to the OOBI(s) */ async get(name: string, role: string = 'agent'): Promise { - let path = `/identifiers/${name}/oobis?role=${role}` - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - + let path = `/identifiers/${name}/oobis?role=${role}`; + let method = 'GET'; + let res = await this.client.fetch(path, method, null); + return await res.json(); } /** * Resolve an OOBI * @async * @param {string} oobi The OOBI to be resolver - * @param {string} [alias] Optional name or alias to link the OOBI resolution to a contact + * @param {string} [alias] Optional name or alias to link the OOBI resolution to a contact * @returns {Promise} A promise to the long-running operation */ async resolve(oobi: string, alias?: string): Promise { - let path = `/oobis` + let path = `/oobis`; let data: any = { - url: oobi - } + url: oobi, + }; if (alias !== undefined) { - data.oobialias = alias + data.oobialias = alias; } - let method = 'POST' - let res = await this.client.fetch(path, method, data) - return await res.json() - + let method = 'POST'; + let res = await this.client.fetch(path, method, data); + return await res.json(); } } @@ -68,13 +66,13 @@ export class Oobis { * Operations represent the status and result of long running tasks performed by KERIA agent */ export class Operations { - public client: SignifyClient + public client: SignifyClient; /** * Operations - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -84,12 +82,11 @@ export class Operations { * @returns {Promise} A promise to the status of the operation */ async get(name: string): Promise { - let path = `/operations/${name}` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data) - return await res.json() - + let path = `/operations/${name}`; + let data = null; + let method = 'GET'; + let res = await this.client.fetch(path, method, data); + return await res.json(); } } @@ -97,13 +94,13 @@ export class Operations { * KeyEvents */ export class KeyEvents { - public client: SignifyClient + public client: SignifyClient; /** * KeyEvents - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -113,12 +110,11 @@ export class KeyEvents { * @returns {Promise} A promise to the key events */ async get(pre: string): Promise { - let path = `/events?pre=${pre}` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data) - return await res.json() - + let path = `/events?pre=${pre}`; + let data = null; + let method = 'GET'; + let res = await this.client.fetch(path, method, data); + return await res.json(); } } @@ -126,13 +122,13 @@ export class KeyEvents { * KeyStates */ export class KeyStates { - public client: SignifyClient + public client: SignifyClient; /** * KeyStates - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -142,12 +138,11 @@ export class KeyStates { * @returns {Promise} A promise to the key states */ async get(pre: string): Promise { - let path = `/states?pre=${pre}` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data) - return await res.json() - + let path = `/states?pre=${pre}`; + let data = null; + let method = 'GET'; + let res = await this.client.fetch(path, method, data); + return await res.json(); } /** @@ -157,12 +152,11 @@ export class KeyStates { * @returns {Promise} A promise to the key states */ async list(pres: string[]): Promise { - let path = `/states?${pres.map(pre => `pre=${pre}`).join('&')}` - let data = null - let method = 'GET' - let res = await this.client.fetch(path, method, data) - return await res.json() - + let path = `/states?${pres.map((pre) => `pre=${pre}`).join('&')}`; + let data = null; + let method = 'GET'; + let res = await this.client.fetch(path, method, data); + return await res.json(); } /** @@ -174,20 +168,19 @@ export class KeyStates { * @returns {Promise} A promise to the long-running operation */ async query(pre: string, sn?: number, anchor?: string): Promise { - let path = `/queries` + let path = `/queries`; let data: any = { - pre: pre - } + pre: pre, + }; if (sn !== undefined) { - data.sn = sn + data.sn = sn; } if (anchor !== undefined) { - data.anchor = anchor + data.anchor = anchor; } - let method = 'POST' - let res = await this.client.fetch(path, method, data) - return await res.json() + let method = 'POST'; + let res = await this.client.fetch(path, method, data); + return await res.json(); } } - diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index c6c1f0e8..f496ded1 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -1,40 +1,47 @@ -import { SignifyClient } from "./clienting" -import { Salter } from "../core/salter" -import { interact, messagize } from "../core/eventing" -import { vdr } from "../core/vdring" -import { b, Dict, Ident, Ilks, Serials, versify, Versionage } from "../core/core" -import { Saider } from "../core/saider" -import { Serder } from "../core/serder" -import { Siger } from "../core/siger" -import { TextDecoder } from "util" -import { TraitDex } from "./habery" - +import { SignifyClient } from './clienting'; +import { Salter } from '../core/salter'; +import { interact, messagize } from '../core/eventing'; +import { vdr } from '../core/vdring'; +import { + b, + Dict, + Ident, + Ilks, + Serials, + versify, + Versionage, +} from '../core/core'; +import { Saider } from '../core/saider'; +import { Serder } from '../core/serder'; +import { Siger } from '../core/siger'; +import { TextDecoder } from 'util'; +import { TraitDex } from './habery'; /** Types of credentials */ export class CredentialTypes { - static issued = "issued" - static received = "received" + static issued = 'issued'; + static received = 'received'; } /** Credential filter parameters */ export interface CredentialFilter { - filter?: object, - sort?: object[], - skip?: number, - limit?: number + filter?: object; + sort?: object[]; + skip?: number; + limit?: number; } /** * Credentials */ export class Credentials { - public client: SignifyClient + public client: SignifyClient; /** * Credentials - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -44,8 +51,8 @@ export class Credentials { * @param {CredentialFilter} [kargs] Optional parameters to filter the credentials * @returns {Promise} A promise to the list of credentials */ - async list(name: string, kargs:CredentialFilter ={}): Promise { - let path = `/identifiers/${name}/credentials/query` + async list(name: string, kargs: CredentialFilter = {}): Promise { + let path = `/identifiers/${name}/credentials/query`; let filtr = kargs.filter === undefined ? {} : kargs.filter; let sort = kargs.sort === undefined ? [] : kargs.sort; let limit = kargs.limit === undefined ? 25 : kargs.limit; @@ -55,12 +62,12 @@ export class Credentials { filter: filtr, sort: sort, skip: skip, - limit: limit - } - let method = 'POST' + limit: limit, + }; + let method = 'POST'; - let res = await this.client.fetch(path, method, data, undefined) - return await res.json() + let res = await this.client.fetch(path, method, data, undefined); + return await res.json(); } /** @@ -71,13 +78,19 @@ export class Credentials { * @param {boolean} [includeCESR=false] - Optional flag export the credential in CESR format * @returns {Promise} A promise to the credential */ - async get(name: string, said: string, includeCESR: boolean = false): Promise { - let path = `/identifiers/${name}/credentials/${said}` - let method = 'GET' - let headers = includeCESR? new Headers({'Accept': 'application/json+cesr'}) : new Headers({'Accept': 'application/json'}) - let res = await this.client.fetch(path, method, null, headers) - - return includeCESR? await res.text() : await res.json() + async get( + name: string, + said: string, + includeCESR: boolean = false + ): Promise { + let path = `/identifiers/${name}/credentials/${said}`; + let method = 'GET'; + let headers = includeCESR + ? new Headers({ Accept: 'application/json+cesr' }) + : new Headers({ Accept: 'application/json' }); + let res = await this.client.fetch(path, method, null, headers); + + return includeCESR ? await res.text() : await res.json(); } /** @@ -93,59 +106,67 @@ export class Credentials { * @param {boolean} [priv=false] Flag to issue a credential with privacy preserving features * @returns {Promise} A promise to the long-running operation */ - async issue(name: string, registy: string, schema: string, recipient?: string, credentialData?: any, rules?: any, source?: any, priv: boolean=false): Promise { + async issue( + name: string, + registy: string, + schema: string, + recipient?: string, + credentialData?: any, + rules?: any, + source?: any, + priv: boolean = false + ): Promise { // Create Credential - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix - const dt = new Date().toISOString().replace('Z', '000+00:00') + let hab = await this.client.identifiers().get(name); + let pre: string = hab.prefix; + const dt = new Date().toISOString().replace('Z', '000+00:00'); - const vsacdc = versify(Ident.ACDC, undefined, Serials.JSON, 0) - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) + const vsacdc = versify(Ident.ACDC, undefined, Serials.JSON, 0); + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); let cred: any = { v: vsacdc, - d: "" - } + d: '', + }; let subject: any = { - d: "", - } + d: '', + }; if (priv) { - cred.u = new Salter({}) - subject.u = new Salter({}) + cred.u = new Salter({}); + subject.u = new Salter({}); } if (recipient != undefined) { - subject.i = recipient + subject.i = recipient; } - subject.dt = dt - subject = {...subject, ...credentialData} + subject.dt = dt; + subject = { ...subject, ...credentialData }; - const [, a] = Saider.saidify(subject,undefined,undefined,"d") + const [, a] = Saider.saidify(subject, undefined, undefined, 'd'); - cred = {...cred, i:pre} - cred.ri = registy - cred = {...cred,...{s: schema}, ...{a: a}} + cred = { ...cred, i: pre }; + cred.ri = registy; + cred = { ...cred, ...{ s: schema }, ...{ a: a } }; - if (source !== undefined ) { - cred.e = source + if (source !== undefined) { + cred.e = source; } if (rules !== undefined) { - cred.r = rules + cred.r = rules; } - const [, vc] = Saider.saidify(cred) + const [, vc] = Saider.saidify(cred); // Create iss let _iss = { v: vs, t: Ilks.iss, - d: "", + d: '', i: vc.d, - s: "0", + s: '0', ri: registy, - dt: dt - - } + dt: dt, + }; - let [, iss] = Saider.saidify(_iss) + let [, iss] = Saider.saidify(_iss); // Create paths and sign let cpath = '6AABAAA-' @@ -153,29 +174,29 @@ export class Credentials { let csigs = await keeper.sign(b(JSON.stringify(vc))) // Create ixn - let ixn = {} - let sigs = [] + let ixn = {}; + let sigs = []; - let state = hab.state - if (state.c !== undefined && state.c.includes("EO")) { - var estOnly = true - } - else { - var estOnly = false + let state = hab.state; + if (state.c !== undefined && state.c.includes('EO')) { + var estOnly = true; + } else { + var estOnly = false; } - let sn = Number(state.s) - let dig = state.d + let sn = Number(state.s); + let dig = state.d; - let data:any = [{ - i: iss.i, - s: iss.s, - d: iss.d - }] + let data: any = [ + { + i: iss.i, + s: iss.s, + d: iss.d, + }, + ]; if (estOnly) { // TODO implement rotation event - throw new Error("Establishment only not implemented") - + throw new Error('Establishment only not implemented'); } else { let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) sigs = await keeper.sign(b(serder.raw)) @@ -188,18 +209,16 @@ export class Credentials { path: cpath, iss: iss, ixn: ixn, - sigs: sigs - } + sigs: sigs, + }; - let path = `/identifiers/${name}/credentials` - let method = 'POST' + let path = `/identifiers/${name}/credentials`; + let method = 'POST'; let headers = new Headers({ - 'Accept': 'application/json+cesr' - - }) - let res = await this.client.fetch(path, method, body, headers) - return await res.json() - + Accept: 'application/json+cesr', + }); + let res = await this.client.fetch(path, method, body, headers); + return await res.json(); } /** @@ -210,52 +229,52 @@ export class Credentials { * @returns {Promise} A promise to the long-running operation */ async revoke(name: string, said: string): Promise { - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix + let hab = await this.client.identifiers().get(name); + let pre: string = hab.prefix; - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) - const dt = new Date().toISOString().replace('Z', '000+00:00') + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); + const dt = new Date().toISOString().replace('Z', '000+00:00'); - let cred = await this.get(name, said) + let cred = await this.get(name, said); // Create rev let _rev = { v: vs, t: Ilks.rev, - d: "", + d: '', i: said, - s: "1", + s: '1', p: cred.status.d, ri: cred.sad.ri, - dt: dt - } + dt: dt, + }; - let [, rev] = Saider.saidify(_rev) + let [, rev] = Saider.saidify(_rev); // create ixn - let ixn = {} - let sigs = [] + let ixn = {}; + let sigs = []; - let state = hab.state - if (state.c !== undefined && state.c.includes("EO")) { - var estOnly = true - } - else { - var estOnly = false + let state = hab.state; + if (state.c !== undefined && state.c.includes('EO')) { + var estOnly = true; + } else { + var estOnly = false; } - let sn = Number(state.s) - let dig = state.d + let sn = Number(state.s); + let dig = state.d; - let data:any = [{ - i: rev.i, - s: rev.s, - d: rev.d - }] + let data: any = [ + { + i: rev.i, + s: rev.s, + d: rev.d, + }, + ]; if (estOnly) { // TODO implement rotation event - throw new Error("Establishment only not implemented") - + throw new Error('Establishment only not implemented'); } else { let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) let keeper = this.client!.manager!.get(hab) @@ -266,18 +285,16 @@ export class Credentials { let body = { rev: rev, ixn: ixn, - sigs: sigs - } + sigs: sigs, + }; - let path = `/identifiers/${name}/credentials/${said}` - let method = 'DELETE' + let path = `/identifiers/${name}/credentials/${said}`; + let method = 'DELETE'; let headers = new Headers({ - 'Accept': 'application/json+cesr' - - }) - let res = await this.client.fetch(path, method, body, headers) - return await res.json() - + Accept: 'application/json+cesr', + }); + let res = await this.client.fetch(path, method, body, headers); + return await res.json(); } /** @@ -289,58 +306,59 @@ export class Credentials { * @param {boolean} [include=true] Flag to indicate whether to stream credential alongside presentation exchange message * @returns {Promise} A promise to the long-running operation */ - async present(name: string, said: string, recipient: string, include: boolean=true): Promise { - - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix - - let cred = await this.get(name, said) + async present( + name: string, + said: string, + recipient: string, + include: boolean = true + ): Promise { + let hab = await this.client.identifiers().get(name); + let pre: string = hab.prefix; + + let cred = await this.get(name, said); let data = { i: cred.sad.i, s: cred.sad.s, - n: said - } + n: said, + }; - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); const _sad = { v: vs, t: Ilks.exn, - d: "", - dt: new Date().toISOString().replace("Z","000+00:00"), - r: "/presentation", + d: '', + dt: new Date().toISOString().replace('Z', '000+00:00'), + r: '/presentation', q: {}, - a: data - } - const [, sad] = Saider.saidify(_sad) - const exn = new Serder(sad) + a: data, + }; + const [, sad] = Saider.saidify(_sad); + const exn = new Serder(sad); - let keeper = this.client!.manager!.get(hab) - - let sig = keeper.sign(b(exn.raw),true) + let keeper = this.client!.manager!.get(hab); - let siger = new Siger({qb64:sig[0]}) - let seal = ["SealLast" , {i:pre}] - let ims = messagize(exn,[siger],seal, undefined, undefined, true) - ims = ims.slice(JSON.stringify(exn.ked).length) + let sig = keeper.sign(b(exn.raw), true); + let siger = new Siger({ qb64: sig[0] }); + let seal = ['SealLast', { i: pre }]; + let ims = messagize(exn, [siger], seal, undefined, undefined, true); + ims = ims.slice(JSON.stringify(exn.ked).length); let body = { exn: exn.ked, sig: new TextDecoder().decode(ims), recipient: recipient, - include: include - } + include: include, + }; - let path = `/identifiers/${name}/credentials/${said}/presentations` - let method = 'POST' + let path = `/identifiers/${name}/credentials/${said}/presentations`; + let method = 'POST'; let headers = new Headers({ - 'Accept': 'application/json+cesr' - - }) - let res = await this.client.fetch(path, method, body, headers) - return await res.text() - + Accept: 'application/json+cesr', + }); + let res = await this.client.fetch(path, method, body, headers); + return await res.text(); } /** @@ -352,32 +370,37 @@ export class Credentials { * @param {string} [issuer] Optional prefix of the issuer of the credential * @returns {Promise} A promise to the long-running operation */ - async request(name: string, recipient: string, schema: string, issuer?: string): Promise { - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix + async request( + name: string, + recipient: string, + schema: string, + issuer?: string + ): Promise { + let hab = await this.client.identifiers().get(name); + let pre: string = hab.prefix; - let data:any = { - s: schema - } + let data: any = { + s: schema, + }; if (issuer !== undefined) { - data["i"] = issuer + data['i'] = issuer; } - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); const _sad = { v: vs, t: Ilks.exn, - d: "", - dt: new Date().toISOString().replace("Z","000+00:00"), - r: "/presentation/request", + d: '', + dt: new Date().toISOString().replace('Z', '000+00:00'), + r: '/presentation/request', q: {}, - a: data - } - const [, sad] = Saider.saidify(_sad) - const exn = new Serder(sad) + a: data, + }; + const [, sad] = Saider.saidify(_sad); + const exn = new Serder(sad); - let keeper = this.client!.manager!.get(hab) + let keeper = this.client!.manager!.get(hab); let sig = await keeper.sign(b(exn.raw),true) @@ -386,63 +409,69 @@ export class Credentials { let ims = messagize(exn,[siger],seal, undefined, undefined, true) ims = ims.slice(JSON.stringify(exn.ked).length) + let siger = new Siger({ qb64: sig[0] }); + let seal = ['SealLast', { i: pre }]; + let ims = messagize(exn, [siger], seal, undefined, undefined, true); + ims = ims.slice(JSON.stringify(exn.ked).length); let body = { exn: exn.ked, sig: new TextDecoder().decode(ims), recipient: recipient, - } + }; - let path = `/identifiers/${name}/requests` - let method = 'POST' + let path = `/identifiers/${name}/requests`; + let method = 'POST'; let headers = new Headers({ - 'Accept': 'application/json+cesr' - - }) - let res = await this.client.fetch(path, method, body, headers) - return await res.text() - + Accept: 'application/json+cesr', + }); + let res = await this.client.fetch(path, method, body, headers); + return await res.text(); } } export interface CreateRegistryArgs { - name: string, - registryName: string, - toad?: string | number | undefined - noBackers?:boolean, - baks?:string[], - nonce?:string + name: string; + registryName: string; + toad?: string | number | undefined; + noBackers?: boolean; + baks?: string[]; + nonce?: string; } - export class RegistryResult { - private readonly _regser: any - private readonly _serder: Serder - private readonly _sigs: string[] - private readonly promise: Promise - - constructor(regser: Serder, serder: Serder, sigs: any[], promise: Promise) { - this._regser = regser - this._serder = serder - this._sigs = sigs - this.promise = promise + private readonly _regser: any; + private readonly _serder: Serder; + private readonly _sigs: string[]; + private readonly promise: Promise; + + constructor( + regser: Serder, + serder: Serder, + sigs: any[], + promise: Promise + ) { + this._regser = regser; + this._serder = serder; + this._sigs = sigs; + this.promise = promise; } get regser() { - return this._regser + return this._regser; } get serder() { - return this._serder + return this._serder; } get sigs() { - return this._sigs + return this._sigs; } async op(): Promise { - let res = await this.promise - return await res.json() + let res = await this.promise; + return await res.json(); } } @@ -450,13 +479,13 @@ export class RegistryResult { * Registries */ export class Registries { - public client: SignifyClient + public client: SignifyClient; /** * Registries - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -465,12 +494,11 @@ export class Registries { * @param {string} name Name or alias of the identifier * @returns {Promise} A promise to the list of registries */ - async list(name:string): Promise { - let path = `/identifiers/${name}/registries` - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() - + async list(name: string): Promise { + let path = `/identifiers/${name}/registries`; + let method = 'GET'; + let res = await this.client.fetch(path, method, null); + return await res.json(); } /** @@ -479,35 +507,44 @@ export class Registries { * @param {CreateRegistryArgs} * @returns {Promise<[any, Serder, any[], object]> } A promise to the long-running operation */ - async create({ name, registryName, noBackers=true, toad=0, baks=[], nonce}: CreateRegistryArgs): Promise { - let hab = await this.client.identifiers().get(name) - let pre: string = hab.prefix + async create({ + name, + registryName, + noBackers = true, + toad = 0, + baks = [], + nonce, + }: CreateRegistryArgs): Promise { + let hab = await this.client.identifiers().get(name); + let pre: string = hab.prefix; let cnfg: string[] = []; if (noBackers) { cnfg.push(TraitDex.NoBackers); } - let state = hab.state - let estOnly = (state.c !== undefined && state.c.includes("EO")); + let state = hab.state; + let estOnly = state.c !== undefined && state.c.includes('EO'); if (estOnly) { cnfg.push(TraitDex.EstOnly); } - let regser = vdr.incept({pre, baks, toad, nonce, cnfg}); + let regser = vdr.incept({ pre, baks, toad, nonce, cnfg }); if (estOnly) { - throw new Error("establishment only not implemented"); + throw new Error('establishment only not implemented'); } else { - let state = hab.state - let sn = Number(state.s) - let dig = state.d - - let data: any = [{ - i: regser.pre, - s: "0", - d: regser.pre - }] + let state = hab.state; + let sn = Number(state.s); + let dig = state.d; + + let data: any = [ + { + i: regser.pre, + s: '0', + d: regser.pre, + }, + ]; let serder = interact({pre: pre, sn: sn + 1, data: data, dig: dig, version: Versionage, kind: Serials.JSON}) let keeper = this.client.manager!.get(hab) @@ -517,36 +554,40 @@ export class Registries { } } - createFromEvents(hab: Dict, name: string, registryName: string, vcp: Dict, ixn: Dict, sigs: any[]) { - - let path = `/identifiers/${name}/registries` - let method = 'POST' + createFromEvents( + hab: Dict, + name: string, + registryName: string, + vcp: Dict, + ixn: Dict, + sigs: any[] + ) { + let path = `/identifiers/${name}/registries`; + let method = 'POST'; let data: any = { name: registryName, vcp: vcp, ixn: ixn, - sigs: sigs - } - let keeper = this.client!.manager!.get(hab) - data[keeper.algo] = keeper.params() + sigs: sigs, + }; + let keeper = this.client!.manager!.get(hab); + data[keeper.algo] = keeper.params(); - return this.client.fetch(path, method, data) - + return this.client.fetch(path, method, data); } - } /** * Schemas */ export class Schemas { - client: SignifyClient + client: SignifyClient; /** * Schemas - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -556,10 +597,10 @@ export class Schemas { * @returns {Promise} A promise to the schema */ async get(said: string): Promise { - let path = `/schema/${said}` - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() + let path = `/schema/${said}`; + let method = 'GET'; + let res = await this.client.fetch(path, method, null); + return await res.json(); } /** @@ -568,9 +609,9 @@ export class Schemas { * @returns {Promise} A promise to the list of schemas */ async list(): Promise { - let path = `/schema` - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() + let path = `/schema`; + let method = 'GET'; + let res = await this.client.fetch(path, method, null); + return await res.json(); } } diff --git a/src/keri/app/escrowing.ts b/src/keri/app/escrowing.ts index fbb04928..ec305cf0 100644 --- a/src/keri/app/escrowing.ts +++ b/src/keri/app/escrowing.ts @@ -1,33 +1,34 @@ -import { SignifyClient } from "./clienting" - +import { SignifyClient } from './clienting'; /** * Escrows */ export class Escrows { - client: SignifyClient + client: SignifyClient; /** * Escrows - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** * List replay messages * @async - * @param {string} [route] Optional route in the replay message + * @param {string} [route] Optional route in the replay message * @returns {Promise} A promise to the list of replay messages */ - async listReply(route?:string): Promise { - let params = new URLSearchParams() - if (route !== undefined) {params.append('route', route)} + async listReply(route?: string): Promise { + let params = new URLSearchParams(); + if (route !== undefined) { + params.append('route', route); + } - let path = `/escrows/rpy` + '?' + params.toString() - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() + let path = `/escrows/rpy` + '?' + params.toString(); + let method = 'GET'; + let res = await this.client.fetch(path, method, null); + return await res.json(); } } diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts index 3739a698..2ef537a9 100644 --- a/src/keri/app/exchanging.ts +++ b/src/keri/app/exchanging.ts @@ -1,23 +1,23 @@ -import { SignifyClient } from "./clienting" -import { b, d, Dict, Ident, Ilks, Serials, versify } from "../core/core"; -import { Serder } from "../core/serder"; -import { nowUTC } from "../core/utils"; -import { Pather } from "../core/pather"; -import { Counter, CtrDex } from "../core/counter"; -import { Saider } from "../core/saider"; +import { SignifyClient } from './clienting'; +import { b, d, Dict, Ident, Ilks, Serials, versify } from '../core/core'; +import { Serder } from '../core/serder'; +import { nowUTC } from '../core/utils'; +import { Pather } from '../core/pather'; +import { Counter, CtrDex } from '../core/counter'; +import { Saider } from '../core/saider'; /** * Exchanges */ export class Exchanges { - client: SignifyClient + client: SignifyClient; /** * Exchanges * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -33,7 +33,13 @@ export class Exchanges { let keeper = this.client.manager!.get(sender) let [exn, end] = exchange(route, payload, - sender["prefix"], undefined, undefined, undefined, undefined, embeds) + sender['prefix'], + undefined, + undefined, + undefined, + undefined, + embeds + ); let sigs = await keeper.sign(b(exn.raw)) return [exn, sigs, d(end)] @@ -70,97 +76,100 @@ export class Exchanges { * @param atc * @param recipients */ - async sendFromEvents(name: string, topic: string, exn: Serder, sigs: string[], atc: string, recipients: string[]): Promise { - - let path = `/identifiers/${name}/exchanges` - let method = 'POST' + async sendFromEvents( + name: string, + topic: string, + exn: Serder, + sigs: string[], + atc: string, + recipients: string[] + ): Promise { + let path = `/identifiers/${name}/exchanges`; + let method = 'POST'; let data: any = { tpc: topic, exn: exn.ked, sigs: sigs, atc: atc, - rec: recipients - } + rec: recipients, + }; - let res = await this.client.fetch(path, method, data) - return await res.json() + let res = await this.client.fetch(path, method, data); + return await res.json(); } } - -export function exchange(route: string, +export function exchange( + route: string, payload: Dict, sender: string, recipient?: string, date?: string, dig?: string, modifiers?: Dict, - embeds?: Dict): [Serder, Uint8Array] { - - - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0) - const ilk = Ilks.exn - const dt = date !== undefined ? date : nowUTC().toISOString() - const p = dig !== undefined ? dig : "" - const q = modifiers !== undefined ? modifiers : {} - const ems = embeds != undefined ? embeds : {} - - let e = {} as Dict - let end = "" - Object.entries(ems) - .forEach(([key, value]) => { - let serder = value[0]; - let atc = value[1] - e[key] = serder.ked - - if (atc == undefined) { - return - } - let pathed = "" - let pather = new Pather({}, undefined, ["e", key]) - pathed += pather.qb64 - pathed += atc - - let counter = new Counter({ - code: CtrDex.PathedMaterialQuadlets, - count: Math.floor(pathed.length / 4) - }) - end += counter.qb64 - end += pathed - }) + embeds?: Dict +): [Serder, Uint8Array] { + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); + const ilk = Ilks.exn; + const dt = date !== undefined ? date : nowUTC().toISOString(); + const p = dig !== undefined ? dig : ''; + const q = modifiers !== undefined ? modifiers : {}; + const ems = embeds != undefined ? embeds : {}; + + let e = {} as Dict; + let end = ''; + Object.entries(ems).forEach(([key, value]) => { + let serder = value[0]; + let atc = value[1]; + e[key] = serder.ked; + + if (atc == undefined) { + return; + } + let pathed = ''; + let pather = new Pather({}, undefined, ['e', key]); + pathed += pather.qb64; + pathed += atc; + + let counter = new Counter({ + code: CtrDex.PathedMaterialQuadlets, + count: Math.floor(pathed.length / 4), + }); + end += counter.qb64; + end += pathed; + }); if (Object.keys(e).length > 0) { - e["d"] = ""; - [, e] = Saider.saidify(e) + e['d'] = ''; + [, e] = Saider.saidify(e); } - const attrs = {} as Dict + const attrs = {} as Dict; if (recipient !== undefined) { - attrs['i'] = recipient + attrs['i'] = recipient; } let a = { ...attrs, - ...payload - } + ...payload, + }; let _ked = { v: vs, t: ilk, - d: "", + d: '', i: sender, p: p, dt: dt, r: route, q: q, a: a, - e: e - } - let [, ked] = Saider.saidify(_ked) + e: e, + }; + let [, ked] = Saider.saidify(_ked); - let exn = new Serder(ked) + let exn = new Serder(ked); - return [exn, b(end)] - -} \ No newline at end of file + return [exn, b(end)]; +} diff --git a/src/keri/app/grouping.ts b/src/keri/app/grouping.ts index 6b50b0d7..c53d5a31 100644 --- a/src/keri/app/grouping.ts +++ b/src/keri/app/grouping.ts @@ -1,18 +1,18 @@ -import { SignifyClient } from "./clienting" -import { Dict} from "../core/core" +import { SignifyClient } from './clienting'; +import { Dict } from '../core/core'; /** * Groups */ export class Groups { - client: SignifyClient + client: SignifyClient; /** * Groups * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -21,12 +21,11 @@ export class Groups { * @param {string} [said] SAID of exn message to load * @returns {Promise} A promise to the list of replay messages */ - async getRequest(said:string): Promise { - - let path = `/multisig/request/` + said - let method = 'GET' - let res = await this.client.fetch(path, method, null) - return await res.json() + async getRequest(said: string): Promise { + let path = `/multisig/request/` + said; + let method = 'GET'; + let res = await this.client.fetch(path, method, null); + return await res.json(); } /** @@ -38,16 +37,20 @@ export class Groups { * @param {string} [atc] additional attachments from embedded events in exn * @returns {Promise} A promise to the list of replay messages */ - async sendRequest(name: string, exn:Dict, sigs: string[], atc: string): Promise { - - let path = `/identifiers/${name}/multisig/request` - let method = 'POST' + async sendRequest( + name: string, + exn: Dict, + sigs: string[], + atc: string + ): Promise { + let path = `/identifiers/${name}/multisig/request`; + let method = 'POST'; let data = { exn: exn, sigs: sigs, - atc: atc - } - let res = await this.client.fetch(path, method, data) - return await res.json() + atc: atc, + }; + let res = await this.client.fetch(path, method, data); + return await res.json(); } } diff --git a/src/keri/app/habery.ts b/src/keri/app/habery.ts index 31f3fc33..e21638de 100644 --- a/src/keri/app/habery.ts +++ b/src/keri/app/habery.ts @@ -1,150 +1,184 @@ -import {Algos, Manager} from "../core/manager"; -import {MtrDex} from "../core/matter"; -import {Salter} from "../core/salter"; -import {Verfer} from "../core/verfer"; -import {Diger} from "../core/diger"; -import {incept} from "../core/eventing"; -import {Serder} from "../core/serder"; +import { Algos, Manager } from '../core/manager'; +import { MtrDex } from '../core/matter'; +import { Salter } from '../core/salter'; +import { Verfer } from '../core/verfer'; +import { Diger } from '../core/diger'; +import { incept } from '../core/eventing'; +import { Serder } from '../core/serder'; export class TraitCodex { - EstOnly: string = 'EO' // Only allow establishment events - DoNotDelegate: string = 'DND' // Dot not allow delegated identifiers - NoBackers: string = 'NB' // Do not allow backers + EstOnly: string = 'EO'; // Only allow establishment events + DoNotDelegate: string = 'DND'; // Dot not allow delegated identifiers + NoBackers: string = 'NB'; // Do not allow backers } -export const TraitDex = new TraitCodex() +export const TraitDex = new TraitCodex(); export interface HaberyArgs { - name: string - passcode?: string - seed?: string | undefined - aeid?: string | undefined - pidx?: number | undefined - salt?: string | undefined - tier?: string | undefined - + name: string; + passcode?: string; + seed?: string | undefined; + aeid?: string | undefined; + pidx?: number | undefined; + salt?: string | undefined; + tier?: string | undefined; } export interface MakeHabArgs { - code?: string - transferable?: boolean - isith?: string - icount?: number - nsith?: string - ncount?: number - toad?: string | number - wits?: Array - delpre?: string - estOnly?: boolean - DnD?: boolean - data?: any + code?: string; + transferable?: boolean; + isith?: string; + icount?: number; + nsith?: string; + ncount?: number; + toad?: string | number; + wits?: Array; + delpre?: string; + estOnly?: boolean; + DnD?: boolean; + data?: any; } export class Hab { - public name: string - public serder: Serder + public name: string; + public serder: Serder; constructor(name: string, icp: Serder) { - this.name = name - this.serder = icp + this.name = name; + this.serder = icp; } get pre(): string { - return this.serder.ked["i"] + return this.serder.ked['i']; } } export class Habery { private readonly _name: string; private readonly _mgr: Manager; - private readonly _habs: Map = new Map() + private readonly _habs: Map = new Map(); - constructor({name, passcode, seed, aeid, pidx, salt}: HaberyArgs) { - this._name = name + constructor({ name, passcode, seed, aeid, pidx, salt }: HaberyArgs) { + this._name = name; if (passcode != undefined && seed == undefined) { if (passcode.length < 21) { - throw new Error("Bran (passcode seed material) too short.") + throw new Error('Bran (passcode seed material) too short.'); } - let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21) // qb64 salt for seed - let signer = new Salter({qb64: bran}).signer(MtrDex.Ed25519_Seed, false) - seed = signer.qb64 + let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21); // qb64 salt for seed + let signer = new Salter({ qb64: bran }).signer( + MtrDex.Ed25519_Seed, + false + ); + seed = signer.qb64; if (aeid == undefined) { - aeid = signer.verfer.qb64 // lest it remove encryption + aeid = signer.verfer.qb64; // lest it remove encryption } } let algo; - let salter = salt != undefined ? new Salter({qb64: salt}) : undefined + let salter = salt != undefined ? new Salter({ qb64: salt }) : undefined; if (salt != undefined) { - algo = Algos.salty + algo = Algos.salty; } else { - algo = Algos.randy + algo = Algos.randy; } - this._mgr = new Manager({seed: seed, aeid: aeid, pidx: pidx, algo: algo, salter: salter}) + this._mgr = new Manager({ + seed: seed, + aeid: aeid, + pidx: pidx, + algo: algo, + salter: salter, + }); } get mgr(): Manager { - return this._mgr + return this._mgr; } get habs(): Array { - return Array.from(this._habs.values()) + return Array.from(this._habs.values()); } - habByName(name: string): Hab|undefined { - return this._habs.get(name) + habByName(name: string): Hab | undefined { + return this._habs.get(name); } - makeHab(name:string, {code = MtrDex.Blake3_256, transferable = true, isith = undefined, icount = 1, - nsith = undefined, ncount = undefined, toad = undefined, wits = undefined, delpre = undefined, - estOnly = false, DnD = false, data = undefined}: MakeHabArgs): Hab { - + makeHab( + name: string, + { + code = MtrDex.Blake3_256, + transferable = true, + isith = undefined, + icount = 1, + nsith = undefined, + ncount = undefined, + toad = undefined, + wits = undefined, + delpre = undefined, + estOnly = false, + DnD = false, + data = undefined, + }: MakeHabArgs + ): Hab { if (nsith == undefined) { - nsith = isith + nsith = isith; } if (ncount == undefined) { - ncount = icount + ncount = icount; } if (!transferable) { - ncount = 0 - nsith = "0" - code = MtrDex.Ed25519N + ncount = 0; + nsith = '0'; + code = MtrDex.Ed25519N; } let [verfers, digers] = this._mgr.incept({ - icount: icount, ncount: ncount, stem: this.name, - transferable: transferable, temp: false - }) - - icount = verfers.length - ncount = digers != undefined ? digers.length : 0 + icount: icount, + ncount: ncount, + stem: this.name, + transferable: transferable, + temp: false, + }); + + icount = verfers.length; + ncount = digers != undefined ? digers.length : 0; if (isith == undefined) { - isith = `${Math.max(1, Math.ceil(icount/2)).toString(16)}` + isith = `${Math.max(1, Math.ceil(icount / 2)).toString(16)}`; } if (nsith == undefined) { - nsith = `${Math.max(1, Math.ceil(ncount/2)).toString(16)}` + nsith = `${Math.max(1, Math.ceil(ncount / 2)).toString(16)}`; } - let cnfg = new Array() + let cnfg = new Array(); if (estOnly) { - cnfg.push(TraitDex.EstOnly) + cnfg.push(TraitDex.EstOnly); } - if(DnD) { - cnfg.push(TraitDex.DoNotDelegate) + if (DnD) { + cnfg.push(TraitDex.DoNotDelegate); } - let keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64) - let ndigs = Array.from(digers, (diger: Diger) => diger.qb64) - - - const icp = incept({keys, isith, ndigs, nsith, toad, wits, cnfg, data, code, delpre}) - const hab = new Hab(name, icp) - this._habs.set(name, hab) - return hab + let keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64); + let ndigs = Array.from(digers, (diger: Diger) => diger.qb64); + + const icp = incept({ + keys, + isith, + ndigs, + nsith, + toad, + wits, + cnfg, + data, + code, + delpre, + }); + const hab = new Hab(name, icp); + this._habs.set(name, hab); + return hab; } get name(): string { - return this._name + return this._name; } -} \ No newline at end of file +} diff --git a/src/keri/app/notifying.ts b/src/keri/app/notifying.ts index 58d11479..8a947bb2 100644 --- a/src/keri/app/notifying.ts +++ b/src/keri/app/notifying.ts @@ -1,18 +1,18 @@ -import { SignifyClient } from "./clienting" -import {parseRangeHeaders} from "../core/httping" +import { SignifyClient } from './clienting'; +import { parseRangeHeaders } from '../core/httping'; /** * Notifications */ export class Notifications { - client: SignifyClient + client: SignifyClient; /** * Notifications - * @param {SignifyClient} client + * @param {SignifyClient} client */ constructor(client: SignifyClient) { - this.client = client + this.client = client; } /** @@ -22,24 +22,24 @@ export class Notifications { * @param {number} [end=24] End index of list of notifications, defaults to 24 * @returns {Promise} A promise to the list of notifications */ - async list(start:number=0, end:number=24): Promise { - let extraHeaders = new Headers() - extraHeaders.append('Range', `notes=${start}-${end}`) - - let path = `/notifications` - let method = 'GET' - let res = await this.client.fetch(path, method, null, extraHeaders) + async list(start: number = 0, end: number = 24): Promise { + let extraHeaders = new Headers(); + extraHeaders.append('Range', `notes=${start}-${end}`); - let cr = res.headers.get('content-range') - let range = parseRangeHeaders(cr,"notes") - let notes = await res.json() + let path = `/notifications`; + let method = 'GET'; + let res = await this.client.fetch(path, method, null, extraHeaders); + + let cr = res.headers.get('content-range'); + let range = parseRangeHeaders(cr, 'notes'); + let notes = await res.json(); return { start: range.start, end: range.end, total: range.total, - notes: notes - } + notes: notes, + }; } /** @@ -48,11 +48,11 @@ export class Notifications { * @param {string} said SAID of the notification * @returns {Promise} A promise to the result of the marking */ - async mark(said:string): Promise { - let path = `/notifications/`+ said - let method = 'PUT' - let res = await this.client.fetch(path, method, null) - return await res.text() + async mark(said: string): Promise { + let path = `/notifications/` + said; + let method = 'PUT'; + let res = await this.client.fetch(path, method, null); + return await res.text(); } /** @@ -61,11 +61,10 @@ export class Notifications { * @param {string} said SAID of the notification * @returns {Promise} A promise to the result of the deletion */ - async delete(said:string): Promise { - let path = `/notifications/`+ said - let method = 'DELETE' - let res = await this.client.fetch(path, method, null) - return await res.json() + async delete(said: string): Promise { + let path = `/notifications/` + said; + let method = 'DELETE'; + let res = await this.client.fetch(path, method, null); + return await res.json(); } - } diff --git a/src/keri/core/authing.ts b/src/keri/core/authing.ts index 18c0dc02..3e0c8930 100644 --- a/src/keri/core/authing.ts +++ b/src/keri/core/authing.ts @@ -1,110 +1,117 @@ -import {Signer} from "./signer"; -import {Verfer} from "./verfer"; -import {desiginput, normalize, siginput} from "./httping"; -import {Signage, signature, designature} from "../end/ending"; -import {Cigar} from "./cigar"; -import {Siger} from "./siger"; +import { Signer } from './signer'; +import { Verfer } from './verfer'; +import { desiginput, normalize, siginput } from './httping'; +import { Signage, signature, designature } from '../end/ending'; +import { Cigar } from './cigar'; +import { Siger } from './siger'; export class Authenticater { - static DefaultFields = [ - "@method", - "@path", - "signify-resource", - "signify-timestamp", - ] + '@method', + '@path', + 'signify-resource', + 'signify-timestamp', + ]; private _verfer: Verfer; private readonly _csig: Signer; constructor(csig: Signer, verfer: Verfer) { - this._csig = csig - this._verfer = verfer + this._csig = csig; + this._verfer = verfer; } verify(headers: Headers, method: string, path: string): boolean { - let siginput = headers.get("Signature-Input") + let siginput = headers.get('Signature-Input'); if (siginput == null) { - return false + return false; } - let signature = headers.get("Signature") + let signature = headers.get('Signature'); if (signature == null) { - return false + return false; } - let inputs = desiginput(siginput) - inputs = inputs.filter((input) => input.name == "signify") + let inputs = desiginput(siginput); + inputs = inputs.filter((input) => input.name == 'signify'); if (inputs.length == 0) { - return false + return false; } inputs.forEach((input) => { - let items = new Array() + let items = new Array(); input.fields!.forEach((field: string) => { - if (field.startsWith("@")) { - if (field == "@method") { - items.push(`"${field}": ${method}`) - } else if (field == "@path") { - items.push(`"${field}": ${path}`) + if (field.startsWith('@')) { + if (field == '@method') { + items.push(`"${field}": ${method}`); + } else if (field == '@path') { + items.push(`"${field}": ${path}`); } } else { if (headers.has(field)) { - let value = normalize(headers.get(field) as string) - items.push(`"${field}": ${value}`) + let value = normalize(headers.get(field) as string); + items.push(`"${field}": ${value}`); } } - }) - let values = new Array() - values.push(`(${input.fields!.join(" ")})`) - values.push(`created=${input.created}`) + }); + let values = new Array(); + values.push(`(${input.fields!.join(' ')})`); + values.push(`created=${input.created}`); if (input.expires != undefined) { - values.push(`expires=${input.expires}`) + values.push(`expires=${input.expires}`); } if (input.nonce != undefined) { - values.push(`nonce=${input.nonce}`) + values.push(`nonce=${input.nonce}`); } if (input.keyid != undefined) { - values.push(`keyid=${input.keyid}`) + values.push(`keyid=${input.keyid}`); } if (input.context != undefined) { - values.push(`context=${input.context}`) + values.push(`context=${input.context}`); } if (input.alg != undefined) { - values.push(`alg=${input.alg}`) + values.push(`alg=${input.alg}`); } - let params = values.join(";") - items.push(`"@signature-params: ${params}"`) - let ser = items.join("\n") - let signage = designature(signature!) - let cig = signage[0].markers.get(input.name) + let params = values.join(';'); + items.push(`"@signature-params: ${params}"`); + let ser = items.join('\n'); + let signage = designature(signature!); + let cig = signage[0].markers.get(input.name); if (!this._verfer.verify(cig.raw, ser)) { - throw new Error(`Signature for ${input.keyid} invalid.`) + throw new Error(`Signature for ${input.keyid} invalid.`); } - }) + }); - return true + return true; } - sign(headers: Headers, method: string, path: string, fields?: Array): Headers { + sign( + headers: Headers, + method: string, + path: string, + fields?: Array + ): Headers { if (fields == undefined) { - fields = Authenticater.DefaultFields + fields = Authenticater.DefaultFields; } let [header, sig] = siginput(this._csig, { - name: "signify", method, path, headers, fields, alg: "ed25519", - keyid: this._csig.verfer.qb64 - }) + name: 'signify', + method, + path, + headers, + fields, + alg: 'ed25519', + keyid: this._csig.verfer.qb64, + }); header.forEach((value, key) => { - headers.append(key, value) - }) + headers.append(key, value); + }); - let markers = new Map() - markers.set("signify", sig) - let signage = new Signage(markers, false) - let signed = signature([signage]) + let markers = new Map(); + markers.set('signify', sig); + let signage = new Signage(markers, false); + let signed = signature([signage]); signed.forEach((value, key) => { - headers.append(key, value) - }) + headers.append(key, value); + }); - return headers + return headers; } - - -} \ No newline at end of file +} diff --git a/src/keri/core/bexter.ts b/src/keri/core/bexter.ts index db015faf..4920181a 100644 --- a/src/keri/core/bexter.ts +++ b/src/keri/core/bexter.ts @@ -1,10 +1,9 @@ -import {BexDex, Matter, MatterArgs, MtrDex} from "./matter"; -import {EmptyMaterialError} from "./kering"; -import Base64 from "urlsafe-base64"; - -const B64REX = "^[A-Za-z0-9\\-_]*$" -export const Reb64 = new RegExp(B64REX) +import { BexDex, Matter, MatterArgs, MtrDex } from './matter'; +import { EmptyMaterialError } from './kering'; +import Base64 from 'urlsafe-base64'; +const B64REX = '^[A-Za-z0-9\\-_]*$'; +export const Reb64 = new RegExp(B64REX); /* @@ -83,51 +82,57 @@ export const Reb64 = new RegExp(B64REX) */ export class Bexter extends Matter { - constructor({raw, code = MtrDex.StrB64_L0, qb64b, qb64, qb2}: MatterArgs, bext?: string) { - if (raw === undefined && qb64b === undefined && qb64 === undefined && qb2 === undefined) { + constructor( + { raw, code = MtrDex.StrB64_L0, qb64b, qb64, qb2 }: MatterArgs, + bext?: string + ) { + if ( + raw === undefined && + qb64b === undefined && + qb64 === undefined && + qb2 === undefined + ) { if (bext === undefined) - throw new EmptyMaterialError("Missing bext string.") + throw new EmptyMaterialError('Missing bext string.'); - let match = Reb64.exec(bext) - if (!match) - throw new Error("Invalid Base64.") + let match = Reb64.exec(bext); + if (!match) throw new Error('Invalid Base64.'); - raw = Bexter._rawify(bext) + raw = Bexter._rawify(bext); } - super({raw, code, qb64b, qb64, qb2}); + super({ raw, code, qb64b, qb64, qb2 }); if (!BexDex.has(this.code)) - throw new Error(`Invalid code = ${this.code} for Bexter.`) + throw new Error(`Invalid code = ${this.code} for Bexter.`); } static _rawify(bext: string): Uint8Array { - let ts = bext.length % 4 // bext size mod 4 - let ws = (4 - ts) % 4 // pre conv wad size in chars - let ls = (3 - ts) % 3 // post conv lead size in bytes - let wad = new Array(ws) - wad.fill('A') - let base = wad.join('') + bext // pre pad with wad of zeros in Base64 == 'A' - let raw = Base64.decode(base) // [ls:] // convert and remove leader - - return Uint8Array.from(raw).subarray(ls) // raw binary equivalent of text - + let ts = bext.length % 4; // bext size mod 4 + let ws = (4 - ts) % 4; // pre conv wad size in chars + let ls = (3 - ts) % 3; // post conv lead size in bytes + let wad = new Array(ws); + wad.fill('A'); + let base = wad.join('') + bext; // pre pad with wad of zeros in Base64 == 'A' + let raw = Base64.decode(base); // [ls:] // convert and remove leader + + return Uint8Array.from(raw).subarray(ls); // raw binary equivalent of text } get bext(): string { - let sizage = Matter.Sizes.get(this.code) - let wad = Uint8Array.from(new Array(sizage?.ls).fill(0)) - let bext = Base64.encode(Buffer.from([...wad, ...this.raw])) + let sizage = Matter.Sizes.get(this.code); + let wad = Uint8Array.from(new Array(sizage?.ls).fill(0)); + let bext = Base64.encode(Buffer.from([...wad, ...this.raw])); - let ws = 0 + let ws = 0; if (sizage?.ls === 0 && bext !== undefined) { if (bext[0] === 'A') { - ws = 1 + ws = 1; } } else { - ws = (sizage?.ls! + 1) % 4 + ws = (sizage?.ls! + 1) % 4; } - return bext.substring(ws) + return bext.substring(ws); } -} \ No newline at end of file +} diff --git a/src/keri/core/cigar.ts b/src/keri/core/cigar.ts index 1e93f884..b09ffda9 100644 --- a/src/keri/core/cigar.ts +++ b/src/keri/core/cigar.ts @@ -1,19 +1,18 @@ -import {Verfer} from "./verfer"; -import {Matter, MatterArgs} from "./matter"; - +import { Verfer } from './verfer'; +import { Matter, MatterArgs } from './matter'; export class Cigar extends Matter { - private _verfer: Verfer | undefined - constructor({raw, code, qb64, qb64b, qb2}:MatterArgs, verfer?: Verfer) { - super({raw, code, qb64, qb64b, qb2}); - this._verfer = verfer + private _verfer: Verfer | undefined; + constructor({ raw, code, qb64, qb64b, qb2 }: MatterArgs, verfer?: Verfer) { + super({ raw, code, qb64, qb64b, qb2 }); + this._verfer = verfer; } get verfer(): Verfer | undefined { - return this._verfer + return this._verfer; } - set verfer(verfer:Verfer|undefined) { - this._verfer = verfer + set verfer(verfer: Verfer | undefined) { + this._verfer = verfer; } -} \ No newline at end of file +} diff --git a/src/keri/core/cipher.ts b/src/keri/core/cipher.ts index 9e53eb5d..53095a5f 100644 --- a/src/keri/core/cipher.ts +++ b/src/keri/core/cipher.ts @@ -1,25 +1,34 @@ -import {Matter, MatterArgs, MtrDex} from "./matter"; -import {Decrypter} from "./decrypter"; - +import { Matter, MatterArgs, MtrDex } from './matter'; +import { Decrypter } from './decrypter'; export class Cipher extends Matter { - constructor({raw, code, qb64, qb64b, qb2}:MatterArgs) { + constructor({ raw, code, qb64, qb64b, qb2 }: MatterArgs) { if (raw != undefined && code == undefined) { if (raw.length == Matter._rawSize(MtrDex.X25519_Cipher_Salt)) { - code = MtrDex.X25519_Cipher_Salt - } else if (raw.length == Matter._rawSize(MtrDex.X25519_Cipher_Seed)) { - code = MtrDex.X25519_Cipher_Salt + code = MtrDex.X25519_Cipher_Salt; + } else if ( + raw.length == Matter._rawSize(MtrDex.X25519_Cipher_Seed) + ) { + code = MtrDex.X25519_Cipher_Salt; } } - super({raw: raw, code: code, qb64b: qb64b, qb64: qb64, qb2: qb2}); + super({ raw: raw, code: code, qb64b: qb64b, qb64: qb64, qb2: qb2 }); - if (!(Array.from([MtrDex.X25519_Cipher_Salt, MtrDex.X25519_Cipher_Seed]).includes(this.code))) { - throw new Error(`Unsupported Cipher code == ${this.code}`) + if ( + !Array.from([ + MtrDex.X25519_Cipher_Salt, + MtrDex.X25519_Cipher_Seed, + ]).includes(this.code) + ) { + throw new Error(`Unsupported Cipher code == ${this.code}`); } } - decrypt(prikey: Uint8Array | undefined = undefined, seed: Uint8Array | undefined = undefined) { - let decrypter = new Decrypter({qb64b: prikey}, seed) - return decrypter.decrypt(this.qb64b) + decrypt( + prikey: Uint8Array | undefined = undefined, + seed: Uint8Array | undefined = undefined + ) { + let decrypter = new Decrypter({ qb64b: prikey }, seed); + return decrypter.decrypt(this.qb64b); } -} \ No newline at end of file +} diff --git a/src/keri/core/core.ts b/src/keri/core/core.ts index bf15f9a0..a9ad6ba4 100644 --- a/src/keri/core/core.ts +++ b/src/keri/core/core.ts @@ -1,26 +1,25 @@ // import {TextEncoder, TextDecoder} from 'util' import { TextEncoder, TextDecoder } from 'text-encoding'; export enum Serials { - JSON = "JSON", + JSON = 'JSON', } export enum Ident { - KERI = "KERI", - ACDC = "ACDC" + KERI = 'KERI', + ACDC = 'ACDC', } export class Version { - public major: number - public minor: number + public major: number; + public minor: number; constructor(major: number = 1, minor: number = 0) { - this.major = major - this.minor = minor + this.major = major; + this.minor = minor; } } -export const Versionage = new Version() - +export const Versionage = new Version(); export const Ilks = { icp: 'icp', @@ -34,28 +33,93 @@ export const Ilks = { exn: 'exn', vcp: 'vcp', iss: 'iss', - rev: 'rev' + rev: 'rev', }; -export const IcpLabels = ["v", "i", "s", "t", "kt", "k", "n", - "bt", "b", "c", "a"]; - -export const DipLabels = ["v", "i", "s", "t", "kt", "k", "n", - "bt", "b", "c", "a", "di"]; - -export const RotLabels = ["v", "i", "s", "t", "p", "kt", "k", "n", - "bt", "br", "ba", "a"] -export const DrtLabels = ["v", "i", "s", "t", "p", "kt", "k", "n", - "bt", "br", "ba", "a"] -export const IxnLabels = ["v", "i", "s", "t", "p", "a"] - -export const KsnLabels = ["v", "i", "s", "t", "p", "d", "f", "dt", "et", "kt", "k", "n", - "bt", "b", "c", "ee", "di", "r"] - -export const RpyLabels = ["v", "t", "d", "dt", "r", "a"] - -const encoder = new TextEncoder() -const decoder = new TextDecoder() +export const IcpLabels = [ + 'v', + 'i', + 's', + 't', + 'kt', + 'k', + 'n', + 'bt', + 'b', + 'c', + 'a', +]; + +export const DipLabels = [ + 'v', + 'i', + 's', + 't', + 'kt', + 'k', + 'n', + 'bt', + 'b', + 'c', + 'a', + 'di', +]; + +export const RotLabels = [ + 'v', + 'i', + 's', + 't', + 'p', + 'kt', + 'k', + 'n', + 'bt', + 'br', + 'ba', + 'a', +]; +export const DrtLabels = [ + 'v', + 'i', + 's', + 't', + 'p', + 'kt', + 'k', + 'n', + 'bt', + 'br', + 'ba', + 'a', +]; +export const IxnLabels = ['v', 'i', 's', 't', 'p', 'a']; + +export const KsnLabels = [ + 'v', + 'i', + 's', + 't', + 'p', + 'd', + 'f', + 'dt', + 'et', + 'kt', + 'k', + 'n', + 'bt', + 'b', + 'c', + 'ee', + 'di', + 'r', +]; + +export const RpyLabels = ['v', 't', 'd', 'dt', 'r', 'a']; + +const encoder = new TextEncoder(); +const decoder = new TextDecoder(); export const VERFULLSIZE = 17; export const MINSNIFFSIZE = 12 + VERFULLSIZE; @@ -81,7 +145,9 @@ export interface Dict { * @return {Object} contaning prototol (KERI or ACDC), kind of serialization like cbor,json,mgpk * version = version of object ,size = raw size integer */ -export function deversify(versionString: string): [Ident, Serials, Version, string] { +export function deversify( + versionString: string +): [Ident, Serials, Version, string] { let kind; let size; let proto; @@ -106,93 +172,157 @@ export function deversify(versionString: string): [Ident, Serials, Version, stri if (!Object.values(Ident).includes(proto as Ident)) { throw new Error(`Invalid serialization kind = ${kind}`); } - - let ta = kind as keyof typeof Serials - kind = Serials[ta] - let pa = proto as keyof typeof Ident - proto = Ident[pa] + let ta = kind as keyof typeof Serials; + kind = Serials[ta]; + let pa = proto as keyof typeof Ident; + proto = Ident[pa]; return [proto, kind, version, size]; } throw new Error(`Invalid version string = ${versionString}`); } -export function versify(ident: Ident = Ident.KERI, version?: Version, kind: Serials=Serials.JSON, size:number = 0) { - version = version == undefined ? Versionage : version - - return `${ident}${version.major.toString(16)}${version.minor.toString()}${kind}${size.toString(16).padStart(6, '0')}_` +export function versify( + ident: Ident = Ident.KERI, + version?: Version, + kind: Serials = Serials.JSON, + size: number = 0 +) { + version = version == undefined ? Versionage : version; + + return `${ident}${version.major.toString( + 16 + )}${version.minor.toString()}${kind}${size.toString(16).padStart(6, '0')}_`; } - -export const B64ChrByIdx = new Map([[0, 'A'], [1, 'B'], [2, 'C'], [3, 'D'], [4, 'E'], [5, 'F'], - [6, 'G'], [7, 'H'], [8, 'I'], [9, 'J'], [10, 'K'], [11, 'L'], [12, 'M'], [13, 'N'], [14, 'O'], [15, 'P'], - [16, 'Q'], [17, 'R'], [18, 'S'], [19, 'T'], [20, 'U'], [21, 'V'], [22, 'W'], [23, 'X'], [24, 'Y'], [25, 'Z'], - [26, 'a'], [27, 'b'], [28, 'c'], [29, 'd'], [30, 'e'], [31, 'f'], [32, 'g'], [33, 'h'], [34, 'i'], [35, 'j'], - [36, 'k'], [37, 'l'], [38, 'm'], [39, 'n'], [40, 'o'], [41, 'p'], [42, 'q'], [43, 'r'], [44, 's'], [45, 't'], - [46, 'u'], [47, 'v'], [48, 'w'], [49, 'x'], [50, 'y'], [51, 'z'],[ 52, '0'], [53, '1'], [54, '2'], [55, '3'], - [56, '4'], [57, '5'], [58, '6'], [59, '7'], [60, '8'], [61, '9'], [62, '-'], [63, '_']]); - -export const B64IdxByChr = new Map(Array.from(B64ChrByIdx, entry => [entry[1], entry[0]])) - - -export function intToB64(i:number, l=1): string { - let out = "" - while(l != 0) { - out = B64ChrByIdx.get(i % 64) + out - i = Math.floor(i / 64) +export const B64ChrByIdx = new Map([ + [0, 'A'], + [1, 'B'], + [2, 'C'], + [3, 'D'], + [4, 'E'], + [5, 'F'], + [6, 'G'], + [7, 'H'], + [8, 'I'], + [9, 'J'], + [10, 'K'], + [11, 'L'], + [12, 'M'], + [13, 'N'], + [14, 'O'], + [15, 'P'], + [16, 'Q'], + [17, 'R'], + [18, 'S'], + [19, 'T'], + [20, 'U'], + [21, 'V'], + [22, 'W'], + [23, 'X'], + [24, 'Y'], + [25, 'Z'], + [26, 'a'], + [27, 'b'], + [28, 'c'], + [29, 'd'], + [30, 'e'], + [31, 'f'], + [32, 'g'], + [33, 'h'], + [34, 'i'], + [35, 'j'], + [36, 'k'], + [37, 'l'], + [38, 'm'], + [39, 'n'], + [40, 'o'], + [41, 'p'], + [42, 'q'], + [43, 'r'], + [44, 's'], + [45, 't'], + [46, 'u'], + [47, 'v'], + [48, 'w'], + [49, 'x'], + [50, 'y'], + [51, 'z'], + [52, '0'], + [53, '1'], + [54, '2'], + [55, '3'], + [56, '4'], + [57, '5'], + [58, '6'], + [59, '7'], + [60, '8'], + [61, '9'], + [62, '-'], + [63, '_'], +]); + +export const B64IdxByChr = new Map( + Array.from(B64ChrByIdx, (entry) => [entry[1], entry[0]]) +); + +export function intToB64(i: number, l = 1): string { + let out = ''; + while (l != 0) { + out = B64ChrByIdx.get(i % 64) + out; + i = Math.floor(i / 64); if (i == 0) { - break + break; } } - let x = (l - out.length) - for(let i = 0; i < x; i++) { - out = "A" + out + let x = l - out.length; + for (let i = 0; i < x; i++) { + out = 'A' + out; } - return out + return out; } export function intToB64b(n: number, l: number = 1): Uint8Array { - let s = intToB64(n, l) - return b(s) + let s = intToB64(n, l); + return b(s); } export function b64ToInt(s: string): number { if (s.length == 0) { - throw new Error("Empty string, conversion undefined.") + throw new Error('Empty string, conversion undefined.'); } - let i = 0 - let rev = s.split("").reverse() + let i = 0; + let rev = s.split('').reverse(); rev.forEach((c: string, e: number) => { - i |= B64IdxByChr.get(c)! << (e * 6) - }) + i |= B64IdxByChr.get(c)! << (e * 6); + }); - return i + return i; } export function b(s?: string): Uint8Array { - return encoder.encode(s) + return encoder.encode(s); } -export function d(u? :Uint8Array): string { - return decoder.decode(u) +export function d(u?: Uint8Array): string { + return decoder.decode(u); } export function concat(one: Uint8Array, two: Uint8Array): Uint8Array { - let out = new Uint8Array(one.length + two.length) - out.set(one) - out.set(two, one.length) - return out + let out = new Uint8Array(one.length + two.length); + out.set(one); + out.set(two, one.length); + return out; } - export function readInt(array: Uint8Array) { let value = 0; for (let i = 0; i < array.length; i++) { - value = (value * 256) + array[i]; + value = value * 256 + array[i]; } return value; } diff --git a/src/keri/core/counter.ts b/src/keri/core/counter.ts index f6464d95..814da818 100644 --- a/src/keri/core/counter.ts +++ b/src/keri/core/counter.ts @@ -1,97 +1,151 @@ -import {Codex, Sizage} from "./matter"; -import {b, b64ToInt, d, intToB64} from "./core"; +import { Codex, Sizage } from './matter'; +import { b, b64ToInt, d, intToB64 } from './core'; export interface CounterArgs { - code?: string - count?: number - countB64?: string - qb64b?: Uint8Array, - qb64?: string - qb2?: Uint8Array - strip?: boolean + code?: string; + count?: number; + countB64?: string; + qb64b?: Uint8Array; + qb64?: string; + qb2?: Uint8Array; + strip?: boolean; } export class CounterCodex extends Codex { - public ControllerIdxSigs: string = '-A' // Qualified Base64 Indexed Signature. - public WitnessIdxSigs: string = '-B' // Qualified Base64 Indexed Signature. - public NonTransReceiptCouples: string = '-C' // Composed Base64 Couple, pre+cig. - public TransReceiptQuadruples: string = '-D' // Composed Base64 Quadruple, pre+snu+dig+sig. - public FirstSeenReplayCouples: string = '-E' // Composed Base64 Couple, fnu+dts. - public TransIdxSigGroups: string = '-F' // Composed Base64 Group, pre+snu+dig+ControllerIdxSigs group. - public SealSourceCouples: string = '-G' // Composed Base64 couple, snu+dig of given delegators or issuers event - public TransLastIdxSigGroups: string = '-H' // Composed Base64 Group, pre+ControllerIdxSigs group. - public SealSourceTriples: string = '-I' // Composed Base64 triple, pre+snu+dig of anchoring source event - public SadPathSig: string = '-J' // Composed Base64 Group path+TransIdxSigGroup of SAID of content - public SadPathSigGroup: string = '-K' // Composed Base64 Group, root(path)+SaidPathCouples - public PathedMaterialQuadlets: string = '-L' // Composed Grouped Pathed Material Quadlet (4 char each) - public AttachedMaterialQuadlets: string = '-V' // Composed Grouped Attached Material Quadlet (4 char each) - public BigAttachedMaterialQuadlets: string = '-0V' // Composed Grouped Attached Material Quadlet (4 char each) - public KERIProtocolStack: string = '--AAA' // KERI ACDC Protocol Stack CESR Version + public ControllerIdxSigs: string = '-A'; // Qualified Base64 Indexed Signature. + public WitnessIdxSigs: string = '-B'; // Qualified Base64 Indexed Signature. + public NonTransReceiptCouples: string = '-C'; // Composed Base64 Couple, pre+cig. + public TransReceiptQuadruples: string = '-D'; // Composed Base64 Quadruple, pre+snu+dig+sig. + public FirstSeenReplayCouples: string = '-E'; // Composed Base64 Couple, fnu+dts. + public TransIdxSigGroups: string = '-F'; // Composed Base64 Group, pre+snu+dig+ControllerIdxSigs group. + public SealSourceCouples: string = '-G'; // Composed Base64 couple, snu+dig of given delegators or issuers event + public TransLastIdxSigGroups: string = '-H'; // Composed Base64 Group, pre+ControllerIdxSigs group. + public SealSourceTriples: string = '-I'; // Composed Base64 triple, pre+snu+dig of anchoring source event + public SadPathSig: string = '-J'; // Composed Base64 Group path+TransIdxSigGroup of SAID of content + public SadPathSigGroup: string = '-K'; // Composed Base64 Group, root(path)+SaidPathCouples + public PathedMaterialQuadlets: string = '-L'; // Composed Grouped Pathed Material Quadlet (4 char each) + public AttachedMaterialQuadlets: string = '-V'; // Composed Grouped Attached Material Quadlet (4 char each) + public BigAttachedMaterialQuadlets: string = '-0V'; // Composed Grouped Attached Material Quadlet (4 char each) + public KERIProtocolStack: string = '--AAA'; // KERI ACDC Protocol Stack CESR Version } -export const CtrDex = new CounterCodex() +export const CtrDex = new CounterCodex(); export class Counter { - static Sizes = new Map(Object.entries({ - '-A': new Sizage(2, 2, 4, 0), - '-B': new Sizage(2, 2, 4, 0), - '-C': new Sizage(2, 2, 4, 0), - '-D': new Sizage(2, 2, 4, 0), - '-E': new Sizage(2, 2, 4, 0), - '-F': new Sizage(2, 2, 4, 0), - '-G': new Sizage(2, 2, 4, 0), - '-H': new Sizage(2, 2, 4, 0), - '-I': new Sizage(2, 2, 4, 0), - '-J': new Sizage(2, 2, 4, 0), - '-K': new Sizage(2, 2, 4, 0), - '-L': new Sizage(2, 2, 4, 0), - '-V': new Sizage(2, 2, 4, 0), - '-0V': new Sizage(3, 5, 8, 0), - '--AAA': new Sizage(5, 3, 8, 0), - })) - - static Hards = new Map([['-A', 2], ['-B', 2], ['-C', 2], ['-D', 2], ['-E', 2], ['-F', 2], ['-G', 2], - ['-H', 2], ['-I', 2], ['-J', 2], ['-K', 2], ['-L', 2], ['-M', 2], ['-N', 2], ['-O', 2], ['-P', 2], ['-Q', 2], - ['-R', 2], ['-S', 2], ['-T', 2], ['-U', 2], ['-V', 2], ['-W', 2], ['-X', 2], ['-Y', 2], ['-Z', 2], ['-a', 2], - ['-b', 2], ['-c', 2], ['-d', 2], ['-e', 2], ['-f', 2], ['-g', 2], ['-h', 2], ['-i', 2], ['-j', 2], ['-k', 2], - ['-l', 2], ['-m', 2], ['-n', 2], ['-o', 2], ['-p', 2], ['-q', 2], ['-r', 2], ['-s', 2], ['-t', 2], ['-u', 2], - ['-v', 2], ['-w', 2], ['-x', 2], ['-y', 2], ['-z', 2], ['-0', 3], ['--', 5]]) - - private _code: string = ""; + static Sizes = new Map( + Object.entries({ + '-A': new Sizage(2, 2, 4, 0), + '-B': new Sizage(2, 2, 4, 0), + '-C': new Sizage(2, 2, 4, 0), + '-D': new Sizage(2, 2, 4, 0), + '-E': new Sizage(2, 2, 4, 0), + '-F': new Sizage(2, 2, 4, 0), + '-G': new Sizage(2, 2, 4, 0), + '-H': new Sizage(2, 2, 4, 0), + '-I': new Sizage(2, 2, 4, 0), + '-J': new Sizage(2, 2, 4, 0), + '-K': new Sizage(2, 2, 4, 0), + '-L': new Sizage(2, 2, 4, 0), + '-V': new Sizage(2, 2, 4, 0), + '-0V': new Sizage(3, 5, 8, 0), + '--AAA': new Sizage(5, 3, 8, 0), + }) + ); + + static Hards = new Map([ + ['-A', 2], + ['-B', 2], + ['-C', 2], + ['-D', 2], + ['-E', 2], + ['-F', 2], + ['-G', 2], + ['-H', 2], + ['-I', 2], + ['-J', 2], + ['-K', 2], + ['-L', 2], + ['-M', 2], + ['-N', 2], + ['-O', 2], + ['-P', 2], + ['-Q', 2], + ['-R', 2], + ['-S', 2], + ['-T', 2], + ['-U', 2], + ['-V', 2], + ['-W', 2], + ['-X', 2], + ['-Y', 2], + ['-Z', 2], + ['-a', 2], + ['-b', 2], + ['-c', 2], + ['-d', 2], + ['-e', 2], + ['-f', 2], + ['-g', 2], + ['-h', 2], + ['-i', 2], + ['-j', 2], + ['-k', 2], + ['-l', 2], + ['-m', 2], + ['-n', 2], + ['-o', 2], + ['-p', 2], + ['-q', 2], + ['-r', 2], + ['-s', 2], + ['-t', 2], + ['-u', 2], + ['-v', 2], + ['-w', 2], + ['-x', 2], + ['-y', 2], + ['-z', 2], + ['-0', 3], + ['--', 5], + ]); + + private _code: string = ''; private _count: number = -1; - constructor({code, count, countB64, qb64b, qb64, qb2}: CounterArgs) { + constructor({ code, count, countB64, qb64b, qb64, qb2 }: CounterArgs) { if (code != undefined) { if (!Counter.Sizes.has(code)) { - throw new Error(`"Unsupported code=${code}.`) + throw new Error(`"Unsupported code=${code}.`); } - let sizage = Counter.Sizes.get(code)! - let cs = sizage.hs + sizage.ss + let sizage = Counter.Sizes.get(code)!; + let cs = sizage.hs + sizage.ss; if (sizage.fs != cs || cs % 4 != 0) { - throw new Error(`Whole code size not full size or not multiple of 4. cs=${cs} fs=${sizage.fs}.`) + throw new Error( + `Whole code size not full size or not multiple of 4. cs=${cs} fs=${sizage.fs}.` + ); } if (count == undefined) { - count = countB64 == undefined ? 1 : b64ToInt(countB64) + count = countB64 == undefined ? 1 : b64ToInt(countB64); } - if (count < 0 || count > (64 ** sizage.ss - 1)) { - throw new Error(`Invalid count=${count} for code=${code}.`) + if (count < 0 || count > 64 ** sizage.ss - 1) { + throw new Error(`Invalid count=${count} for code=${code}.`); } - this._code = code - this._count = count - + this._code = code; + this._count = count; } else if (qb64b != undefined) { - let qb64 = d(qb64b) - this._exfil(qb64) + let qb64 = d(qb64b); + this._exfil(qb64); } else if (qb64 != undefined) { - this._exfil(qb64) + this._exfil(qb64); } else if (qb2 != undefined) { - } else { - throw new Error(`Improper initialization need either (code and count) or qb64b or qb64 or qb2.`) + throw new Error( + `Improper initialization need either (code and count) or qb64b or qb64 or qb2.` + ); } } @@ -108,43 +162,52 @@ export class Counter { } get qb64b() { - return b(this.qb64) + return b(this.qb64); } countToB64(l?: number): string { if (l == undefined) { - let sizage = Counter.Sizes.get(this.code)! - l = sizage.ss + let sizage = Counter.Sizes.get(this.code)!; + l = sizage.ss; } - return intToB64(this.count, l) + return intToB64(this.count, l); } - static semVerToB64(version: string = "", major: number = 0, minor: number = 0, patch: number = 0): string { - let parts = [major, minor, patch] - if (version != "") { - let ssplits = version.split(".") + static semVerToB64( + version: string = '', + major: number = 0, + minor: number = 0, + patch: number = 0 + ): string { + let parts = [major, minor, patch]; + if (version != '') { + let ssplits = version.split('.'); let splits = ssplits.map((x) => { - if (x == "") return 0 - return parseInt(x) - }) + if (x == '') return 0; + return parseInt(x); + }); - let off = splits.length - let x = 3 - off + let off = splits.length; + let x = 3 - off; for (let i = 0; i < x; i++) { - splits.push(parts[i + off]) + splits.push(parts[i + off]); } - parts = splits + parts = splits; } parts.forEach((p) => { - if(p < 0 || p > 63) { - throw new Error(`Out of bounds semantic version. Part=${p} is < 0 or > 63.`) + if (p < 0 || p > 63) { + throw new Error( + `Out of bounds semantic version. Part=${p} is < 0 or > 63.` + ); } - }) + }); - return parts.map((p) => { - return intToB64(p, 1) - }).join("") + return parts + .map((p) => { + return intToB64(p, 1); + }) + .join(''); } private _infil(): string { @@ -152,56 +215,59 @@ export class Counter { let count = this.count; let sizage = Counter.Sizes.get(code)!; - let cs = sizage.hs + sizage.ss + let cs = sizage.hs + sizage.ss; if (sizage.fs != cs || cs % 4 != 0) { - throw new Error(`Whole code size not full size or not multiple of 4. cs=${cs} fs=${sizage.fs}.`) + throw new Error( + `Whole code size not full size or not multiple of 4. cs=${cs} fs=${sizage.fs}.` + ); } - if (count < 0 || count > (64 ** sizage.ss - 1)) { - throw new Error(`Invalid count=${count} for code=${code}.`) + if (count < 0 || count > 64 ** sizage.ss - 1) { + throw new Error(`Invalid count=${count} for code=${code}.`); } - let both = `${code}${intToB64(count, sizage.ss)}` + let both = `${code}${intToB64(count, sizage.ss)}`; if (both.length % 4) { - throw new Error(`Invalid size = ${both.length} of ${both} not a multiple of 4.`) + throw new Error( + `Invalid size = ${both.length} of ${both} not a multiple of 4.` + ); } - return both + return both; } private _exfil(qb64: string) { if (qb64.length == 0) { - throw new Error("Empty Material") + throw new Error('Empty Material'); } let first = qb64.slice(0, 2); if (!Counter.Hards.has(first)) { - throw new Error(`Unexpected code ${first}`) + throw new Error(`Unexpected code ${first}`); } let hs = Counter.Hards.get(first)!; if (qb64.length < hs) { - throw new Error(`Need ${hs - qb64.length} more characters.`) + throw new Error(`Need ${hs - qb64.length} more characters.`); } let hard = qb64.slice(0, hs); if (!Counter.Sizes.has(hard)) { - throw new Error(`Unsupported code ${hard}`) + throw new Error(`Unsupported code ${hard}`); } let sizage = Counter.Sizes.get(hard)!; let cs = sizage!.hs + sizage!.ss; if (qb64.length < cs) { - throw new Error(`Need ${cs - qb64.length} more chars.`) + throw new Error(`Need ${cs - qb64.length} more chars.`); } - let scount = qb64.slice(sizage.hs, sizage.hs + sizage.ss) - let count = b64ToInt(scount) + let scount = qb64.slice(sizage.hs, sizage.hs + sizage.ss); + let count = b64ToInt(scount); - this._code = hard - this._count = count + this._code = hard; + this._count = count; } - -} \ No newline at end of file +} diff --git a/src/keri/core/decrypter.ts b/src/keri/core/decrypter.ts index 0a99f851..840aaea9 100644 --- a/src/keri/core/decrypter.ts +++ b/src/keri/core/decrypter.ts @@ -1,66 +1,76 @@ -import libsodium from "libsodium-wrappers-sumo"; - -import {Matter, MatterArgs, MtrDex} from './matter'; -import {Signer} from "./signer"; -import {Cipher} from "./cipher"; -import {EmptyMaterialError} from "./kering"; -import {Salter} from "./salter"; +import libsodium from 'libsodium-wrappers-sumo'; +import { Matter, MatterArgs, MtrDex } from './matter'; +import { Signer } from './signer'; +import { Cipher } from './cipher'; +import { EmptyMaterialError } from './kering'; +import { Salter } from './salter'; export class Decrypter extends Matter { private readonly _decrypt: any; - constructor({raw, code = MtrDex.X25519_Private, qb64, qb64b, qb2}:MatterArgs, seed: Uint8Array | undefined = undefined) { + constructor( + { raw, code = MtrDex.X25519_Private, qb64, qb64b, qb2 }: MatterArgs, + seed: Uint8Array | undefined = undefined + ) { try { - super({raw, code, qb64, qb64b, qb2}) - } catch(e) { - if(e instanceof EmptyMaterialError) { + super({ raw, code, qb64, qb64b, qb2 }); + } catch (e) { + if (e instanceof EmptyMaterialError) { if (seed != undefined) { - let signer = new Signer({qb64b: seed}) + let signer = new Signer({ qb64b: seed }); if (signer.code != MtrDex.Ed25519_Seed) { - throw new Error(`Unsupported signing seed derivation code ${signer.code}`) + throw new Error( + `Unsupported signing seed derivation code ${signer.code}` + ); } - let sigkey = new Uint8Array(signer.raw.length + signer.verfer.raw.length) - sigkey.set(signer.raw) - sigkey.set(signer.verfer.raw, signer.raw.length) - raw = libsodium.crypto_sign_ed25519_sk_to_curve25519(sigkey) - super({raw, code, qb64, qb64b, qb2}) - } - else { - throw e + let sigkey = new Uint8Array( + signer.raw.length + signer.verfer.raw.length + ); + sigkey.set(signer.raw); + sigkey.set(signer.verfer.raw, signer.raw.length); + raw = + libsodium.crypto_sign_ed25519_sk_to_curve25519(sigkey); + super({ raw, code, qb64, qb64b, qb2 }); + } else { + throw e; } } else { - throw e + throw e; } } if (this.code == MtrDex.X25519_Private) { - this._decrypt = this._x25519 + this._decrypt = this._x25519; } else { - throw new Error(`Unsupported decrypter code = ${this.code}.`) + throw new Error(`Unsupported decrypter code = ${this.code}.`); } } - decrypt(ser: Uint8Array | null = null, cipher: Cipher | null = null, transferable: boolean = false) { + decrypt( + ser: Uint8Array | null = null, + cipher: Cipher | null = null, + transferable: boolean = false + ) { if (ser == null && cipher == null) { - throw new EmptyMaterialError("Neither ser or cipher were provided") + throw new EmptyMaterialError('Neither ser or cipher were provided'); } if (ser != null) { - cipher = new Cipher({qb64b: ser}) + cipher = new Cipher({ qb64b: ser }); } - return this._decrypt(cipher, this.raw, transferable) + return this._decrypt(cipher, this.raw, transferable); } _x25519(cipher: Cipher, prikey: Uint8Array, transferable: boolean = false) { - let pubkey = libsodium.crypto_scalarmult_base(prikey) - let plain = libsodium.crypto_box_seal_open(cipher.raw, pubkey, prikey) + let pubkey = libsodium.crypto_scalarmult_base(prikey); + let plain = libsodium.crypto_box_seal_open(cipher.raw, pubkey, prikey); if (cipher.code == MtrDex.X25519_Cipher_Salt) { - return new Salter({qb64b: plain}) + return new Salter({ qb64b: plain }); } else if (cipher.code == MtrDex.X25519_Cipher_Seed) { - return new Signer({qb64b: plain, transferable: transferable}) + return new Signer({ qb64b: plain, transferable: transferable }); } else { - throw new Error(`Unsupported cipher text code == ${cipher.code}`) + throw new Error(`Unsupported cipher text code == ${cipher.code}`); } } -} \ No newline at end of file +} diff --git a/src/keri/core/diger.ts b/src/keri/core/diger.ts index 69a45b0f..f3323e44 100644 --- a/src/keri/core/diger.ts +++ b/src/keri/core/diger.ts @@ -1,6 +1,6 @@ -import {createHash} from "blake3" +import { createHash } from 'blake3'; -import {Matter, MatterArgs, MtrDex} from './matter'; +import { Matter, MatterArgs, MtrDex } from './matter'; /** * @description : Diger is subset of Matter and is used to verify the digest of serialization @@ -10,12 +10,15 @@ import {Matter, MatterArgs, MtrDex} from './matter'; */ export class Diger extends Matter { - private readonly _verify: any + private readonly _verify: any; // This constructor will assign digest verification function to ._verify - constructor({raw, code = MtrDex.Blake3_256, qb64, qb64b, qb2}: MatterArgs, ser: Uint8Array | null = null) { + constructor( + { raw, code = MtrDex.Blake3_256, qb64, qb64b, qb2 }: MatterArgs, + ser: Uint8Array | null = null + ) { try { - super({raw, code, qb64, qb64b, qb2}); + super({ raw, code, qb64, qb64b, qb2 }); } catch (error) { if (ser == null) { throw error; @@ -24,7 +27,7 @@ export class Diger extends Matter { if (code === MtrDex.Blake3_256) { const hasher = createHash(); const dig = hasher.update(ser).digest(''); - super({raw: dig, code: code}); + super({ raw: dig, code: code }); } else { throw new Error(`Unsupported code = ${code} for digester.`); } @@ -37,7 +40,6 @@ export class Diger extends Matter { } } - /** * * @param {Uint8Array} ser serialization bytes @@ -49,34 +51,31 @@ export class Diger extends Matter { return this._verify(ser, this.raw); } - compare(ser: Uint8Array, dig: any = null, diger: Diger | null = null ) { + compare(ser: Uint8Array, dig: any = null, diger: Diger | null = null) { if (dig != null) { if (dig.toString() == this.qb64) { - return true + return true; } - diger = new Diger({qb64b: dig}) + diger = new Diger({ qb64b: dig }); } else if (diger != null) { if (diger.qb64b == this.qb64b) { return true; } - } - - else { - throw new Error("Both dig and diger may not be None.") + } else { + throw new Error('Both dig and diger may not be None.'); } if (diger.code == this.code) { - return false + return false; } - return diger.verify(ser) && this.verify(ser) + return diger.verify(ser) && this.verify(ser); } - blake3_256(ser: Uint8Array, dig: any) { const hasher = createHash(); let digest = hasher.update(ser).digest(''); - return (digest.toString() === dig.toString()); + return digest.toString() === dig.toString(); } } diff --git a/src/keri/core/encrypter.ts b/src/keri/core/encrypter.ts index 10af3162..ddaff633 100644 --- a/src/keri/core/encrypter.ts +++ b/src/keri/core/encrypter.ts @@ -1,60 +1,70 @@ -import libsodium from "libsodium-wrappers-sumo"; - -import {Matter, MatterArgs, MtrDex} from './matter'; -import {Verfer} from "./verfer"; -import {Signer} from "./signer"; -import {Cipher} from "./cipher"; -import {arrayEquals} from "./utils"; +import libsodium from 'libsodium-wrappers-sumo'; +import { Matter, MatterArgs, MtrDex } from './matter'; +import { Verfer } from './verfer'; +import { Signer } from './signer'; +import { Cipher } from './cipher'; +import { arrayEquals } from './utils'; export class Encrypter extends Matter { private _encrypt: any; - constructor({raw, code = MtrDex.X25519, qb64, qb64b, qb2}:MatterArgs, verkey: Uint8Array | null = null) { + constructor( + { raw, code = MtrDex.X25519, qb64, qb64b, qb2 }: MatterArgs, + verkey: Uint8Array | null = null + ) { if (raw == undefined && verkey != null) { - let verfer = new Verfer({qb64b: verkey}) - if (!Array.from([MtrDex.Ed25519N, MtrDex.Ed25519]).includes(verfer.code)) { - throw new Error(`Unsupported verkey derivation code = ${verfer.code}.`) + let verfer = new Verfer({ qb64b: verkey }); + if ( + !Array.from([MtrDex.Ed25519N, MtrDex.Ed25519]).includes( + verfer.code + ) + ) { + throw new Error( + `Unsupported verkey derivation code = ${verfer.code}.` + ); } - raw = libsodium.crypto_sign_ed25519_pk_to_curve25519(verfer.raw) + raw = libsodium.crypto_sign_ed25519_pk_to_curve25519(verfer.raw); } - super({raw, code, qb64, qb64b, qb2}); + super({ raw, code, qb64, qb64b, qb2 }); if (this.code == MtrDex.X25519) { this._encrypt = this._x25519; } else { - throw new Error(`Unsupported encrypter code = ${this.code}.`) + throw new Error(`Unsupported encrypter code = ${this.code}.`); } } verifySeed(seed: Uint8Array) { - let signer = new Signer({qb64b: seed}) + let signer = new Signer({ qb64b: seed }); let keypair = libsodium.crypto_sign_seed_keypair(signer.raw); - let pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519(keypair.publicKey) - return arrayEquals(pubkey, this.raw) + let pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519( + keypair.publicKey + ); + return arrayEquals(pubkey, this.raw); } encrypt(ser: Uint8Array | null = null, matter: Matter | null = null) { if (ser == null && matter == null) { - throw new Error("Neither ser nor matter are provided.") + throw new Error('Neither ser nor matter are provided.'); } if (ser != null) { - matter = new Matter({qb64b: ser}) + matter = new Matter({ qb64b: ser }); } - let code + let code; if (matter!.code == MtrDex.Salt_128) { - code = MtrDex.X25519_Cipher_Salt + code = MtrDex.X25519_Cipher_Salt; } else { - code = MtrDex.X25519_Cipher_Seed + code = MtrDex.X25519_Cipher_Seed; } - return this._encrypt(matter!.qb64, this.raw, code) + return this._encrypt(matter!.qb64, this.raw, code); } _x25519(ser: Uint8Array, pubkey: Uint8Array, code: string) { - let raw = libsodium.crypto_box_seal(ser, pubkey) - return new Cipher({raw: raw, code: code}) + let raw = libsodium.crypto_box_seal(ser, pubkey); + return new Cipher({ raw: raw, code: code }); } -} \ No newline at end of file +} diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index 3e88f1c2..28ddad57 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -1,37 +1,47 @@ -import { b, concat, Dict, Ident, Ilks, Serials, versify, Version, Versionage } from "./core"; -import { Tholder } from "./tholder"; -import { CesrNumber } from "./number"; -import { Prefixer } from "./prefixer"; -import { Serder } from "./serder"; -import { MtrDex, NonTransDex } from "./matter"; -import { Saider } from "./saider"; -import { Siger } from "./siger"; -import { Cigar } from "./cigar"; -import { Counter, CtrDex } from "./counter"; -import { Seqner } from "./seqner"; -import { TextEncoder } from "util"; - -let MaxIntThold = 2 ** 32 - 1 +import { + b, + concat, + Dict, + Ident, + Ilks, + Serials, + versify, + Version, + Versionage, +} from './core'; +import { Tholder } from './tholder'; +import { CesrNumber } from './number'; +import { Prefixer } from './prefixer'; +import { Serder } from './serder'; +import { MtrDex, NonTransDex } from './matter'; +import { Saider } from './saider'; +import { Siger } from './siger'; +import { Cigar } from './cigar'; +import { Counter, CtrDex } from './counter'; +import { Seqner } from './seqner'; +import { TextEncoder } from 'util'; + +let MaxIntThold = 2 ** 32 - 1; export interface RotateArgs { - pre?: string - keys: Array, - dig?: string, - ilk?: string, - sn?: number, - isith?: number | string | Array, - ndigs?: Array, - nsith?: number | string | Array, - toad?: number, - wits?: Array, - cuts?: Array, - adds?: Array, - cnfg?: Array, - data?: Array, - version?: Version, - kind?: Serials, - size?: number, - intive?: boolean + pre?: string; + keys: Array; + dig?: string; + ilk?: string; + sn?: number; + isith?: number | string | Array; + ndigs?: Array; + nsith?: number | string | Array; + toad?: number; + wits?: Array; + cuts?: Array; + adds?: Array; + cnfg?: Array; + data?: Array; + version?: Version; + kind?: Serials; + size?: number; + intive?: boolean; } export function rotate({ @@ -50,428 +60,520 @@ export function rotate({ data = undefined, version = undefined, kind = undefined, - intive = true }: RotateArgs) { - let vs = versify(Ident.KERI, version, kind, 0) - let _ilk = ilk + intive = true, +}: RotateArgs) { + let vs = versify(Ident.KERI, version, kind, 0); + let _ilk = ilk; if (_ilk != Ilks.rot && _ilk != Ilks.drt) { - throw new Error(`Invalid ilk = ${ilk} for rot or drt.`) + throw new Error(`Invalid ilk = ${ilk} for rot or drt.`); } - let sner = Number(sn) + let sner = Number(sn); if (sner < 1) { - throw new Error(`Invalid sn = 0x${sner.toString()} for rot or drt.`) + throw new Error(`Invalid sn = 0x${sner.toString()} for rot or drt.`); } - let _isit: number + let _isit: number; if (isith == undefined) { - _isit = Math.max(1, Math.ceil(keys.length / 2)) - } - else { - _isit = isith as number + _isit = Math.max(1, Math.ceil(keys.length / 2)); + } else { + _isit = isith as number; } - let tholder = new Tholder({sith: _isit}) + let tholder = new Tholder({ sith: _isit }); if (tholder.num != undefined && tholder.num < 1) { - throw new Error(`Invalid sith = ${tholder.num} less than 1.`) + throw new Error(`Invalid sith = ${tholder.num} less than 1.`); } if (tholder.size > keys.length) { - throw new Error(`Invalid sith = ${tholder.num} for keys = ${keys}`) + throw new Error(`Invalid sith = ${tholder.num} for keys = ${keys}`); } - let _ndigs: Array + let _ndigs: Array; if (ndigs === undefined) { - _ndigs = [] - } - else { - _ndigs = ndigs + _ndigs = []; + } else { + _ndigs = ndigs; } - let _nsith + let _nsith; if (nsith === undefined) { - _nsith = Math.max(1, Math.ceil(_ndigs.length / 2)) - } - else { - _nsith = nsith + _nsith = Math.max(1, Math.ceil(_ndigs.length / 2)); + } else { + _nsith = nsith; } - let ntholder = new Tholder({sith: _nsith}) + let ntholder = new Tholder({ sith: _nsith }); if (ntholder.num != undefined && ntholder.num < 1) { - throw new Error(`Invalid sith = ${ntholder.num} less than 1.`) + throw new Error(`Invalid sith = ${ntholder.num} less than 1.`); } if (ntholder.size > _ndigs.length) { - throw new Error(`Invalid sith = ${ntholder.num} for ndigs = ${ndigs}`) + throw new Error(`Invalid sith = ${ntholder.num} for ndigs = ${ndigs}`); } - let _wits: Array + let _wits: Array; if (wits === undefined) { - _wits = [] - } - else { - _wits = wits + _wits = []; + } else { + _wits = wits; } - let witset = new Set(_wits) + let witset = new Set(_wits); if (witset.size != _wits.length) { - throw new Error(`Invalid wits = ${wits}, has duplicates.`) + throw new Error(`Invalid wits = ${wits}, has duplicates.`); } - let _cuts: Array + let _cuts: Array; if (cuts === undefined) { - _cuts = [] - } - else { - _cuts = cuts + _cuts = []; + } else { + _cuts = cuts; } - let cutset = new Set(_cuts) + let cutset = new Set(_cuts); if (cutset.size != _cuts.length) { - throw new Error(`Invalid cuts = ${cuts}, has duplicates.`) + throw new Error(`Invalid cuts = ${cuts}, has duplicates.`); } - let _adds: Array + let _adds: Array; if (adds === undefined) { - _adds = [] - } - else { - _adds = adds + _adds = []; + } else { + _adds = adds; } - let addset = new Set(_adds) + let addset = new Set(_adds); //non empty intersection of witset and addset - let witaddset = new Set([...witset].filter(x => addset.has(x))) + let witaddset = new Set([...witset].filter((x) => addset.has(x))); if (witaddset.size > 0) { - throw new Error(`Invalid member combination among wits = ${wits}, and adds = ${adds}.`) + throw new Error( + `Invalid member combination among wits = ${wits}, and adds = ${adds}.` + ); } // non empty intersection of cutset and addset - let cutaddset = new Set([...cutset].filter(x => addset.has(x))) + let cutaddset = new Set([...cutset].filter((x) => addset.has(x))); if (cutaddset.size > 0) { - throw new Error(`Invalid member combination among cuts = ${cuts}, and adds = ${adds}.`) + throw new Error( + `Invalid member combination among cuts = ${cuts}, and adds = ${adds}.` + ); } - let newitsetdiff = new Set(_wits) - _cuts.forEach(function(v) {newitsetdiff.delete(v) }) - let newitset = new Set(function*() { yield* newitsetdiff; yield* addset; }()) + let newitsetdiff = new Set(_wits); + _cuts.forEach(function (v) { + newitsetdiff.delete(v); + }); + let newitset = new Set( + (function* () { + yield* newitsetdiff; + yield* addset; + })() + ); - if (newitset.size != (witset.size - cutset.size + addset.size)) { - throw new Error(`Invalid member combination among wits = ${wits}, cuts = ${cuts}, and adds = ${adds}.`) + if (newitset.size != witset.size - cutset.size + addset.size) { + throw new Error( + `Invalid member combination among wits = ${wits}, cuts = ${cuts}, and adds = ${adds}.` + ); } - let _toad: number + let _toad: number; if (toad === undefined) { if (newitset.size == 0) { - _toad = 0 - } - else { - _toad = ample(newitset.size) + _toad = 0; + } else { + _toad = ample(newitset.size); } - } - else { - _toad = toad + } else { + _toad = toad; } if (newitset.size > 0) { if (_toad < 1 || _toad > newitset.size) { - throw new Error(`Invalid toad = ${_toad} for wit = ${wits}`) + throw new Error(`Invalid toad = ${_toad} for wit = ${wits}`); } - } - else { + } else { if (_toad != 0) { - throw new Error(`Invalid toad = ${_toad} for wit = ${wits}`) + throw new Error(`Invalid toad = ${_toad} for wit = ${wits}`); } } let _ked = { v: vs, t: _ilk, - d: "", + d: '', i: pre, s: sner.toString(16), p: dig, - kt: tholder.num && intive && tholder.num !== undefined && tholder.num <= MaxIntThold ? tholder.num.toString(16) : tholder.sith, + kt: + tholder.num && + intive && + tholder.num !== undefined && + tholder.num <= MaxIntThold + ? tholder.num.toString(16) + : tholder.sith, k: keys, - nt: ntholder.num && intive && ntholder.num !== undefined && ntholder.num <= MaxIntThold ? ntholder.num.toString(16) : ntholder.sith, + nt: + ntholder.num && + intive && + ntholder.num !== undefined && + ntholder.num <= MaxIntThold + ? ntholder.num.toString(16) + : ntholder.sith, n: _ndigs, - bt: _toad && intive && _toad !== undefined && _toad <= MaxIntThold ? _toad : _toad.toString(16), + bt: + _toad && intive && _toad !== undefined && _toad <= MaxIntThold + ? _toad + : _toad.toString(16), br: cuts, ba: adds, - a: data!= undefined ? data : [] - } - let[ , ked] = Saider.saidify(_ked) - return new Serder(ked) + a: data != undefined ? data : [], + }; + let [, ked] = Saider.saidify(_ked); + return new Serder(ked); } export function ample(n: number, f?: number, weak = true) { - n = Math.max(0, n) // no negatives - let f1 + n = Math.max(0, n); // no negatives + let f1; if (f == undefined) { - f1 = Math.max(1, Math.floor(Math.max(0, n - 1) / 3)) // least floor f subject to n >= 3*f+1 + f1 = Math.max(1, Math.floor(Math.max(0, n - 1) / 3)); // least floor f subject to n >= 3*f+1 - let f2 = Math.max(1, Math.ceil(Math.max(0, n - 1) / 3)) // most Math.ceil f subject to n >= 3*f+1 - if (weak) { // try both fs to see which one has lowest m - return Math.min(n, Math.ceil((n + f1 + 1) / 2), Math.ceil((n + f2 + 1) / 2)) + let f2 = Math.max(1, Math.ceil(Math.max(0, n - 1) / 3)); // most Math.ceil f subject to n >= 3*f+1 + if (weak) { + // try both fs to see which one has lowest m + return Math.min( + n, + Math.ceil((n + f1 + 1) / 2), + Math.ceil((n + f2 + 1) / 2) + ); } else { - return Math.min(n, Math.max(0, n - f1, Math.ceil((n + f1 + 1) / 2))) + return Math.min( + n, + Math.max(0, n - f1, Math.ceil((n + f1 + 1) / 2)) + ); } } else { - f = Math.max(0, f) - let m1 = Math.ceil((n + f + 1) / 2) - let m2 = Math.max(0, n - f) + f = Math.max(0, f); + let m1 = Math.ceil((n + f + 1) / 2); + let m2 = Math.max(0, n - f); if (m2 < m1 && n > 0) { - throw new Error(`Invalid f=${f} is too big for n=${n}.`) + throw new Error(`Invalid f=${f} is too big for n=${n}.`); } if (weak) { - return Math.min(n, m1, m2) + return Math.min(n, m1, m2); } else { - return Math.min(n, Math.max(m1, m2)) + return Math.min(n, Math.max(m1, m2)); } } } export interface InceptArgs { - keys: Array, - isith?: number | string | Array, - ndigs?: Array, - nsith?: number | string | Array, - toad?: number | string, - wits?: Array, - cnfg?: Array, - data?: Array, - version?: Version, - kind?: Serials, - code?: string, - intive?: boolean - delpre?: string + keys: Array; + isith?: number | string | Array; + ndigs?: Array; + nsith?: number | string | Array; + toad?: number | string; + wits?: Array; + cnfg?: Array; + data?: Array; + version?: Version; + kind?: Serials; + code?: string; + intive?: boolean; + delpre?: string; } -export function incept({ keys, isith, ndigs, nsith, toad, wits, cnfg, data, version = Versionage, kind = Serials.JSON, code, - intive = false, delpre }: InceptArgs) { - - - let vs = versify(Ident.KERI, version, kind, 0) - let ilk = delpre == undefined ? Ilks.icp : Ilks.dip - let sner = new CesrNumber({}, 0) +export function incept({ + keys, + isith, + ndigs, + nsith, + toad, + wits, + cnfg, + data, + version = Versionage, + kind = Serials.JSON, + code, + intive = false, + delpre, +}: InceptArgs) { + let vs = versify(Ident.KERI, version, kind, 0); + let ilk = delpre == undefined ? Ilks.icp : Ilks.dip; + let sner = new CesrNumber({}, 0); if (isith == undefined) { - isith = Math.max(1, Math.ceil(keys.length / 2)) + isith = Math.max(1, Math.ceil(keys.length / 2)); } - let tholder = new Tholder({sith: isith}) + let tholder = new Tholder({ sith: isith }); if (tholder.num != undefined && tholder.num < 1) { - throw new Error(`Invalid sith = ${tholder.num} less than 1.`) + throw new Error(`Invalid sith = ${tholder.num} less than 1.`); } if (tholder.size > keys.length) { - throw new Error(`Invalid sith = ${tholder.num} for keys ${keys}`) + throw new Error(`Invalid sith = ${tholder.num} for keys ${keys}`); } if (ndigs == undefined) { - ndigs = new Array() + ndigs = new Array(); } if (nsith == undefined) { - nsith = Math.max(0, Math.ceil(ndigs.length / 2)) + nsith = Math.max(0, Math.ceil(ndigs.length / 2)); } - let ntholder = new Tholder({sith: nsith}) + let ntholder = new Tholder({ sith: nsith }); if (ntholder.num != undefined && ntholder.num < 0) { - throw new Error(`Invalid nsith = ${ntholder.num} less than 0.`) + throw new Error(`Invalid nsith = ${ntholder.num} less than 0.`); } if (ntholder.size > keys.length) { - throw new Error(`Invalid nsith = ${ntholder.num} for keys ${ndigs}`) + throw new Error(`Invalid nsith = ${ntholder.num} for keys ${ndigs}`); } - wits = wits == undefined ? [] : wits + wits = wits == undefined ? [] : wits; if (new Set(wits).size != wits.length) { - throw new Error(`Invalid wits = ${wits}, has duplicates.`) + throw new Error(`Invalid wits = ${wits}, has duplicates.`); } if (toad == undefined) { if (wits.length == 0) { - toad = 0 + toad = 0; } else { - toad = ample(wits.length) + toad = ample(wits.length); } } - let toader = new CesrNumber({}, toad) + let toader = new CesrNumber({}, toad); if (wits.length > 0) { if (toader.num < 1 || toader.num > wits.length) { - throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`) + throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`); } } else { if (toader.num != 0) { - throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`) + throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`); } } - cnfg = cnfg == undefined ? new Array() : cnfg - data = data == undefined ? new Array() : data + cnfg = cnfg == undefined ? new Array() : cnfg; + data = data == undefined ? new Array() : data; let ked = { v: vs, t: ilk, - d: "", - i: "", + d: '', + i: '', s: sner.numh, - kt: (intive && tholder.num != undefined) ? tholder.num : tholder.sith, + kt: intive && tholder.num != undefined ? tholder.num : tholder.sith, k: keys, - nt: (intive && tholder.num != undefined) ? ntholder.num : ntholder.sith, + nt: intive && tholder.num != undefined ? ntholder.num : ntholder.sith, n: ndigs, bt: intive ? toader.num : toader.numh, b: wits, c: cnfg, - a: data - } as Dict + a: data, + } as Dict; if (delpre != undefined) { - ked["di"] = delpre + ked['di'] = delpre; if (code == undefined) { - code = MtrDex.Blake3_256 + code = MtrDex.Blake3_256; } } - let prefixer + let prefixer; if (delpre == undefined && code == undefined && keys.length == 1) { - prefixer = new Prefixer({ qb64: keys[0] }) + prefixer = new Prefixer({ qb64: keys[0] }); if (prefixer.digestive) { - throw new Error(`Invalid code, digestive=${prefixer.code}, must be derived from ked.`) + throw new Error( + `Invalid code, digestive=${prefixer.code}, must be derived from ked.` + ); } } else { - prefixer = new Prefixer({ code: code }, ked) + prefixer = new Prefixer({ code: code }, ked); if (delpre != undefined) { if (!prefixer.digestive) { - throw new Error(`Invalid derivation code = ${prefixer.code} for delegation. Must be digestive`) + throw new Error( + `Invalid derivation code = ${prefixer.code} for delegation. Must be digestive` + ); } } } - ked["i"] = prefixer.qb64 + ked['i'] = prefixer.qb64; if (prefixer.digestive) { - ked["d"] = prefixer.qb64 - } - else { - [, ked] = Saider.saidify(ked) + ked['d'] = prefixer.qb64; + } else { + [, ked] = Saider.saidify(ked); } - return new Serder(ked) + return new Serder(ked); } - -export function messagize(serder: Serder, sigers?: Array, seal?: any, wigers?: Array, cigars?: Array, - pipelined: boolean = false): Uint8Array { - let msg = new Uint8Array(b(serder.raw)) - let atc = new Uint8Array() +export function messagize( + serder: Serder, + sigers?: Array, + seal?: any, + wigers?: Array, + cigars?: Array, + pipelined: boolean = false +): Uint8Array { + let msg = new Uint8Array(b(serder.raw)); + let atc = new Uint8Array(); if (sigers == undefined && wigers == undefined && cigars == undefined) { - throw new Error(`Missing attached signatures on message = ${serder.ked}.`) + throw new Error( + `Missing attached signatures on message = ${serder.ked}.` + ); } if (sigers != undefined) { if (seal != undefined) { - if (seal[0]=="SealEvent") { - atc = concat(atc, new Counter({ code: CtrDex.TransIdxSigGroups, count: 1 }).qb64b) - atc = concat(atc, seal.i.encode("utf-8")) - atc = concat(atc, new Seqner(seal[1].s).qb64b) - atc = concat(atc, seal.d.encode("utf-8")) - - } else if (seal[0] == "SealLast") { - atc = concat(atc, new Counter({ code: CtrDex.TransLastIdxSigGroups, count: 1 }).qb64b) - atc = concat(atc, new TextEncoder().encode(seal[1].i)) + if (seal[0] == 'SealEvent') { + atc = concat( + atc, + new Counter({ code: CtrDex.TransIdxSigGroups, count: 1 }) + .qb64b + ); + atc = concat(atc, seal.i.encode('utf-8')); + atc = concat(atc, new Seqner(seal[1].s).qb64b); + atc = concat(atc, seal.d.encode('utf-8')); + } else if (seal[0] == 'SealLast') { + atc = concat( + atc, + new Counter({ + code: CtrDex.TransLastIdxSigGroups, + count: 1, + }).qb64b + ); + atc = concat(atc, new TextEncoder().encode(seal[1].i)); } - } - atc = concat(atc, new Counter({ code: CtrDex.ControllerIdxSigs, count: sigers.length }).qb64b) + atc = concat( + atc, + new Counter({ + code: CtrDex.ControllerIdxSigs, + count: sigers.length, + }).qb64b + ); sigers.forEach((siger) => { - atc = concat(atc, siger.qb64b) - }) + atc = concat(atc, siger.qb64b); + }); } if (wigers != undefined) { - atc = concat(atc, new Counter({ code: CtrDex.ControllerIdxSigs, count: wigers.length }).qb64b) + atc = concat( + atc, + new Counter({ + code: CtrDex.ControllerIdxSigs, + count: wigers.length, + }).qb64b + ); wigers.forEach((wiger) => { if (wiger.verfer && !(wiger.verfer.code in NonTransDex)) { - throw new Error(`Attempt to use tranferable prefix=${wiger.verfer.qb64} for receipt.`) + throw new Error( + `Attempt to use tranferable prefix=${wiger.verfer.qb64} for receipt.` + ); } - atc = concat(atc, wiger.qb64b) - }) + atc = concat(atc, wiger.qb64b); + }); } if (cigars != undefined) { - atc = concat(atc, new Counter({ code: CtrDex.ControllerIdxSigs, count: cigars.length }).qb64b) + atc = concat( + atc, + new Counter({ + code: CtrDex.ControllerIdxSigs, + count: cigars.length, + }).qb64b + ); cigars.forEach((cigar) => { if (cigar.verfer && !(cigar.verfer.code in NonTransDex)) { - throw new Error(`Attempt to use tranferable prefix=${cigar.verfer.qb64} for receipt.`) + throw new Error( + `Attempt to use tranferable prefix=${cigar.verfer.qb64} for receipt.` + ); } - atc = concat(atc, cigar.qb64b) - }) + atc = concat(atc, cigar.qb64b); + }); } if (pipelined) { if (atc.length % 4 != 0) { - throw new Error(`Invalid attachments size=${atc.length}, nonintegral quadlets.`) + throw new Error( + `Invalid attachments size=${atc.length}, nonintegral quadlets.` + ); } - msg = concat(msg, new Counter({ code: CtrDex.AttachedMaterialQuadlets, count: (Math.floor(atc.length / 4)) }).qb64b) - } - msg = concat(msg, atc) - return msg + msg = concat( + msg, + new Counter({ + code: CtrDex.AttachedMaterialQuadlets, + count: Math.floor(atc.length / 4), + }).qb64b + ); + } + msg = concat(msg, atc); + return msg; } -interface InteractArgs { - pre: String, - dig: String, - sn: number, - data: Array, - version: Version | undefined, - kind: Serials | undefined +interface InteractArgs { + pre: String; + dig: String; + sn: number; + data: Array; + version: Version | undefined; + kind: Serials | undefined; } export function interact(args: InteractArgs): Serder { - let { pre, dig, sn, data, version, kind } = args - let vs = versify(Ident.KERI, version, kind, 0) - let ilk = Ilks.ixn - let sner = new CesrNumber({}, sn) + let { pre, dig, sn, data, version, kind } = args; + let vs = versify(Ident.KERI, version, kind, 0); + let ilk = Ilks.ixn; + let sner = new CesrNumber({}, sn); if (sner.num < 1) { - throw new Error(`Invalid sn = 0x${sner.numh} for ixn.`) + throw new Error(`Invalid sn = 0x${sner.numh} for ixn.`); } - data = data == undefined ? new Array() : data + data = data == undefined ? new Array() : data; let ked = { v: vs, t: ilk, - d: "", + d: '', i: pre, s: sner.numh, p: dig, - a: data - } as Dict + a: data, + } as Dict; - [, ked] = Saider.saidify(ked) + [, ked] = Saider.saidify(ked); - return new Serder(ked) + return new Serder(ked); } -export function reply(route: string="", data: any|undefined, stamp:string|undefined, version: Version|undefined, kind:Serials= Serials.JSON){ - const vs = versify(Ident.KERI, version, kind, 0) +export function reply( + route: string = '', + data: any | undefined, + stamp: string | undefined, + version: Version | undefined, + kind: Serials = Serials.JSON +) { + const vs = versify(Ident.KERI, version, kind, 0); if (data == undefined) { - data = {} + data = {}; } const _sad = { v: vs, t: Ilks.rpy, - d: "", - dt: stamp?? new Date().toISOString().replace("Z","000+00:00"), + d: '', + dt: stamp ?? new Date().toISOString().replace('Z', '000+00:00'), r: route, - a: data - } - const [, sad] = Saider.saidify(_sad) - const saider = new Saider({qb64: sad['d']}) - - if ( !(saider.verify(sad,true, true, kind, 'd' ))) - throw new Error(`Invalid said = ${saider.qb64} for reply msg=${sad}.`) - return new Serder(sad) + a: data, + }; + const [, sad] = Saider.saidify(_sad); + const saider = new Saider({ qb64: sad['d'] }); + + if (!saider.verify(sad, true, true, kind, 'd')) + throw new Error(`Invalid said = ${saider.qb64} for reply msg=${sad}.`); + return new Serder(sad); } - \ No newline at end of file diff --git a/src/keri/core/httping.ts b/src/keri/core/httping.ts index b0548aea..95f17561 100644 --- a/src/keri/core/httping.ts +++ b/src/keri/core/httping.ts @@ -1,180 +1,209 @@ -import {serializeDictionary, Dictionary, parseDictionary, Item, Parameters} from "structured-headers"; -import {Signer} from "./signer"; -import {b} from "./core"; -import {Cigar} from "./cigar"; -import {nowUTC} from "./utils"; -import {Siger} from "./siger"; -import Base64 from "urlsafe-base64" +import { + serializeDictionary, + Dictionary, + parseDictionary, + Item, + Parameters, +} from 'structured-headers'; +import { Signer } from './signer'; +import { b } from './core'; +import { Cigar } from './cigar'; +import { nowUTC } from './utils'; +import { Siger } from './siger'; +import Base64 from 'urlsafe-base64'; import { Buffer } from 'buffer'; export function normalize(header: string) { - return header.trim() + return header.trim(); } export interface SiginputArgs { - name: string, - method:string, - path:string, - headers: Headers, - fields: Array, - expires?:number, - nonce?: string, - alg?: string, - keyid?: string, - context?: string + name: string; + method: string; + path: string; + headers: Headers; + fields: Array; + expires?: number; + nonce?: string; + alg?: string; + keyid?: string; + context?: string; } -export function siginput(signer: Signer, - {name, method, path, headers, fields, - expires, nonce, alg, keyid, context}: SiginputArgs): [Map, Siger|Cigar] { - - let items = new Array() - let ifields = new Array<[string, Map]>() +export function siginput( + signer: Signer, + { + name, + method, + path, + headers, + fields, + expires, + nonce, + alg, + keyid, + context, + }: SiginputArgs +): [Map, Siger | Cigar] { + let items = new Array(); + let ifields = new Array<[string, Map]>(); fields.forEach((field) => { - if (field.startsWith("@")) { + if (field.startsWith('@')) { switch (field) { - case "@method": - items.push(`"${field}": ${method}`) - ifields.push([field, new Map()]) - break - case "@path": - items.push(`"${field}": ${path}`) - ifields.push([field, new Map()]) - break + case '@method': + items.push(`"${field}": ${method}`); + ifields.push([field, new Map()]); + break; + case '@path': + items.push(`"${field}": ${path}`); + ifields.push([field, new Map()]); + break; } } else { - if (!headers.has(field)) - return + if (!headers.has(field)) return; - ifields.push([field, new Map()]) - let value = normalize(headers.get(field)!) - items.push(`"${field}": ${value}`) + ifields.push([field, new Map()]); + let value = normalize(headers.get(field)!); + items.push(`"${field}": ${value}`); } - }) + }); - let nameParams = new Map() - let now = Math.floor(nowUTC().getTime() / 1000) - nameParams.set("created", now) + let nameParams = new Map(); + let now = Math.floor(nowUTC().getTime() / 1000); + nameParams.set('created', now); - let values = [`(${ifields.map((field) => field[0]).join(" ")})`, `created=${now}`] + let values = [ + `(${ifields.map((field) => field[0]).join(' ')})`, + `created=${now}`, + ]; if (expires != undefined) { - values.push(`expires=${expires}`) - nameParams.set('expires', expires) + values.push(`expires=${expires}`); + nameParams.set('expires', expires); } if (nonce != undefined) { - values.push(`nonce=${nonce}`) - nameParams.set('nonce', nonce) + values.push(`nonce=${nonce}`); + nameParams.set('nonce', nonce); } if (keyid != undefined) { - values.push(`keyid=${keyid}`) - nameParams.set('keyid', keyid) + values.push(`keyid=${keyid}`); + nameParams.set('keyid', keyid); } if (context != undefined) { - values.push(`context=${context}`) - nameParams.set('context', context) + values.push(`context=${context}`); + nameParams.set('context', context); } if (alg != undefined) { - values.push(`alg=${alg}`) - nameParams.set('alg', alg) + values.push(`alg=${alg}`); + nameParams.set('alg', alg); } - let sid = new Map([ - [name, [ifields, nameParams]] - ]) + let sid = new Map([[name, [ifields, nameParams]]]); - let params = values.join(";") - items.push(`"@signature-params: ${params}"`) + let params = values.join(';'); + items.push(`"@signature-params: ${params}"`); - let ser = items.join("\n") - let sig = signer.sign(b(ser)) + let ser = items.join('\n'); + let sig = signer.sign(b(ser)); - return [new Map([['Signature-Input', `${serializeDictionary(sid as Dictionary)}`]]), sig] + return [ + new Map([ + ['Signature-Input', `${serializeDictionary(sid as Dictionary)}`], + ]), + sig, + ]; } export class Unqualified { - private readonly _raw: Uint8Array + private readonly _raw: Uint8Array; constructor(raw: Uint8Array) { - this._raw = raw + this._raw = raw; } get qb64(): string { - return Base64.encode(Buffer.from(this._raw)) + return Base64.encode(Buffer.from(this._raw)); } get qb64b(): Uint8Array { - return b(this.qb64) + return b(this.qb64); } } export class Inputage { - public name: any - public fields: any - public created: any - public expires: any - public nonce: any - public alg: any - public keyid: any - public context: any + public name: any; + public fields: any; + public created: any; + public expires: any; + public nonce: any; + public alg: any; + public keyid: any; + public context: any; } export function desiginput(value: string): Array { - let sid = parseDictionary(value) - let siginputs = new Array() + let sid = parseDictionary(value); + let siginputs = new Array(); sid.forEach((value, key) => { - let siginput = new Inputage() - siginput.name = key - let list: Item[] - let params - [list, params] = value as [Item[], Parameters] - siginput.fields = list.map((item) => item[0]) - - if (!params.has("created")) { - throw new Error("missing required `created` field from signature input") + let siginput = new Inputage(); + siginput.name = key; + let list: Item[]; + let params; + [list, params] = value as [Item[], Parameters]; + siginput.fields = list.map((item) => item[0]); + + if (!params.has('created')) { + throw new Error( + 'missing required `created` field from signature input' + ); } - siginput.created = params.get("created") - - if (params.has("expires")) { - siginput.expires = params.get("expires") + siginput.created = params.get('created'); + + if (params.has('expires')) { + siginput.expires = params.get('expires'); } - - if (params.has("nonce")) { - siginput.nonce = params.get("nonce") + + if (params.has('nonce')) { + siginput.nonce = params.get('nonce'); } - - if (params.has("alg")) { - siginput.alg = params.get("alg") + + if (params.has('alg')) { + siginput.alg = params.get('alg'); } - - if (params.has("keyid")) { - siginput.keyid = params.get("keyid") + + if (params.has('keyid')) { + siginput.keyid = params.get('keyid'); } - - if (params.has("context")) { - siginput.context = params.get("context") + + if (params.has('context')) { + siginput.context = params.get('context'); } - - siginputs.push(siginput) - }) - return siginputs + siginputs.push(siginput); + }); + return siginputs; } -/** Parse start, end and total from HTTP Content-Range header value +/** Parse start, end and total from HTTP Content-Range header value * @param {string|null} header - HTTP Range header value * @param {string} typ - type of range, e.g. "aids" * @returns {start: number, end: number, total: number} - object with start, end and total properties -*/ -export function parseRangeHeaders(header: string|null, typ: string): {start: number, end: number, total: number} { + */ +export function parseRangeHeaders( + header: string | null, + typ: string +): { start: number; end: number; total: number } { if (header !== null) { - let data = header.replace(`${typ} `, "") - let values = data.split("/") - let rng = values[0].split("-") - - return {start: parseInt(rng[0]), end: parseInt(rng[1]), total: parseInt(values[1])} + let data = header.replace(`${typ} `, ''); + let values = data.split('/'); + let rng = values[0].split('-'); + + return { + start: parseInt(rng[0]), + end: parseInt(rng[1]), + total: parseInt(values[1]), + }; } else { - return {start: 0, end: 0, total: 0} + return { start: 0, end: 0, total: 0 }; } - -} \ No newline at end of file +} diff --git a/src/keri/core/indexer.ts b/src/keri/core/indexer.ts index fb0cc62b..9806b401 100644 --- a/src/keri/core/indexer.ts +++ b/src/keri/core/indexer.ts @@ -1,9 +1,10 @@ -import {EmptyMaterialError} from "./kering"; -import {b, b64ToInt, d, intToB64, readInt} from "./core"; -import Base64 from "urlsafe-base64" +import { EmptyMaterialError } from './kering'; +import { b, b64ToInt, d, intToB64, readInt } from './core'; +import Base64 from 'urlsafe-base64'; import { Buffer } from 'buffer'; export class IndexerCodex { +<<<<<<< HEAD Ed25519_Sig: string = 'A' // Ed25519 sig appears same in both lists if any. Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only. ECDSA_256k1_Sig: string = 'C' // ECDSA secp256k1 sig appears same in both lists if any. @@ -21,11 +22,26 @@ export class IndexerCodex { Ed448_Big_Sig: string = '3A' // Ed448 signature appears in both lists. Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only. +======= + Ed25519_Sig: string = 'A'; // Ed25519 sig appears same in both lists if any. + Ed25519_Crt_Sig: string = 'B'; // Ed25519 sig appears in current list only. + ECDSA_256k1_Sig: string = 'C'; // ECDSA secp256k1 sig appears same in both lists if any. + ECDSA_256k1_Crt_Sig: string = 'D'; // ECDSA secp256k1 sig appears in current list. + Ed448_Sig: string = '0A'; // Ed448 signature appears in both lists. + Ed448_Crt_Sig: string = '0B'; // Ed448 signature appears in current list only. + Ed25519_Big_Sig: string = '2A'; // Ed25519 sig appears in both lists. + Ed25519_Big_Crt_Sig: string = '2B'; // Ed25519 sig appears in current list only. + ECDSA_256k1_Big_Sig: string = '2C'; // ECDSA secp256k1 sig appears in both lists. + ECDSA_256k1_Big_Crt_Sig: string = '2D'; // ECDSA secp256k1 sig appears in current list only. + Ed448_Big_Sig: string = '3A'; // Ed448 signature appears in both lists. + Ed448_Big_Crt_Sig: string = '3B'; // Ed448 signature appears in current list only. +>>>>>>> e42f976 (adds prettier) } -export const IdrDex = new IndexerCodex() +export const IdrDex = new IndexerCodex(); export class IndexedSigCodex { +<<<<<<< HEAD Ed25519_Sig: string = 'A' // Ed25519 sig appears same in both lists if any. Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only. ECDSA_256k1_Sig: string = 'C' // ECDSA secp256k1 sig appears same in both lists if any. @@ -42,16 +58,31 @@ export class IndexedSigCodex { ECDSA_256r1_Big_Crt_Sig: string = "2F" // ECDSA secp256r1 sig appears in current list only. Ed448_Big_Sig: string = '3A' // Ed448 signature appears in both lists. Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only. +======= + Ed25519_Sig: string = 'A'; // Ed25519 sig appears same in both lists if any. + Ed25519_Crt_Sig: string = 'B'; // Ed25519 sig appears in current list only. + ECDSA_256k1_Sig: string = 'C'; // ECDSA secp256k1 sig appears same in both lists if any. + ECDSA_256k1_Crt_Sig: string = 'D'; // ECDSA secp256k1 sig appears in current list. + Ed448_Sig: string = '0A'; // Ed448 signature appears in both lists. + Ed448_Crt_Sig: string = '0B'; // Ed448 signature appears in current list only. + Ed25519_Big_Sig: string = '2A'; // Ed25519 sig appears in both lists. + Ed25519_Big_Crt_Sig: string = '2B'; // Ed25519 sig appears in current list only. + ECDSA_256k1_Big_Sig: string = '2C'; // ECDSA secp256k1 sig appears in both lists. + ECDSA_256k1_Big_Crt_Sig: string = '2D'; // ECDSA secp256k1 sig appears in current list only. + Ed448_Big_Sig: string = '3A'; // Ed448 signature appears in both lists. + Ed448_Big_Crt_Sig: string = '3B'; // Ed448 signature appears in current list only. +>>>>>>> e42f976 (adds prettier) has(prop: string): boolean { - let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])) - return m.has(prop) + let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + return m.has(prop); } } -export const IdxSigDex = new IndexedSigCodex() +export const IdxSigDex = new IndexedSigCodex(); export class IndexedCurrentSigCodex { +<<<<<<< HEAD Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only. ECDSA_256k1_Crt_Sig: string = 'D' // ECDSA secp256k1 sig appears in current list only. ECDSA_256r1_Crt_Sig: string = "F" // ECDSA secp256r1 sig appears in current list. @@ -60,68 +91,129 @@ export class IndexedCurrentSigCodex { ECDSA_256k1_Big_Crt_Sig: string = '2D' // ECDSA secp256k1 sig appears in current list only. ECDSA_256r1_Big_Crt_Sig: string = "2F" // ECDSA secp256r1 sig appears in current list only. Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only. +======= + Ed25519_Crt_Sig: string = 'B'; // Ed25519 sig appears in current list only. + ECDSA_256k1_Crt_Sig: string = 'D'; // ECDSA secp256k1 sig appears in current list only. + Ed448_Crt_Sig: string = '0B'; // Ed448 signature appears in current list only. + Ed25519_Big_Crt_Sig: string = '2B'; // Ed25519 sig appears in current list only. + ECDSA_256k1_Big_Crt_Sig: string = '2D'; // ECDSA secp256k1 sig appears in current list only. + Ed448_Big_Crt_Sig: string = '3B'; // Ed448 signature appears in current list only. +>>>>>>> e42f976 (adds prettier) has(prop: string): boolean { - let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])) - return m.has(prop) + let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + return m.has(prop); } } -export const IdxCrtSigDex = new IndexedCurrentSigCodex() +export const IdxCrtSigDex = new IndexedCurrentSigCodex(); export class IndexedBothSigCodex { - Ed25519_Sig: string = 'A' // Ed25519 sig appears same in both lists if any. - ECDSA_256k1_Sig: string = 'C' // ECDSA secp256k1 sig appears same in both lists if any. - Ed448_Sig: string = '0A' // Ed448 signature appears in both lists. - Ed25519_Big_Sig: string = '2A' // Ed25519 sig appears in both listsy. - ECDSA_256k1_Big_Sig: string = '2C' // ECDSA secp256k1 sig appears in both lists. - Ed448_Big_Sig: string = '3A' // Ed448 signature appears in both lists. + Ed25519_Sig: string = 'A'; // Ed25519 sig appears same in both lists if any. + ECDSA_256k1_Sig: string = 'C'; // ECDSA secp256k1 sig appears same in both lists if any. + Ed448_Sig: string = '0A'; // Ed448 signature appears in both lists. + Ed25519_Big_Sig: string = '2A'; // Ed25519 sig appears in both listsy. + ECDSA_256k1_Big_Sig: string = '2C'; // ECDSA secp256k1 sig appears in both lists. + Ed448_Big_Sig: string = '3A'; // Ed448 signature appears in both lists. has(prop: string): boolean { - let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])) - return m.has(prop) + let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + return m.has(prop); } } -export const IdxBthSigDex = new IndexedBothSigCodex() +export const IdxBthSigDex = new IndexedBothSigCodex(); export class Xizage { - public hs: number - public ss: number - public os: number - public fs?: number - public ls: number - - constructor(hs:number, ss: number, os: number, fs?: number, ls?: number) { - this.hs = hs - this.ss = ss - this.os = os - this.fs = fs - this.ls = ls! + public hs: number; + public ss: number; + public os: number; + public fs?: number; + public ls: number; + + constructor(hs: number, ss: number, os: number, fs?: number, ls?: number) { + this.hs = hs; + this.ss = ss; + this.os = os; + this.fs = fs; + this.ls = ls!; } } export interface IndexerArgs { - raw?: Uint8Array | undefined, - code?: string | undefined - index?: number, - ondex?: number, - qb64b?: Uint8Array | undefined, - qb64?: string | undefined, - qb2?: Uint8Array | undefined, + raw?: Uint8Array | undefined; + code?: string | undefined; + index?: number; + ondex?: number; + qb64b?: Uint8Array | undefined; + qb64?: string | undefined; + qb2?: Uint8Array | undefined; } export class Indexer { - public Codex = IdrDex - - static Hards = new Map([['A', 1], ['B', 1], ['C', 1], ['D', 1], ['E', 1], ['F', 1], ['G', 1], ['H', 1], - ['I', 1], ['J', 1], ['K', 1], ['L', 1], ['M', 1], ['N', 1], ['O', 1], ['P', 1], ['Q', 1], ['R', 1], ['S', 1], - ['T', 1], ['U', 1], ['V', 1], ['W', 1], ['X', 1], ['Y', 1], ['Z', 1], ['a', 1], ['b', 1], ['c', 1], ['d', 1], - ['e', 1], ['f', 1], ['g', 1], ['h', 1], ['i', 1], ['j', 1], ['k', 1], ['l', 1], ['m', 1], ['n', 1], ['o', 1], - ['p', 1], ['q', 1], ['r', 1], ['s', 1], ['t', 1], ['u', 1], ['v', 1], ['w', 1], ['x', 1], ['y', 1], ['z', 1], - ['0', 2], ['1', 2], ['2', 2], ['3', 2], ['4', 2]] - ) - + public Codex = IdrDex; + + static Hards = new Map([ + ['A', 1], + ['B', 1], + ['C', 1], + ['D', 1], + ['E', 1], + ['F', 1], + ['G', 1], + ['H', 1], + ['I', 1], + ['J', 1], + ['K', 1], + ['L', 1], + ['M', 1], + ['N', 1], + ['O', 1], + ['P', 1], + ['Q', 1], + ['R', 1], + ['S', 1], + ['T', 1], + ['U', 1], + ['V', 1], + ['W', 1], + ['X', 1], + ['Y', 1], + ['Z', 1], + ['a', 1], + ['b', 1], + ['c', 1], + ['d', 1], + ['e', 1], + ['f', 1], + ['g', 1], + ['h', 1], + ['i', 1], + ['j', 1], + ['k', 1], + ['l', 1], + ['m', 1], + ['n', 1], + ['o', 1], + ['p', 1], + ['q', 1], + ['r', 1], + ['s', 1], + ['t', 1], + ['u', 1], + ['v', 1], + ['w', 1], + ['x', 1], + ['y', 1], + ['z', 1], + ['0', 2], + ['1', 2], + ['2', 2], + ['3', 2], + ['4', 2], + ]); + +<<<<<<< HEAD static Sizes = new Map(Object.entries({ 'A': new Xizage(1, 1, 0, 88, 0), 'B': new Xizage(1, 1, 0, 88, 0), @@ -138,62 +230,92 @@ export class Indexer { '2D': new Xizage(2, 4, 2, 92, 0), '2E': new Xizage(2, 4, 2, 92, 0), '2F': new Xizage(2, 4, 2, 92, 0), - - '3A': new Xizage(2, 6, 3, 160, 0), - '3B': new Xizage(2, 6, 3, 160, 0), - - '0z': new Xizage(2, 2, 0, undefined, 0), - '1z': new Xizage(2, 2, 1, 76, 1), - '4z': new Xizage(2, 6, 3, 80, 1), - })) - - private _code: string = ""; +======= + static Sizes = new Map( + Object.entries({ + A: new Xizage(1, 1, 0, 88, 0), + B: new Xizage(1, 1, 0, 88, 0), + C: new Xizage(1, 1, 0, 88, 0), + D: new Xizage(1, 1, 0, 88, 0), + '0A': new Xizage(2, 2, 1, 156, 0), + '0B': new Xizage(2, 2, 1, 156, 0), + + '2A': new Xizage(2, 4, 2, 92, 0), + '2B': new Xizage(2, 4, 2, 92, 0), + '2C': new Xizage(2, 4, 2, 92, 0), + '2D': new Xizage(2, 4, 2, 92, 0), +>>>>>>> e42f976 (adds prettier) + + '3A': new Xizage(2, 6, 3, 160, 0), + '3B': new Xizage(2, 6, 3, 160, 0), + + '0z': new Xizage(2, 2, 0, undefined, 0), + '1z': new Xizage(2, 2, 1, 76, 1), + '4z': new Xizage(2, 6, 3, 80, 1), + }) + ); + + private _code: string = ''; private _index: number = -1; private _ondex: number | undefined; private _raw: Uint8Array = new Uint8Array(0); - constructor({raw = undefined, code = IdrDex.Ed25519_Sig, index = 0, ondex = undefined, - qb64b = undefined, qb64 = undefined, qb2 = undefined}: IndexerArgs) { - + constructor({ + raw = undefined, + code = IdrDex.Ed25519_Sig, + index = 0, + ondex = undefined, + qb64b = undefined, + qb64 = undefined, + qb2 = undefined, + }: IndexerArgs) { if (raw != undefined) { if (code == undefined) { - throw new EmptyMaterialError(`Improper initialization need either (raw and code) or qb64b or qb64 or qb2.`) + throw new EmptyMaterialError( + `Improper initialization need either (raw and code) or qb64b or qb64 or qb2.` + ); } if (!Indexer.Sizes.has(code)) { - throw new Error(`Unsupported code=${code}.`) + throw new Error(`Unsupported code=${code}.`); } - let xizage = Indexer.Sizes.get(code)! - let os = xizage.os - let fs = xizage.fs - let cs = xizage.hs + xizage.ss - let ms = xizage.ss - xizage.os + let xizage = Indexer.Sizes.get(code)!; + let os = xizage.os; + let fs = xizage.fs; + let cs = xizage.hs + xizage.ss; + let ms = xizage.ss - xizage.os; - if (!Number.isInteger(index) || index < 0 || index > (64 ** ms - 1)) { - throw new Error(`Invalid index=${index} for code=${code}.`) + if (!Number.isInteger(index) || index < 0 || index > 64 ** ms - 1) { + throw new Error(`Invalid index=${index} for code=${code}.`); } - if (ondex != undefined && xizage.os != 0 && !(ondex >= 0 && ondex <= (64 ** os - 1))) { - throw new Error(`Invalid ondex=${ondex} for code=${code}.`) + if ( + ondex != undefined && + xizage.os != 0 && + !(ondex >= 0 && ondex <= 64 ** os - 1) + ) { + throw new Error(`Invalid ondex=${ondex} for code=${code}.`); } if (IdxCrtSigDex.has(code) && ondex != undefined) { - throw new Error(`Non None ondex=${ondex} for code=${code}.`) + throw new Error(`Non None ondex=${ondex} for code=${code}.`); } if (IdxBthSigDex.has(code)) { if (ondex == undefined) { - ondex = index + ondex = index; } else { if (ondex != index && os == 0) { - throw new Error(`Non matching ondex=${ondex} and index=${index} for code=${code}.`) + throw new Error( + `Non matching ondex=${ondex} and index=${index} for code=${code}.` + ); } } } if (fs == undefined) { - throw new Error("variable length unsupported") + throw new Error('variable length unsupported'); } // TODO: Don't support this code // if not fs: # compute fs from index @@ -204,75 +326,76 @@ export class Indexer { // raise InvalidCodeSizeError(f"Non-zero other index size for " // f"variable length material. os={os}.") // fs = (index * 4) + cs - let rawsize = Math.floor((fs - cs) * 3 / 4) - raw = raw.slice(0, rawsize) + let rawsize = Math.floor(((fs - cs) * 3) / 4); + raw = raw.slice(0, rawsize); if (raw.length != rawsize) { - throw new Error(`Not enougth raw bytes for code=${code} and index=${index} ,expected ${rawsize} got ${raw.length}.`) + throw new Error( + `Not enougth raw bytes for code=${code} and index=${index} ,expected ${rawsize} got ${raw.length}.` + ); } - this._code = code - this._index = index - this._ondex = ondex - this._raw = raw - + this._code = code; + this._index = index; + this._ondex = ondex; + this._raw = raw; } else if (qb64b != undefined) { - let qb64 = d(qb64b) - this._exfil(qb64) - + let qb64 = d(qb64b); + this._exfil(qb64); } else if (qb64 != undefined) { - this._exfil(qb64) + this._exfil(qb64); } else if (qb2 != undefined) { - this._bexfil(qb2) + this._bexfil(qb2); } else { - throw new EmptyMaterialError(`Improper initialization need either (raw and code and index) or qb64b or qb64 or qb2.`) + throw new EmptyMaterialError( + `Improper initialization need either (raw and code and index) or qb64b or qb64 or qb2.` + ); } } private _bexfil(qb2: Uint8Array) { - throw new Error(`qb2 not yet supported: ${qb2}`) + throw new Error(`qb2 not yet supported: ${qb2}`); } public static _rawSize(code: string) { - let xizage = Indexer.Sizes.get(code)! - return Math.floor(xizage.fs! - (xizage.hs + xizage.ss) * 3 / 4) + let xizage = Indexer.Sizes.get(code)!; + return Math.floor(xizage.fs! - ((xizage.hs + xizage.ss) * 3) / 4); } get code(): string { - return this._code + return this._code; } get raw(): Uint8Array { - return this._raw + return this._raw; } get index(): number { - return this._index + return this._index; } get ondex(): number | undefined { - return this._ondex + return this._ondex; } - get qb64(): string{ + get qb64(): string { return this._infil(); } get qb64b() { - return b(this.qb64) + return b(this.qb64); } - private _infil(): string { - let code = this.code - let index = this.index - let ondex = this.ondex - let raw = this.raw + let code = this.code; + let index = this.index; + let ondex = this.ondex; + let raw = this.raw; - let ps = (3 - (raw.length % 3)) % 3 - let xizage = Indexer.Sizes.get(code)! - let cs = xizage.hs + xizage.ss - let ms = xizage.ss - xizage.os + let ps = (3 - (raw.length % 3)) % 3; + let xizage = Indexer.Sizes.get(code)!; + let cs = xizage.hs + xizage.ss; + let ms = xizage.ss - xizage.os; // TODO: don't support this code // if not fs: # compute fs from index @@ -284,22 +407,35 @@ export class Indexer { // f"variable length material. os={os}.") // fs = (index * 4) + cs - if (index < 0 || index > (64 ** ms -1)) { - throw new Error(`Invalid index=${index} for code=${code}.`) + if (index < 0 || index > 64 ** ms - 1) { + throw new Error(`Invalid index=${index} for code=${code}.`); } - if (ondex != undefined && xizage.os != 0 && !(ondex >= 0 && ondex <= (64 ** xizage.os - 1))) { - throw new Error(`Invalid ondex=${ondex} for os=${xizage.os} and code=${code}.`) + if ( + ondex != undefined && + xizage.os != 0 && + !(ondex >= 0 && ondex <= 64 ** xizage.os - 1) + ) { + throw new Error( + `Invalid ondex=${ondex} for os=${xizage.os} and code=${code}.` + ); } - let both = `${code}${intToB64(index, ms)}${intToB64(ondex == undefined ? 0 : ondex, xizage.os)}` + let both = `${code}${intToB64(index, ms)}${intToB64( + ondex == undefined ? 0 : ondex, + xizage.os + )}`; if (both.length != cs) { - throw new Error(`Mismatch code size = ${cs} with table = ${both.length}.`) + throw new Error( + `Mismatch code size = ${cs} with table = ${both.length}.` + ); } - if ((cs % 4) != ps - xizage.ls) { - throw new Error(`Invalid code=${both} for converted raw pad size=${ps}.`) + if (cs % 4 != ps - xizage.ls) { + throw new Error( + `Invalid code=${both} for converted raw pad size=${ps}.` + ); } let bytes = new Uint8Array(ps + raw.length); @@ -307,64 +443,65 @@ export class Indexer { bytes[i] = 0; } for (let i = 0; i < raw.length; i++) { - let odx = i + ps + let odx = i + ps; bytes[odx] = raw[i]; } - let full = both + Base64.encode(Buffer.from(bytes)).slice(ps - xizage.ls) + let full = + both + Base64.encode(Buffer.from(bytes)).slice(ps - xizage.ls); if (full.length != xizage.fs) { - throw new Error(`Invalid code=${both} for raw size=${raw.length}.`) + throw new Error(`Invalid code=${both} for raw size=${raw.length}.`); } - return full + return full; } _exfil(qb64: string) { if (qb64.length == 0) { - throw new Error("Empty Material") + throw new Error('Empty Material'); } let first = qb64[0]; if (!Array.from(Indexer.Hards.keys()).includes(first)) { - throw new Error(`Unexpected code ${first}`) + throw new Error(`Unexpected code ${first}`); } - let hs = Indexer.Hards.get(first)! - if ((qb64.length) < hs) { - throw new Error(`Need ${hs - qb64.length} more characters.`) + let hs = Indexer.Hards.get(first)!; + if (qb64.length < hs) { + throw new Error(`Need ${hs - qb64.length} more characters.`); } - let hard = qb64.slice(0, hs) + let hard = qb64.slice(0, hs); if (!Array.from(Indexer.Sizes.keys()).includes(hard)) { - throw new Error(`Unsupported code ${hard}`) + throw new Error(`Unsupported code ${hard}`); } - let xizage = Indexer.Sizes.get(hard)! - let cs = xizage.hs + xizage.ss // both hard + soft code size - let ms = xizage.ss - xizage.os + let xizage = Indexer.Sizes.get(hard)!; + let cs = xizage.hs + xizage.ss; // both hard + soft code size + let ms = xizage.ss - xizage.os; if (qb64.length < cs) { - throw new Error(`Need ${cs - qb64.length} more characters.`) + throw new Error(`Need ${cs - qb64.length} more characters.`); } - let sindex = qb64.slice(hs, hs+ms) - let index = b64ToInt(sindex) + let sindex = qb64.slice(hs, hs + ms); + let index = b64ToInt(sindex); - let sondex = qb64.slice(hs+ms, hs+ms+xizage.os) - let ondex + let sondex = qb64.slice(hs + ms, hs + ms + xizage.os); + let ondex; if (IdxCrtSigDex.has(hard)) { - ondex = xizage.os != 0 ? b64ToInt(sondex) : undefined + ondex = xizage.os != 0 ? b64ToInt(sondex) : undefined; if (ondex != 0 && ondex != undefined) { - throw new Error(`Invalid ondex=${ondex} for code=${hard}.`) + throw new Error(`Invalid ondex=${ondex} for code=${hard}.`); } else { - ondex = undefined + ondex = undefined; } } else { - ondex = xizage.os != 0 ? b64ToInt(sondex) : index + ondex = xizage.os != 0 ? b64ToInt(sondex) : index; } if (xizage.fs == undefined) { - throw new Error("variable length not supported") + throw new Error('variable length not supported'); } // TODO: support variable length // if not fs: # compute fs from index which means variable length @@ -377,45 +514,45 @@ export class Indexer { // fs = (index * 4) + cs if (qb64.length < xizage.fs) { - throw new Error(`Need ${xizage.fs - qb64.length} more chars.`) + throw new Error(`Need ${xizage.fs - qb64.length} more chars.`); } - qb64 = qb64.slice(0, xizage.fs) - let ps = cs % 4 - let pbs = 2 * ps != 0 ? ps : xizage.ls - let raw + qb64 = qb64.slice(0, xizage.fs); + let ps = cs % 4; + let pbs = 2 * ps != 0 ? ps : xizage.ls; + let raw; if (ps != 0) { let base = new Array(ps + 1).join('A') + qb64.slice(cs); - let paw = Base64.decode(base) // decode base to leave prepadded raw - let pi = (readInt(paw.slice(0, ps))) // prepad as int - if (pi & (2 ** pbs - 1)) { // masked pad bits non-zero - throw new Error(`Non zeroed prepad bits = {pi & (2 ** pbs - 1 ):<06b} in {qb64b[cs:cs+1]}.`) + let paw = Base64.decode(base); // decode base to leave prepadded raw + let pi = readInt(paw.slice(0, ps)); // prepad as int + if (pi & (2 ** pbs - 1)) { + // masked pad bits non-zero + throw new Error( + `Non zeroed prepad bits = {pi & (2 ** pbs - 1 ):<06b} in {qb64b[cs:cs+1]}.` + ); } - raw = paw.slice(ps) // strip off ps prepad paw bytes + raw = paw.slice(ps); // strip off ps prepad paw bytes } else { let base = qb64.slice(cs); let paw = Base64.decode(base); - let li = readInt(paw.slice(0, xizage!.ls)) + let li = readInt(paw.slice(0, xizage!.ls)); if (li != 0) { if (li == 1) { - throw new Error(`Non zeroed lead byte = 0x{li:02x}.`) + throw new Error(`Non zeroed lead byte = 0x{li:02x}.`); } else { - throw new Error(`Non zeroed lead bytes = 0x{li:04x}`) + throw new Error(`Non zeroed lead bytes = 0x{li:04x}`); } } - raw = paw.slice(xizage!.ls) + raw = paw.slice(xizage!.ls); } - if (raw.length != Math.floor((qb64.length - cs) * 3 / 4)) { - throw new Error(`Improperly qualified material = ${qb64}`) + if (raw.length != Math.floor(((qb64.length - cs) * 3) / 4)) { + throw new Error(`Improperly qualified material = ${qb64}`); } - this._code = hard - this._index = index - this._ondex = ondex - this._raw = new Uint8Array(raw) // must be bytes for crpto opts and immutable not bytearray + this._code = hard; + this._index = index; + this._ondex = ondex; + this._raw = new Uint8Array(raw); // must be bytes for crpto opts and immutable not bytearray } } - - - diff --git a/src/keri/core/keeping.ts b/src/keri/core/keeping.ts index e51192a3..99d48660 100644 --- a/src/keri/core/keeping.ts +++ b/src/keri/core/keeping.ts @@ -1,10 +1,10 @@ -import { Salter } from './salter' +import { Salter } from './salter'; import { Algos, SaltyCreator, RandyCreator } from './manager'; import { MtrDex } from './matter'; import { Tier } from './salter'; -import { Encrypter } from "../core/encrypter"; +import { Encrypter } from '../core/encrypter'; import { Decrypter } from './decrypter'; -import { b } from "./core"; +import { b } from './core'; import { Cipher } from './cipher'; import { Diger } from './diger'; import { Prefixer } from './prefixer'; @@ -22,6 +22,7 @@ export interface ExternalModule { } export class KeyManager { +<<<<<<< HEAD private salter?: Salter private modules?: any @@ -32,15 +33,52 @@ export class KeyManager { externalModules.forEach((mod) => { this.modules[mod.type] = mod.module }) +======= + private salter?: Salter; + // private externalModulees?: any + + constructor(salter: Salter, _externalModules: any = undefined) { + this.salter = salter; + // this.externalModulees = _externalModules +>>>>>>> e42f976 (adds prettier) } - new(algo: Algos, pidx: number, kargs: any){ + new(algo: Algos, pidx: number, kargs: any) { switch (algo) { case Algos.salty: - return new SaltyKeeper(this.salter!, pidx, kargs["kidx"], kargs["tier"], kargs["transferable"], kargs["stem"], kargs["code"], kargs["count"], kargs["icodes"], kargs["ncode"], kargs["ncount"], kargs["ncodes"], kargs["dcode"], kargs["bran"], kargs["sxlt"]) + return new SaltyKeeper( + this.salter!, + pidx, + kargs['kidx'], + kargs['tier'], + kargs['transferable'], + kargs['stem'], + kargs['code'], + kargs['count'], + kargs['icodes'], + kargs['ncode'], + kargs['ncount'], + kargs['ncodes'], + kargs['dcode'], + kargs['bran'], + kargs['sxlt'] + ); case Algos.randy: - return new RandyKeeper(this.salter!, kargs["code"], kargs["count"], kargs["icodes"], kargs["transferable"], kargs["ncode"], kargs["ncount"], kargs["ncodes"], kargs["dcode"], kargs["prxs"], kargs["nxts"]) + return new RandyKeeper( + this.salter!, + kargs['code'], + kargs['count'], + kargs['icodes'], + kargs['transferable'], + kargs['ncode'], + kargs['ncount'], + kargs['ncodes'], + kargs['dcode'], + kargs['prxs'], + kargs['nxts'] + ); case Algos.group: +<<<<<<< HEAD return new GroupKeeper(this, kargs["mhab"], kargs["states"], kargs["rstates"],kargs["keys"],kargs["ndigs"]) case Algos.extern: let typ = kargs.extern_type @@ -50,20 +88,59 @@ export class KeyManager { } else { throw new Error(`unsupported external module type ${typ}`) } +======= + return new GroupKeeper( + this, + kargs['mhab'], + kargs['states'], + kargs['rstates'], + kargs['keys'], + kargs['ndigs'] + ); +>>>>>>> e42f976 (adds prettier) default: - throw new Error('Unknown algo') + throw new Error('Unknown algo'); } } - get(aid:any) { - let pre = new Prefixer({qb64: aid["prefix"]}) - if (Algos.salty in aid){ - let kargs = aid[Algos.salty] - return new SaltyKeeper(this.salter!, kargs["pidx"], kargs["kidx"], kargs["tier"], kargs["transferable"], kargs["stem"], kargs["code"], kargs["count"], kargs["icodes"], kargs["ncode"], kargs["ncount"], kargs["ncodes"], kargs["dcode"], kargs["bran"], kargs["sxlt"]) + get(aid: any) { + let pre = new Prefixer({ qb64: aid['prefix'] }); + if (Algos.salty in aid) { + let kargs = aid[Algos.salty]; + return new SaltyKeeper( + this.salter!, + kargs['pidx'], + kargs['kidx'], + kargs['tier'], + kargs['transferable'], + kargs['stem'], + kargs['code'], + kargs['count'], + kargs['icodes'], + kargs['ncode'], + kargs['ncount'], + kargs['ncodes'], + kargs['dcode'], + kargs['bran'], + kargs['sxlt'] + ); } else if (Algos.randy in aid) { - let kargs = aid[Algos.randy] - return new RandyKeeper(this.salter!, kargs["code"], kargs["count"], kargs["icodes"], pre.transferable, kargs["ncode"], kargs["ncount"], kargs["ncodes"], kargs["dcode"], kargs["prxs"], kargs["nxts"]) + let kargs = aid[Algos.randy]; + return new RandyKeeper( + this.salter!, + kargs['code'], + kargs['count'], + kargs['icodes'], + pre.transferable, + kargs['ncode'], + kargs['ncount'], + kargs['ncodes'], + kargs['dcode'], + kargs['prxs'], + kargs['nxts'] + ); } else if (Algos.group in aid) { +<<<<<<< HEAD let kargs = aid[Algos.group] return new GroupKeeper(this, kargs["mhab"], kargs["states"], kargs["rstates"],kargs["keys"],kargs["ndigs"]) } else if (Algos.extern in aid) { @@ -77,75 +154,116 @@ export class KeyManager { } } else { throw new Error(`Algo not allowed yet`) +======= + let kargs = aid[Algos.group]; + return new GroupKeeper( + this, + kargs['mhab'], + kargs['states'], + kargs['rstates'], + kargs['keys'], + kargs['ndigs'] + ); + } else { + throw new Error(`Algo not allowed yet`); +>>>>>>> e42f976 (adds prettier) } } - } export class SaltyKeeper { - private aeid:string - private encrypter:Encrypter - private decrypter:Decrypter - private salter: Salter - private pidx:number - private kidx:number - private tier:Tier - private transferable:boolean - private stem:string | undefined - private code:string - private count:number - private icodes:string[] | undefined - private ncode:string - private ncount:number - private ncodes:string[] | undefined - private dcode:string | undefined - private sxlt:string | undefined - private bran:string | undefined - private creator: SaltyCreator - public algo:Algos = Algos.salty - public signers:Signer[] - - constructor(salter:Salter, pidx:number, kidx:number=0, tier=Tier.low, transferable=false, stem=undefined, - code=MtrDex.Ed25519_Seed, count=1, icodes:string[]|undefined=undefined, ncode=MtrDex.Ed25519_Seed, - ncount=1, ncodes:string[]|undefined=undefined, dcode=MtrDex.Blake3_256, bran:string|undefined = undefined, sxlt=undefined){ - + private aeid: string; + private encrypter: Encrypter; + private decrypter: Decrypter; + private salter: Salter; + private pidx: number; + private kidx: number; + private tier: Tier; + private transferable: boolean; + private stem: string | undefined; + private code: string; + private count: number; + private icodes: string[] | undefined; + private ncode: string; + private ncount: number; + private ncodes: string[] | undefined; + private dcode: string | undefined; + private sxlt: string | undefined; + private bran: string | undefined; + private creator: SaltyCreator; + public algo: Algos = Algos.salty; + public signers: Signer[]; + + constructor( + salter: Salter, + pidx: number, + kidx: number = 0, + tier = Tier.low, + transferable = false, + stem = undefined, + code = MtrDex.Ed25519_Seed, + count = 1, + icodes: string[] | undefined = undefined, + ncode = MtrDex.Ed25519_Seed, + ncount = 1, + ncodes: string[] | undefined = undefined, + dcode = MtrDex.Blake3_256, + bran: string | undefined = undefined, + sxlt = undefined + ) { // # Salter is the entered passcode and used for enc/dec of salts for each AID - this.salter = salter - let signer = this.salter.signer(undefined, transferable=false) - - this.aeid = signer.verfer.qb64 - - this.encrypter = new Encrypter({}, b(this.aeid)) - this.decrypter = new Decrypter({}, signer.qb64b) - - this.code = code - this.ncode = ncode - this.tier = tier - this.icodes = icodes==undefined? new Array(count).fill(code) : icodes - this.ncodes = ncodes==undefined? new Array(ncount).fill(ncode) : ncodes - this.dcode = dcode - this.pidx = pidx - this.kidx = kidx - this.transferable = transferable - this.count = count - this.ncount = ncount - this.stem = stem==undefined? "signify:aid" : stem - + this.salter = salter; + let signer = this.salter.signer(undefined, (transferable = false)); + + this.aeid = signer.verfer.qb64; + + this.encrypter = new Encrypter({}, b(this.aeid)); + this.decrypter = new Decrypter({}, signer.qb64b); + + this.code = code; + this.ncode = ncode; + this.tier = tier; + this.icodes = + icodes == undefined ? new Array(count).fill(code) : icodes; + this.ncodes = + ncodes == undefined + ? new Array(ncount).fill(ncode) + : ncodes; + this.dcode = dcode; + this.pidx = pidx; + this.kidx = kidx; + this.transferable = transferable; + this.count = count; + this.ncount = ncount; + this.stem = stem == undefined ? 'signify:aid' : stem; + if (bran != undefined) { - this.bran = MtrDex.Salt_128 + 'A' + bran!.slice(0, 21) - this.creator = new SaltyCreator(this.bran, this.tier, this.stem) - this.sxlt = this.encrypter.encrypt(b(this.creator.salt)).qb64 + this.bran = MtrDex.Salt_128 + 'A' + bran!.slice(0, 21); + this.creator = new SaltyCreator(this.bran, this.tier, this.stem); + this.sxlt = this.encrypter.encrypt(b(this.creator.salt)).qb64; } else if (sxlt == undefined) { - this.creator = new SaltyCreator(undefined, this.tier, this.stem) - this.sxlt = this.encrypter.encrypt(b(this.creator.salt)).qb64 - } else { - this.sxlt = sxlt - let ciph = new Cipher({qb64:this.sxlt}) - this.creator = new SaltyCreator(this.decrypter.decrypt(null, ciph).qb64, tier=tier, this.stem) + this.creator = new SaltyCreator(undefined, this.tier, this.stem); + this.sxlt = this.encrypter.encrypt(b(this.creator.salt)).qb64; + } else { + this.sxlt = sxlt; + let ciph = new Cipher({ qb64: this.sxlt }); + this.creator = new SaltyCreator( + this.decrypter.decrypt(null, ciph).qb64, + (tier = tier), + this.stem + ); } - this.signers = this.creator.create(this.icodes, this.ncount, this.ncode, this.transferable, this.pidx, 0, this.kidx,false).signers - + this.signers = this.creator.create( + this.icodes, + this.ncount, + this.ncode, + this.transferable, + this.pidx, + 0, + this.kidx, + false + ).signers; } params() { @@ -160,11 +278,11 @@ export class SaltyKeeper { icodes: this.icodes, ncodes: this.ncodes, dcode: this.dcode, - transferable: this.transferable - } + transferable: this.transferable, + }; } - incept(transferable:boolean) { + incept(transferable: boolean) { // Create verfers and digers for inception event for AID represented by this Keeper // Args: @@ -173,262 +291,424 @@ export class SaltyKeeper { // Returns: // verfers(list): qualified base64 of signing public keys // digers(list): qualified base64 of hash of rotation public keys - - this.transferable = transferable - this.kidx = 0 - - let signers = this.creator.create(this.icodes, this.count, this.code, this.transferable, this.pidx, 0, this.kidx,false) - let verfers = signers.signers.map(signer => signer.verfer.qb64); - - let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable, this.pidx, 0, this.icodes?.length,false) - let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); - - return [verfers, digers] + this.transferable = transferable; + this.kidx = 0; + + let signers = this.creator.create( + this.icodes, + this.count, + this.code, + this.transferable, + this.pidx, + 0, + this.kidx, + false + ); + let verfers = signers.signers.map((signer) => signer.verfer.qb64); + + let nsigners = this.creator.create( + this.ncodes, + this.ncount, + this.ncode, + this.transferable, + this.pidx, + 0, + this.icodes?.length, + false + ); + let digers = nsigners.signers.map( + (nsigner) => + new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 + ); + + return [verfers, digers]; } - rotate(ncodes:string[], transferable:boolean, ..._:any[]){ - // Rotate and return verfers and digers for next rotation event for AID represented by this Keeper + rotate(ncodes: string[], transferable: boolean, ..._: any[]) { + // Rotate and return verfers and digers for next rotation event for AID represented by this Keeper - // Args: - // ncodes (list): - // transferable (bool): derivation codes for rotation key creation - - // Returns: - // verfers(list): qualified base64 of signing public keys - // digers(list): qualified base64 of hash of rotation public keys - - - this.ncodes = ncodes - this.transferable = transferable - let signers = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable, this.pidx, 0, this.kidx+this.icodes!.length,false) - let verfers = signers.signers.map(signer => signer.verfer.qb64); + // Args: + // ncodes (list): + // transferable (bool): derivation codes for rotation key creation - this.kidx = this.kidx! + this.icodes!.length - let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable, this.pidx, 0, this.kidx+this.icodes!.length,false) - let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); + // Returns: + // verfers(list): qualified base64 of signing public keys + // digers(list): qualified base64 of hash of rotation public keys - return [verfers, digers] + this.ncodes = ncodes; + this.transferable = transferable; + let signers = this.creator.create( + this.ncodes, + this.ncount, + this.ncode, + this.transferable, + this.pidx, + 0, + this.kidx + this.icodes!.length, + false + ); + let verfers = signers.signers.map((signer) => signer.verfer.qb64); + + this.kidx = this.kidx! + this.icodes!.length; + let nsigners = this.creator.create( + this.ncodes, + this.ncount, + this.ncode, + this.transferable, + this.pidx, + 0, + this.kidx + this.icodes!.length, + false + ); + let digers = nsigners.signers.map( + (nsigner) => + new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 + ); + + return [verfers, digers]; } - sign(ser: Uint8Array, indexed=true, indices:number[]|undefined=undefined, ondices:number[]|undefined=undefined){ - let signers = this.creator.create(this.icodes, this.ncount, this.ncode, this.transferable, this.pidx, 0, this.kidx,false) - - if (indexed){ - let sigers = [] - let i = 0 + sign( + ser: Uint8Array, + indexed = true, + indices: number[] | undefined = undefined, + ondices: number[] | undefined = undefined + ) { + let signers = this.creator.create( + this.icodes, + this.ncount, + this.ncode, + this.transferable, + this.pidx, + 0, + this.kidx, + false + ); + + if (indexed) { + let sigers = []; + let i = 0; for (const [j, signer] of signers.signers.entries()) { - if (indices!= undefined){ - i = indices![j] - if (typeof i != "number" || i < 0){ - throw new Error(`Invalid signing index = ${i}, not whole number.`) + if (indices != undefined) { + i = indices![j]; + if (typeof i != 'number' || i < 0) { + throw new Error( + `Invalid signing index = ${i}, not whole number.` + ); } } else { - i = j + i = j; } - let o = 0 - if (ondices!=undefined){ - o = ondices![j] - if ((o == undefined || typeof o == "number" && typeof o != "number" && o>=0)!) { - throw new Error(`Invalid ondex = ${o}, not whole number.`) + let o = 0; + if (ondices != undefined) { + o = ondices![j]; + if ( + (o == undefined || + (typeof o == 'number' && + typeof o != 'number' && + o >= 0))! + ) { + throw new Error( + `Invalid ondex = ${o}, not whole number.` + ); } } else { - o = i + o = i; } - sigers.push(signer.sign(ser, i, o==undefined?true:false, o)) - } - return sigers.map(siger => siger.qb64); + sigers.push( + signer.sign(ser, i, o == undefined ? true : false, o) + ); + } + return sigers.map((siger) => siger.qb64); } else { - let cigars = [] + let cigars = []; for (const [_, signer] of signers.signers.entries()) { - cigars.push(signer.sign(ser)) + cigars.push(signer.sign(ser)); } - return cigars.map(cigar => cigar.qb64); + return cigars.map((cigar) => cigar.qb64); } } } - export class RandyKeeper { - private salter: Salter - private code:string - private count:number - private icodes:string[] | undefined - private transferable:boolean - private ncount:number - private ncodes:string[] | undefined - private ncode:string - private dcode:string | undefined - private prxs:string[] | undefined - private nxts:string[] | undefined - private aeid:string - private encrypter:Encrypter - private decrypter:Decrypter - private creator: RandyCreator - public algo:Algos = Algos.randy - public signers:Signer[] - - constructor(salter:Salter, code=MtrDex.Ed25519_Seed, count=1, icodes:string[]|undefined=undefined, transferable=false, - ncode=MtrDex.Ed25519_Seed, ncount=1, ncodes:string[], dcode=MtrDex.Blake3_256, prxs:string[]|undefined=undefined, nxts:string[]|undefined=undefined){ - - this.salter = salter - this.icodes = icodes==undefined? new Array(count).fill(code) : icodes - this.ncodes = ncodes==undefined? new Array(ncount).fill(ncode) : ncodes - - this.code = code - this.ncode = ncode - this.count = count - this.ncount = ncount - - let signer = this.salter.signer(undefined, transferable=false) - this.aeid = signer.verfer.qb64 - - this.encrypter = new Encrypter({}, b(this.aeid)) - this.decrypter = new Decrypter({}, signer.qb64b) - - this.nxts = nxts ?? [] - this.prxs = prxs ?? [] - this.transferable = transferable - - this.icodes = icodes - this.ncodes = ncodes - this.dcode = dcode - - this.creator = new RandyCreator() - - this.signers = this.prxs.map(prx => this.decrypter.decrypt(new Cipher({qb64:prx}).qb64b, undefined, this.transferable)) - + private salter: Salter; + private code: string; + private count: number; + private icodes: string[] | undefined; + private transferable: boolean; + private ncount: number; + private ncodes: string[] | undefined; + private ncode: string; + private dcode: string | undefined; + private prxs: string[] | undefined; + private nxts: string[] | undefined; + private aeid: string; + private encrypter: Encrypter; + private decrypter: Decrypter; + private creator: RandyCreator; + public algo: Algos = Algos.randy; + public signers: Signer[]; + + constructor( + salter: Salter, + code = MtrDex.Ed25519_Seed, + count = 1, + icodes: string[] | undefined = undefined, + transferable = false, + ncode = MtrDex.Ed25519_Seed, + ncount = 1, + ncodes: string[], + dcode = MtrDex.Blake3_256, + prxs: string[] | undefined = undefined, + nxts: string[] | undefined = undefined + ) { + this.salter = salter; + this.icodes = + icodes == undefined ? new Array(count).fill(code) : icodes; + this.ncodes = + ncodes == undefined + ? new Array(ncount).fill(ncode) + : ncodes; + + this.code = code; + this.ncode = ncode; + this.count = count; + this.ncount = ncount; + + let signer = this.salter.signer(undefined, (transferable = false)); + this.aeid = signer.verfer.qb64; + + this.encrypter = new Encrypter({}, b(this.aeid)); + this.decrypter = new Decrypter({}, signer.qb64b); + + this.nxts = nxts ?? []; + this.prxs = prxs ?? []; + this.transferable = transferable; + + this.icodes = icodes; + this.ncodes = ncodes; + this.dcode = dcode; + + this.creator = new RandyCreator(); + + this.signers = this.prxs.map((prx) => + this.decrypter.decrypt( + new Cipher({ qb64: prx }).qb64b, + undefined, + this.transferable + ) + ); } params() { - return { nxts: this.nxts, prxs: this.prxs, - transferable: this.transferable - } + transferable: this.transferable, + }; } - incept(transferable:boolean) { - this.transferable = transferable - - let signers = this.creator.create(this.icodes, this.count, this.code, this.transferable) - this.prxs = signers.signers.map(signer => this.encrypter.encrypt(undefined,signer).qb64); - - let verfers = signers.signers.map(signer => signer.verfer.qb64); - - let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable) - - this.nxts = nsigners.signers.map(signer => this.encrypter.encrypt(undefined,signer).qb64); - - let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); - - return [verfers, digers] + incept(transferable: boolean) { + this.transferable = transferable; + + let signers = this.creator.create( + this.icodes, + this.count, + this.code, + this.transferable + ); + this.prxs = signers.signers.map( + (signer) => this.encrypter.encrypt(undefined, signer).qb64 + ); + + let verfers = signers.signers.map((signer) => signer.verfer.qb64); + + let nsigners = this.creator.create( + this.ncodes, + this.ncount, + this.ncode, + this.transferable + ); + + this.nxts = nsigners.signers.map( + (signer) => this.encrypter.encrypt(undefined, signer).qb64 + ); + + let digers = nsigners.signers.map( + (nsigner) => + new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 + ); + + return [verfers, digers]; } - rotate(ncodes:string[], transferable:boolean, ..._:any[]){ - - this.ncodes = ncodes - this.transferable = transferable - this.prxs = this.nxts - - let signers = this.nxts!.map(nxt => this.decrypter.decrypt(undefined, new Cipher({qb64:nxt}), this.transferable)) - let verfers = signers.map(signer => signer.verfer.qb64) - let nsigners = this.creator.create(this.ncodes, this.ncount, this.ncode, this.transferable) - - this.nxts = nsigners.signers.map(signer => this.encrypter.encrypt(undefined, signer).qb64); - - let digers = nsigners.signers.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); - - return [verfers, digers] - } - - sign(ser: Uint8Array, indexed=true, indices:number[]|undefined=undefined, ondices:number[]|undefined=undefined){ - let signers = this.prxs!.map(prx => this.decrypter.decrypt(new Cipher({qb64:prx}).qb64b, undefined, this.transferable)) + rotate(ncodes: string[], transferable: boolean, ..._: any[]) { + this.ncodes = ncodes; + this.transferable = transferable; + this.prxs = this.nxts; + + let signers = this.nxts!.map((nxt) => + this.decrypter.decrypt( + undefined, + new Cipher({ qb64: nxt }), + this.transferable + ) + ); + let verfers = signers.map((signer) => signer.verfer.qb64); + let nsigners = this.creator.create( + this.ncodes, + this.ncount, + this.ncode, + this.transferable + ); + + this.nxts = nsigners.signers.map( + (signer) => this.encrypter.encrypt(undefined, signer).qb64 + ); + + let digers = nsigners.signers.map( + (nsigner) => + new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 + ); + + return [verfers, digers]; + } - if (indexed){ - let sigers = [] - let i = 0 + sign( + ser: Uint8Array, + indexed = true, + indices: number[] | undefined = undefined, + ondices: number[] | undefined = undefined + ) { + let signers = this.prxs!.map((prx) => + this.decrypter.decrypt( + new Cipher({ qb64: prx }).qb64b, + undefined, + this.transferable + ) + ); + + if (indexed) { + let sigers = []; + let i = 0; for (const [j, signer] of signers.entries()) { - if (indices!= undefined){ - i = indices![j] - if (typeof i != "number" || i < 0){ - throw new Error(`Invalid signing index = ${i}, not whole number.`) + if (indices != undefined) { + i = indices![j]; + if (typeof i != 'number' || i < 0) { + throw new Error( + `Invalid signing index = ${i}, not whole number.` + ); } } else { - i = j + i = j; } - let o = 0 - if (ondices!=undefined){ - o = ondices![j] - if ((o == undefined || typeof o == "number" && typeof o != "number" && o>=0)!) { - throw new Error(`Invalid ondex = ${o}, not whole number.`) + let o = 0; + if (ondices != undefined) { + o = ondices![j]; + if ( + (o == undefined || + (typeof o == 'number' && + typeof o != 'number' && + o >= 0))! + ) { + throw new Error( + `Invalid ondex = ${o}, not whole number.` + ); } } else { - o = i + o = i; } - sigers.push(signer.sign(ser, i, o==undefined?true:false, o)) - } - return sigers.map(siger => siger.qb64); + sigers.push( + signer.sign(ser, i, o == undefined ? true : false, o) + ); + } + return sigers.map((siger) => siger.qb64); } else { - let cigars = [] + let cigars = []; for (const [_, signer] of signers.entries()) { - cigars.push(signer.sign(ser)) + cigars.push(signer.sign(ser)); } - return cigars.map(cigar => cigar.qb64); + return cigars.map((cigar) => cigar.qb64); } } } - export class GroupKeeper { - private manager: KeyManager - private mhab:any - private gkeys:string[] | undefined - private gdigs:string[] | undefined - public algo:Algos = Algos.group - public signers:Signer[] - - constructor(manager:KeyManager, mhab=undefined, states:any[]|undefined=undefined, rstates:any[]|undefined=undefined, keys:any[]|undefined=undefined, ndigs:any[]|undefined=undefined){ - - this.manager = manager - if (states !=undefined) { - keys = states.map(state => state['k'][0]) +export class GroupKeeper { + private manager: KeyManager; + private mhab: any; + private gkeys: string[] | undefined; + private gdigs: string[] | undefined; + public algo: Algos = Algos.group; + public signers: Signer[]; + + constructor( + manager: KeyManager, + mhab = undefined, + states: any[] | undefined = undefined, + rstates: any[] | undefined = undefined, + keys: any[] | undefined = undefined, + ndigs: any[] | undefined = undefined + ) { + this.manager = manager; + if (states != undefined) { + keys = states.map((state) => state['k'][0]); } - if (rstates !=undefined) { - ndigs = rstates.map(state => state['n'][0]) + if (rstates != undefined) { + ndigs = rstates.map((state) => state['n'][0]); } - this.gkeys = keys - this.gdigs = ndigs - this.mhab = mhab - this.signers = [] + this.gkeys = keys; + this.gdigs = ndigs; + this.mhab = mhab; + this.signers = []; } - incept(..._:any){ - return [this.gkeys, this.gdigs] + incept(..._: any) { + return [this.gkeys, this.gdigs]; } - rotate(_ncodes:string[], _transferable:boolean,states:any[], rstates:any[],..._:any){ - this.gkeys = states.map(state => state['k'][0]) - this.gdigs = rstates.map(state => state['n'][0]) - return [this.gkeys, this.gdigs] + rotate( + _ncodes: string[], + _transferable: boolean, + states: any[], + rstates: any[], + ..._: any + ) { + this.gkeys = states.map((state) => state['k'][0]); + this.gdigs = rstates.map((state) => state['n'][0]); + return [this.gkeys, this.gdigs]; } +<<<<<<< HEAD async sign(ser:Uint8Array, indexed:boolean=true, _indices:number[]|undefined=undefined, _ondices:number[]|undefined=undefined):Promise{ let key = this.mhab['state']['k'][0] let ndig = this.mhab['state']['n'][0] - - let csi = this.gkeys!.indexOf(key) - let pni = this.gdigs!.indexOf(ndig) - let mkeeper = this.manager.get(this.mhab) - +======= + sign( + ser: Uint8Array, + indexed: boolean = true, + _indices: number[] | undefined = undefined, + _ondices: number[] | undefined = undefined + ): Siger[] | Cigar[] { + let key = this.mhab['state']['k'][0]; + let ndig = this.mhab['state']['n'][0]; +>>>>>>> e42f976 (adds prettier) + + let csi = this.gkeys!.indexOf(key); + let pni = this.gdigs!.indexOf(ndig); + let mkeeper = this.manager.get(this.mhab); + +<<<<<<< HEAD return await mkeeper.sign(ser, indexed, [csi], [pni]) +======= + return mkeeper.sign(ser, indexed, [csi], [pni]); +>>>>>>> e42f976 (adds prettier) } - params(){ + params() { return { mhab: this.mhab, keys: this.gkeys, - ndigs: this.gdigs - } - + ndigs: this.gdigs, + }; } -} \ No newline at end of file +} diff --git a/src/keri/core/kering.ts b/src/keri/core/kering.ts index 36dacf29..f0a1a05a 100644 --- a/src/keri/core/kering.ts +++ b/src/keri/core/kering.ts @@ -1,12 +1,10 @@ - - export class EmptyMaterialError { - private readonly _err: Error + private readonly _err: Error; constructor(err: string) { - this._err = new Error(err) + this._err = new Error(err); } get err() { - return this._err + return this._err; } -} \ No newline at end of file +} diff --git a/src/keri/core/manager.ts b/src/keri/core/manager.ts index 6a0a1c95..093c5aa4 100644 --- a/src/keri/core/manager.ts +++ b/src/keri/core/manager.ts @@ -1,67 +1,73 @@ -import {Encrypter} from "./encrypter" -import {Decrypter} from "./decrypter" -import {Salter, Tier} from "./salter" -import {Signer} from "./signer" -import {Verfer} from "./verfer"; -import {MtrDex} from "./matter"; -import {Diger} from "./diger"; -import {Cigar} from "./cigar"; -import {Siger} from "./siger"; -import {b} from "./core"; - +import { Encrypter } from './encrypter'; +import { Decrypter } from './decrypter'; +import { Salter, Tier } from './salter'; +import { Signer } from './signer'; +import { Verfer } from './verfer'; +import { MtrDex } from './matter'; +import { Diger } from './diger'; +import { Cigar } from './cigar'; +import { Siger } from './siger'; +import { b } from './core'; export enum Algos { +<<<<<<< HEAD randy = "randy", salty = "salty", group = "group", extern = "extern" +======= + randy = 'randy', + salty = 'salty', + group = 'group', +>>>>>>> e42f976 (adds prettier) } class PubLot { - public pubs: Array = new Array() // list qb64 public keys. - public ridx: number = 0 // index of rotation (est event) that uses public key set - public kidx: number = 0 // index of key in sequence of public keys - public dt:string = "" // datetime ISO8601 when key set created + public pubs: Array = new Array(); // list qb64 public keys. + public ridx: number = 0; // index of rotation (est event) that uses public key set + public kidx: number = 0; // index of key in sequence of public keys + public dt: string = ''; // datetime ISO8601 when key set created } class PreSit { - public old: PubLot = new PubLot() //previous publot - public new: PubLot = new PubLot() //newly current publot - public nxt: PubLot = new PubLot() //next public publot + public old: PubLot = new PubLot(); //previous publot + public new: PubLot = new PubLot(); //newly current publot + public nxt: PubLot = new PubLot(); //next public publot } class PrePrm { - public pidx: number = 0 // prefix index for this keypair sequence - public algo: Algos = Algos.salty // salty default uses indices and salt to create new key pairs - public salt: string = '' // empty salt used for salty algo. - public stem: string = '' // default unique path stem for salty algo - public tier: string = '' // security tier for stretch index salty algo - + public pidx: number = 0; // prefix index for this keypair sequence + public algo: Algos = Algos.salty; // salty default uses indices and salt to create new key pairs + public salt: string = ''; // empty salt used for salty algo. + public stem: string = ''; // default unique path stem for salty algo + public tier: string = ''; // security tier for stretch index salty algo } class PubSet { - pubs: Array = new Array() // list qb64 public keys. + pubs: Array = new Array(); // list qb64 public keys. } class PubPath { - path: string = "" - code: string = "" - tier: string = Tier.high - temp: boolean = false + path: string = ''; + code: string = ''; + tier: string = Tier.high; + temp: boolean = false; } class Keys { - private readonly _signers: Array - private readonly _paths?: Array + private readonly _signers: Array; + private readonly _paths?: Array; constructor(signers: Array, paths?: Array) { - this._signers = signers + this._signers = signers; if (paths != undefined) { if (signers.length != paths.length) { - throw new Error("If paths are provided, they must be the same length as signers") + throw new Error( + 'If paths are provided, they must be the same length as signers' + ); } } - this._paths = paths + this._paths = paths; } get paths(): Array | undefined { @@ -74,52 +80,65 @@ class Keys { } export interface Creator { - create(codes: Array | undefined, count: number, code: string, transferable: boolean, pidx: number, - ridx: number, kidx: number, temp: boolean): Keys - salt: string - stem: string - tier: Tier + create( + codes: Array | undefined, + count: number, + code: string, + transferable: boolean, + pidx: number, + ridx: number, + kidx: number, + temp: boolean + ): Keys; + salt: string; + stem: string; + tier: Tier; } export class RandyCreator implements Creator { - - create(codes: Array | undefined = undefined, count: number = 1, code: string = MtrDex.Ed25519_Seed, - transferable: boolean = true): Keys { - let signers = new Array() + create( + codes: Array | undefined = undefined, + count: number = 1, + code: string = MtrDex.Ed25519_Seed, + transferable: boolean = true + ): Keys { + let signers = new Array(); if (codes == undefined) { - codes = new Array(count).fill(code) + codes = new Array(count).fill(code); } - codes.forEach(function(code) { - signers.push(new Signer({code: code, transferable: transferable})) - }) + codes.forEach(function (code) { + signers.push( + new Signer({ code: code, transferable: transferable }) + ); + }); - return new Keys(signers) + return new Keys(signers); } get salt(): string { - return ""; + return ''; } get stem(): string { - return ""; + return ''; } get tier(): Tier { - return "" as Tier; + return '' as Tier; } } export class SaltyCreator implements Creator { - - public salter: Salter - private readonly _stem: string - constructor(salt: string | undefined = undefined, tier: Tier | undefined = undefined, - stem: string | undefined = undefined) { - - this.salter = new Salter({qb64: salt, tier: tier}) - this._stem = stem == undefined ? "" : stem - + public salter: Salter; + private readonly _stem: string; + constructor( + salt: string | undefined = undefined, + tier: Tier | undefined = undefined, + stem: string | undefined = undefined + ) { + this.salter = new Salter({ qb64: salt, tier: tier }); + this._stem = stem == undefined ? '' : stem; } get salt(): string { @@ -134,719 +153,867 @@ export class SaltyCreator implements Creator { return this.salter.tier!; } - create(codes: Array | undefined = undefined, count: number = 1, code: string = MtrDex.Ed25519_Seed, - transferable: boolean = true, pidx: number = 0, ridx: number = 0, kidx: number = 0, - temp: boolean = false): Keys { - - let signers = new Array() - let paths = new Array() + create( + codes: Array | undefined = undefined, + count: number = 1, + code: string = MtrDex.Ed25519_Seed, + transferable: boolean = true, + pidx: number = 0, + ridx: number = 0, + kidx: number = 0, + temp: boolean = false + ): Keys { + let signers = new Array(); + let paths = new Array(); if (codes == undefined) { - codes = new Array(count).fill(code) + codes = new Array(count).fill(code); } codes.forEach((code, idx) => { // Previuos definition of path // let path = this.stem + pidx.toString(16) + ridx.toString(16) + (kidx+idx).toString(16) - let path = this.stem == ""?pidx.toString(16): this.stem + ridx.toString(16) + (kidx+idx).toString(16) - - signers.push(this.salter.signer(code, transferable, path, this.tier, temp)) - paths.push(path) - }) - - return new Keys(signers, paths) + let path = + this.stem == '' + ? pidx.toString(16) + : this.stem + ridx.toString(16) + (kidx + idx).toString(16); + + signers.push( + this.salter.signer(code, transferable, path, this.tier, temp) + ); + paths.push(path); + }); + + return new Keys(signers, paths); } } export class Creatory { - private readonly _make: any + private readonly _make: any; constructor(algo: Algos = Algos.salty) { - switch(algo) { + switch (algo) { case Algos.randy: - this._make = this._makeRandy + this._make = this._makeRandy; break; case Algos.salty: - this._make = this._makeSalty + this._make = this._makeSalty; break; default: - throw new Error(`unsupported algo=${algo}`) + throw new Error(`unsupported algo=${algo}`); } } make(...args: any[]): Creator { - return this._make(...args) + return this._make(...args); } _makeRandy(): Creator { - return new RandyCreator() + return new RandyCreator(); } _makeSalty(...args: any[]): Creator { - return new SaltyCreator(...args) + return new SaltyCreator(...args); } } export function openManager(passcode: string, salt?: string) { if (passcode.length < 21) { - throw new Error("Bran (passcode seed material) too short.") + throw new Error('Bran (passcode seed material) too short.'); } - let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21) // qb64 salt for seed - let signer = new Salter({qb64: bran}).signer(MtrDex.Ed25519_Seed, false) - let seed = signer.qb64 - let aeid = signer.verfer.qb64 // lest it remove encryption + let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21); // qb64 salt for seed + let signer = new Salter({ qb64: bran }).signer(MtrDex.Ed25519_Seed, false); + let seed = signer.qb64; + let aeid = signer.verfer.qb64; // lest it remove encryption let algo; - - let salter = salt!=undefined?new Salter({qb64: salt}):undefined + + let salter = salt != undefined ? new Salter({ qb64: salt }) : undefined; if (salt != undefined) { - algo = Algos.salty - + algo = Algos.salty; } else { - algo = Algos.randy + algo = Algos.randy; } - return new Manager({seed: seed, aeid: aeid, algo: algo, salter: salter}) + return new Manager({ seed: seed, aeid: aeid, algo: algo, salter: salter }); } export interface ManagerArgs { - ks?: KeyStore | undefined - seed?: string | undefined - aeid?: string | undefined - pidx?: number | undefined - algo?: Algos | undefined - salter?: Salter | undefined - tier?: string | undefined + ks?: KeyStore | undefined; + seed?: string | undefined; + aeid?: string | undefined; + pidx?: number | undefined; + algo?: Algos | undefined; + salter?: Salter | undefined; + tier?: string | undefined; } export interface ManagerInceptArgs { - icodes?: any | undefined - icount?: number - icode?: string - ncodes?: any | undefined - ncount?: number - ncode?: string - dcode?: string - algo?: Algos | undefined - salt?: string | undefined - stem?: string | undefined - tier?: string | undefined - rooted?: boolean - transferable?: boolean - temp?: boolean + icodes?: any | undefined; + icount?: number; + icode?: string; + ncodes?: any | undefined; + ncount?: number; + ncode?: string; + dcode?: string; + algo?: Algos | undefined; + salt?: string | undefined; + stem?: string | undefined; + tier?: string | undefined; + rooted?: boolean; + transferable?: boolean; + temp?: boolean; } interface RotateArgs { - pre: string - ncodes?: any | undefined - ncount?: number - ncode?: string - dcode?: string - transferable?: boolean - temp?: boolean - erase?: boolean + pre: string; + ncodes?: any | undefined; + ncount?: number; + ncode?: string; + dcode?: string; + transferable?: boolean; + temp?: boolean; + erase?: boolean; } interface SignArgs { - ser: Uint8Array - pubs?: Array | undefined - verfers?: Array | undefined - indexed?: boolean - indices?: Array | undefined - ondices?: Array | undefined + ser: Uint8Array; + pubs?: Array | undefined; + verfers?: Array | undefined; + indexed?: boolean; + indices?: Array | undefined; + ondices?: Array | undefined; } export class Manager { - private _seed?: string - private _salt?: string - private _encrypter: Encrypter | undefined - private _decrypter: Decrypter | undefined - private readonly _ks: KeyStore + private _seed?: string; + private _salt?: string; + private _encrypter: Encrypter | undefined; + private _decrypter: Decrypter | undefined; + private readonly _ks: KeyStore; - constructor({ks, seed, aeid, pidx, algo, salter, tier}: ManagerArgs) { + constructor({ ks, seed, aeid, pidx, algo, salter, tier }: ManagerArgs) { + this._ks = ks == undefined ? new Keeper() : ks; + this._seed = seed; + this._encrypter = undefined; + this._decrypter = undefined; - this._ks = ks == undefined ? new Keeper() : ks - this._seed = seed - this._encrypter = undefined - this._decrypter = undefined + aeid = aeid == undefined ? undefined : aeid; + pidx = pidx == undefined ? 0 : pidx; + algo = algo == undefined ? Algos.salty : algo; - aeid = aeid == undefined ? undefined : aeid - pidx = pidx == undefined ? 0 : pidx - algo = algo == undefined ? Algos.salty : algo + let salt = salter?.qb64; - let salt = salter?.qb64 - - tier = tier == undefined ? Tier.low : tier + tier = tier == undefined ? Tier.low : tier; if (this.pidx == undefined) { - this.pidx = pidx + this.pidx = pidx; } if (this.algo == undefined) { - this.algo = algo + this.algo = algo; } if (this.salt == undefined) { - this.salt = salt + this.salt = salt; } if (this.tier == undefined) { - this.tier = tier + this.tier = tier; } if (this.aeid == undefined) { - this.updateAeid(aeid, this._seed) + this.updateAeid(aeid, this._seed); } } get ks(): KeyStore { - return this._ks + return this._ks; } get encrypter(): Encrypter | undefined { - return this._encrypter + return this._encrypter; } get decrypter(): Decrypter | undefined { - return this._decrypter + return this._decrypter; } get seed(): string | undefined { - return this._seed + return this._seed; } get aeid(): string | undefined { - return this.ks.getGbls('aeid') + return this.ks.getGbls('aeid'); } get pidx(): number | undefined { - let pidx = this.ks.getGbls('pidx') + let pidx = this.ks.getGbls('pidx'); if (pidx != undefined) { - return parseInt(pidx, 16) + return parseInt(pidx, 16); } - return undefined + return undefined; } set pidx(pidx: number | undefined) { - this.ks.pinGbls('pidx', pidx!.toString(16)) + this.ks.pinGbls('pidx', pidx!.toString(16)); } - get salt(): string | undefined { + get salt(): string | undefined { if (this._decrypter == undefined) { - return this._salt + return this._salt; } else { - let salt = this.ks.getGbls('salt') - return this._decrypter.decrypt(b(salt)).qb64 + let salt = this.ks.getGbls('salt'); + return this._decrypter.decrypt(b(salt)).qb64; } } set salt(salt: string | undefined) { - if(this._encrypter == undefined) { - this._salt = salt + if (this._encrypter == undefined) { + this._salt = salt; } else { - salt = this._encrypter.encrypt(b(salt)).qb64 - this.ks.pinGbls('salt', salt!) + salt = this._encrypter.encrypt(b(salt)).qb64; + this.ks.pinGbls('salt', salt!); } } get tier(): string | undefined { - return this.ks.getGbls('tier') + return this.ks.getGbls('tier'); } set tier(tier: string | undefined) { - this.ks.pinGbls('tier', tier!) + this.ks.pinGbls('tier', tier!); } get algo(): Algos | undefined { - let a = this.ks.getGbls('algo') - let ta = a as keyof typeof Algos - return Algos[ta] + let a = this.ks.getGbls('algo'); + let ta = a as keyof typeof Algos; + return Algos[ta]; } set algo(algo: Algos | undefined) { - this.ks.pinGbls('algo', algo! as string) + this.ks.pinGbls('algo', algo! as string); } private updateAeid(aeid: string | undefined, seed?: string) { if (this.aeid != undefined) { - let seed = b(this._seed) + let seed = b(this._seed); if (this._seed == undefined || !this._encrypter?.verifySeed(seed)) { throw new Error(`Last seed missing or provided last seed " - "not associated with last aeid=${this.aeid}.`) + "not associated with last aeid=${this.aeid}.`); } } - if (aeid != "" && aeid != undefined) { + if (aeid != '' && aeid != undefined) { if (aeid != this.aeid) { - this._encrypter = new Encrypter({}, b(aeid)) + this._encrypter = new Encrypter({}, b(aeid)); if (seed == undefined || !this._encrypter.verifySeed(b(seed))) { throw new Error(`Seed missing or provided seed not associated" - " with provided aeid=${aeid}.`) + " with provided aeid=${aeid}.`); } } } else if (this.algo == Algos.randy) { // Unlike KERIpy, we don't support unencrypted secrets - throw new Error("Invalid Manager configuration, encryption must be used with Randy key creation.") + throw new Error( + 'Invalid Manager configuration, encryption must be used with Randy key creation.' + ); } else { - this._encrypter = undefined + this._encrypter = undefined; } - let salt = this.salt - if(salt != undefined) { - this.salt = salt + let salt = this.salt; + if (salt != undefined) { + this.salt = salt; } if (this._decrypter != undefined) { for (const [keys, data] of this.ks.prmsElements()) { if (data.salt != undefined) { - let salter = this._decrypter.decrypt(b(data.salt)) - data.salt = this._encrypter == undefined ? salter.qb64 : this._encrypter.encrypt(null, salter) - this.ks.pinPrms(keys, data) + let salter = this._decrypter.decrypt(b(data.salt)); + data.salt = + this._encrypter == undefined + ? salter.qb64 + : this._encrypter.encrypt(null, salter); + this.ks.pinPrms(keys, data); } } - for (const [pubKey, signer] of this.ks.prisElements(this._decrypter)) { - this.ks.pinPris(pubKey, signer, this._encrypter!) + for (const [pubKey, signer] of this.ks.prisElements( + this._decrypter + )) { + this.ks.pinPris(pubKey, signer, this._encrypter!); } - } - this.ks.pinGbls("aeid", aeid!) // set aeid in db - this._seed = seed // set .seed in memory + this.ks.pinGbls('aeid', aeid!); // set aeid in db + this._seed = seed; // set .seed in memory // update .decrypter - this._decrypter = seed != undefined ? new Decrypter({}, b(seed)) : undefined + this._decrypter = + seed != undefined ? new Decrypter({}, b(seed)) : undefined; } - incept({icodes=undefined, icount=1, icode=MtrDex.Ed25519_Seed, - ncodes=undefined, ncount=1, ncode=MtrDex.Ed25519_Seed, - dcode=MtrDex.Blake3_256, algo=undefined, salt=undefined, stem=undefined, tier=undefined, - rooted=true, transferable=true, temp=false }: ManagerInceptArgs): [Array, Array] { - + incept({ + icodes = undefined, + icount = 1, + icode = MtrDex.Ed25519_Seed, + ncodes = undefined, + ncount = 1, + ncode = MtrDex.Ed25519_Seed, + dcode = MtrDex.Blake3_256, + algo = undefined, + salt = undefined, + stem = undefined, + tier = undefined, + rooted = true, + transferable = true, + temp = false, + }: ManagerInceptArgs): [Array, Array] { if (rooted && algo == undefined) { - algo = this.algo + algo = this.algo; } if (rooted && salt == undefined) { - salt = this.salt + salt = this.salt; } if (rooted && tier == undefined) { - tier = this.tier + tier = this.tier; } - let pidx = this.pidx! - let ridx = 0 - let kidx = 0 + let pidx = this.pidx!; + let ridx = 0; + let kidx = 0; - let creator = new Creatory(algo).make(salt, tier, stem) + let creator = new Creatory(algo).make(salt, tier, stem); if (icodes == undefined) { if (icount < 0) { - throw new Error(`Invalid icount=${icount} must be >= 0.`) + throw new Error(`Invalid icount=${icount} must be >= 0.`); } - icodes = new Array(icount).fill(icode) + icodes = new Array(icount).fill(icode); } - let ikeys = creator.create(icodes, 0, MtrDex.Ed25519_Seed, transferable, pidx, ridx, kidx, temp) - let verfers = Array.from(ikeys.signers, (signer: Signer) => signer.verfer) + let ikeys = creator.create( + icodes, + 0, + MtrDex.Ed25519_Seed, + transferable, + pidx, + ridx, + kidx, + temp + ); + let verfers = Array.from( + ikeys.signers, + (signer: Signer) => signer.verfer + ); if (ncodes == undefined) { if (ncount < 0) { - throw new Error(`Invalid ncount=${ncount} must be >= 0.`) + throw new Error(`Invalid ncount=${ncount} must be >= 0.`); } - ncodes = new Array(ncount).fill(ncode) + ncodes = new Array(ncount).fill(ncode); } - let nkeys = creator.create(ncodes, 0, MtrDex.Ed25519_Seed, transferable, pidx, ridx+1, kidx+icodes.length, - temp) - - let digers = Array.from(nkeys.signers, (signer: Signer) => new Diger({code: dcode}, signer.verfer.qb64b)) - - let pp = new PrePrm() - pp.pidx = pidx! - pp.algo = algo! - pp.salt = creator.salt.length == 0 || this.encrypter == undefined ? "" : this.encrypter.encrypt(b(creator.salt)).qb64 - pp.stem = creator.stem - pp.tier = creator.tier - - let dt = new Date().toString() - let nw = new PubLot() - nw.pubs = Array.from(verfers, (verfer: Verfer) => verfer.qb64) - nw.ridx = ridx - nw.kidx = kidx - nw.dt = dt - - let nt = new PubLot() - nt.pubs = Array.from(nkeys.signers, (signer: Signer) => signer.verfer.qb64) - nt.ridx = ridx + 1 - nt.kidx = kidx + icodes.length - nt.dt = dt - - let ps = new PreSit() - ps.new = nw - ps.nxt = nt - - let pre = verfers[0].qb64 + let nkeys = creator.create( + ncodes, + 0, + MtrDex.Ed25519_Seed, + transferable, + pidx, + ridx + 1, + kidx + icodes.length, + temp + ); + + let digers = Array.from( + nkeys.signers, + (signer: Signer) => new Diger({ code: dcode }, signer.verfer.qb64b) + ); + + let pp = new PrePrm(); + pp.pidx = pidx!; + pp.algo = algo!; + pp.salt = + creator.salt.length == 0 || this.encrypter == undefined + ? '' + : this.encrypter.encrypt(b(creator.salt)).qb64; + pp.stem = creator.stem; + pp.tier = creator.tier; + + let dt = new Date().toString(); + let nw = new PubLot(); + nw.pubs = Array.from(verfers, (verfer: Verfer) => verfer.qb64); + nw.ridx = ridx; + nw.kidx = kidx; + nw.dt = dt; + + let nt = new PubLot(); + nt.pubs = Array.from( + nkeys.signers, + (signer: Signer) => signer.verfer.qb64 + ); + nt.ridx = ridx + 1; + nt.kidx = kidx + icodes.length; + nt.dt = dt; + + let ps = new PreSit(); + ps.new = nw; + ps.nxt = nt; + + let pre = verfers[0].qb64; if (!this.ks.putPres(pre, verfers[0].qb64b)) { - throw new Error(`Already incepted pre=${pre}.`) + throw new Error(`Already incepted pre=${pre}.`); } if (!this.ks.putPrms(pre, pp)) { - throw new Error(`Already incepted prm for pre=${pre}.`) + throw new Error(`Already incepted prm for pre=${pre}.`); } - this.pidx = pidx! + 1 + this.pidx = pidx! + 1; if (!this.ks.putSits(pre, ps)) { - throw new Error(`Already incepted sit for pre=${pre}.`) + throw new Error(`Already incepted sit for pre=${pre}.`); } - if (this.encrypter != undefined) { // Only store encrypted keys if we have an encrypter, otherwise regenerate + if (this.encrypter != undefined) { + // Only store encrypted keys if we have an encrypter, otherwise regenerate ikeys.signers.forEach((signer: Signer) => { - this.ks.putPris(signer.verfer.qb64, signer, this.encrypter!) - }) + this.ks.putPris(signer.verfer.qb64, signer, this.encrypter!); + }); nkeys.signers.forEach((signer: Signer) => { - this.ks.putPris(signer.verfer.qb64, signer, this.encrypter!) - }) - } else if (this._encrypter == undefined && ikeys.paths != undefined && nkeys.paths != undefined) { + this.ks.putPris(signer.verfer.qb64, signer, this.encrypter!); + }); + } else if ( + this._encrypter == undefined && + ikeys.paths != undefined && + nkeys.paths != undefined + ) { ikeys.paths.forEach((path: string, idx: number) => { - let signer = ikeys.signers[idx] - let ppt = new PubPath() - ppt.path = path - ppt.code = icodes[idx] - ppt.tier = pp.tier - ppt.temp = temp - this.ks.putPths(signer.verfer.qb64, ppt) - }) + let signer = ikeys.signers[idx]; + let ppt = new PubPath(); + ppt.path = path; + ppt.code = icodes[idx]; + ppt.tier = pp.tier; + ppt.temp = temp; + this.ks.putPths(signer.verfer.qb64, ppt); + }); nkeys.paths.forEach((path: string, idx: number) => { - let signer = nkeys.signers[idx] - let ppt = new PubPath() - ppt.path = path - ppt.code = ncodes[idx] - ppt.tier = pp.tier - ppt.temp = temp - this.ks.putPths(signer.verfer.qb64, ppt) - }) + let signer = nkeys.signers[idx]; + let ppt = new PubPath(); + ppt.path = path; + ppt.code = ncodes[idx]; + ppt.tier = pp.tier; + ppt.temp = temp; + this.ks.putPths(signer.verfer.qb64, ppt); + }); } else { - throw new Error("invalid configuration, randy keys without encryption") + throw new Error( + 'invalid configuration, randy keys without encryption' + ); } - let pubSet = new PubSet() - pubSet.pubs = ps.new.pubs - this.ks.putPubs(riKey(pre, ridx), pubSet) + let pubSet = new PubSet(); + pubSet.pubs = ps.new.pubs; + this.ks.putPubs(riKey(pre, ridx), pubSet); - let nxtPubSet = new PubSet() - nxtPubSet.pubs = ps.nxt.pubs - this.ks.putPubs(riKey(pre, ridx+1), nxtPubSet) + let nxtPubSet = new PubSet(); + nxtPubSet.pubs = ps.nxt.pubs; + this.ks.putPubs(riKey(pre, ridx + 1), nxtPubSet); - return [verfers, digers] + return [verfers, digers]; } move(old: string, gnu: string) { if (old == gnu) { - return + return; } if (this.ks.getPres(old) == undefined) { - throw new Error(`Nonexistent old pre=${old}, nothing to assign.`) + throw new Error(`Nonexistent old pre=${old}, nothing to assign.`); } if (this.ks.getPres(gnu) != undefined) { - throw new Error(`Preexistent new pre=${gnu} may not clobber.`) + throw new Error(`Preexistent new pre=${gnu} may not clobber.`); } - let oldprm = this.ks.getPrms(old) + let oldprm = this.ks.getPrms(old); if (oldprm == undefined) { - throw new Error(`Nonexistent old prm for pre=${old}, nothing to move.`) + throw new Error( + `Nonexistent old prm for pre=${old}, nothing to move.` + ); } if (this.ks.getPrms(gnu) != undefined) { - throw new Error(`Preexistent new prm for pre=${gnu} may not clobber.`) + throw new Error( + `Preexistent new prm for pre=${gnu} may not clobber.` + ); } - let oldsit = this.ks.getSits(old) + let oldsit = this.ks.getSits(old); if (oldsit == undefined) { - throw new Error(`Nonexistent old sit for pre=${old}, nothing to move.`) + throw new Error( + `Nonexistent old sit for pre=${old}, nothing to move.` + ); } if (this.ks.getSits(gnu) != undefined) { - throw new Error(`Preexistent new sit for pre=${gnu} may not clobber.`) + throw new Error( + `Preexistent new sit for pre=${gnu} may not clobber.` + ); } if (!this.ks.putPrms(gnu, oldprm)) { - throw new Error(`Failed moving prm from old pre=${old} to new pre=${gnu}.`) + throw new Error( + `Failed moving prm from old pre=${old} to new pre=${gnu}.` + ); } else { - this.ks.remPrms(old) + this.ks.remPrms(old); } if (!this.ks.putSits(gnu, oldsit)) { - throw new Error(`Failed moving sit from old pre=${old} to new pre=${gnu}.`) + throw new Error( + `Failed moving sit from old pre=${old} to new pre=${gnu}.` + ); } else { - this.ks.remSits(old) + this.ks.remSits(old); } - let i = 0 + let i = 0; while (true) { - let pl = this.ks.getPubs(riKey(old, i)) + let pl = this.ks.getPubs(riKey(old, i)); if (pl == undefined) { - break + break; } if (!this.ks.putPubs(riKey(gnu, i), pl)) { - throw new Error(`Failed moving pubs at pre=${old} ri=${i} to new pre=${gnu}`) + throw new Error( + `Failed moving pubs at pre=${old} ri=${i} to new pre=${gnu}` + ); } - i = i + 1 + i = i + 1; } if (!this.ks.pinPres(old, b(gnu))) { - throw new Error(`Failed assiging new pre=${gnu} to old pre=${old}.`) + throw new Error( + `Failed assiging new pre=${gnu} to old pre=${old}.` + ); } if (!this.ks.putPres(gnu, b(gnu))) { - throw new Error(`Failed assiging new pre=${gnu}.`) + throw new Error(`Failed assiging new pre=${gnu}.`); } } - rotate({pre, ncodes=undefined, ncount=1, ncode=MtrDex.Ed25519_Seed, dcode=MtrDex.Blake3_256, - transferable=true, temp=false, erase=true}:RotateArgs): [Array, Array] { - let pp = this.ks.getPrms(pre) + rotate({ + pre, + ncodes = undefined, + ncount = 1, + ncode = MtrDex.Ed25519_Seed, + dcode = MtrDex.Blake3_256, + transferable = true, + temp = false, + erase = true, + }: RotateArgs): [Array, Array] { + let pp = this.ks.getPrms(pre); if (pp == undefined) { - throw new Error(`Attempt to rotate nonexistent pre=${pre}.`) + throw new Error(`Attempt to rotate nonexistent pre=${pre}.`); } - let ps = this.ks.getSits(pre) + let ps = this.ks.getSits(pre); if (ps == undefined) { - throw new Error(`Attempt to rotate nonexistent pre=${pre}.`) + throw new Error(`Attempt to rotate nonexistent pre=${pre}.`); } if (ps.nxt.pubs == undefined || ps.nxt.pubs.length == 0) { - throw new Error(`Attempt to rotate nontransferable pre=${pre}.`) + throw new Error(`Attempt to rotate nontransferable pre=${pre}.`); } - let old = ps.old - ps.old = ps.new - ps.new = ps.nxt + let old = ps.old; + ps.old = ps.new; + ps.new = ps.nxt; if (this.aeid != undefined && this.decrypter == undefined) { - throw new Error("Unauthorized decryption attempt. Aeid but no decrypter.") + throw new Error( + 'Unauthorized decryption attempt. Aeid but no decrypter.' + ); } - let verfers = new Array() + let verfers = new Array(); ps.new.pubs.forEach((pub) => { if (this.decrypter != undefined) { - let signer = this.ks.getPris(pub, this.decrypter) + let signer = this.ks.getPris(pub, this.decrypter); if (signer == undefined) { - throw new Error(`Missing prikey in db for pubkey=${pub}`) + throw new Error(`Missing prikey in db for pubkey=${pub}`); } - verfers.push(signer.verfer) + verfers.push(signer.verfer); } else { // Should we regenerate from salt here since this.decryptor is undefined - verfers.push(new Verfer({qb64: pub})) + verfers.push(new Verfer({ qb64: pub })); } + }); - }) - - let salt = pp.salt - if (salt != undefined && salt != "") { // If you provded a Salt for an AID but don't have encryption, pitch a fit + let salt = pp.salt; + if (salt != undefined && salt != '') { + // If you provded a Salt for an AID but don't have encryption, pitch a fit if (this.decrypter == undefined) { - throw new Error("Invalid configuration: AID salt with no encryption") + throw new Error( + 'Invalid configuration: AID salt with no encryption' + ); } - salt = this.decrypter.decrypt(b(salt)).qb64 + salt = this.decrypter.decrypt(b(salt)).qb64; } else { - salt = this.salt! + salt = this.salt!; } - let creator = new Creatory(pp.algo).make(salt, pp.tier, pp.stem) + let creator = new Creatory(pp.algo).make(salt, pp.tier, pp.stem); if (ncodes == undefined) { if (ncount < 0) { - throw new Error(`Invalid count=${ncount} must be >= 0`) + throw new Error(`Invalid count=${ncount} must be >= 0`); } - ncodes = new Array(ncount).fill(ncode) + ncodes = new Array(ncount).fill(ncode); } - let pidx = pp.pidx - let ridx = ps.new.ridx + 1 - let kidx = ps.nxt.kidx + ps.new.pubs.length - - let keys = creator.create(ncodes, 0, "", transferable, pidx, ridx, kidx, temp) - let digers = Array.from(keys.signers, (signer: Signer) => new Diger({code: dcode}, signer.verfer.qb64b)) - - let dt = new Date().toString() - ps.nxt = new PubLot() - ps.nxt.pubs = Array.from(keys.signers, (signer: Signer) => signer.verfer.qb64) - ps.nxt.ridx = ridx - ps.nxt.kidx = kidx - ps.nxt.dt = dt + let pidx = pp.pidx; + let ridx = ps.new.ridx + 1; + let kidx = ps.nxt.kidx + ps.new.pubs.length; + + let keys = creator.create( + ncodes, + 0, + '', + transferable, + pidx, + ridx, + kidx, + temp + ); + let digers = Array.from( + keys.signers, + (signer: Signer) => new Diger({ code: dcode }, signer.verfer.qb64b) + ); + + let dt = new Date().toString(); + ps.nxt = new PubLot(); + ps.nxt.pubs = Array.from( + keys.signers, + (signer: Signer) => signer.verfer.qb64 + ); + ps.nxt.ridx = ridx; + ps.nxt.kidx = kidx; + ps.nxt.dt = dt; if (!this.ks.pinSits(pre, ps)) { - throw new Error(`Problem updating pubsit db for pre=${pre}.`) + throw new Error(`Problem updating pubsit db for pre=${pre}.`); } - if (this.encrypter != undefined) { // Only store encrypted keys if we have an encrypter, otherwise regenerate + if (this.encrypter != undefined) { + // Only store encrypted keys if we have an encrypter, otherwise regenerate keys.signers.forEach((signer: Signer) => { - this.ks.putPris(signer.verfer.qb64, signer, this.encrypter!) - }) + this.ks.putPris(signer.verfer.qb64, signer, this.encrypter!); + }); } else if (this._encrypter == undefined && keys.paths != undefined) { keys.paths.forEach((path: string, idx: number) => { - let signer = keys.signers[idx] - let ppt = new PubPath() - ppt.path = path - ppt.tier = pp!.tier - ppt.temp = temp - this.ks.putPths(signer.verfer.qb64, ppt) - }) + let signer = keys.signers[idx]; + let ppt = new PubPath(); + ppt.path = path; + ppt.tier = pp!.tier; + ppt.temp = temp; + this.ks.putPths(signer.verfer.qb64, ppt); + }); } else { - throw new Error("invalid configuration, randy keys without encryption") + throw new Error( + 'invalid configuration, randy keys without encryption' + ); } - let newPs = new PubSet() - newPs.pubs = ps.nxt.pubs - this.ks.putPubs(riKey(pre, ps.nxt.ridx), newPs) + let newPs = new PubSet(); + newPs.pubs = ps.nxt.pubs; + this.ks.putPubs(riKey(pre, ps.nxt.ridx), newPs); if (erase) { old.pubs.forEach((pub) => { - this.ks.remPris(pub) - }) + this.ks.remPris(pub); + }); } - return [verfers, digers] + return [verfers, digers]; } - sign({ser, pubs=undefined, verfers=undefined, indexed=true, indices=undefined, ondices=undefined}: SignArgs) { - let signers = new Array() + sign({ + ser, + pubs = undefined, + verfers = undefined, + indexed = true, + indices = undefined, + ondices = undefined, + }: SignArgs) { + let signers = new Array(); if (pubs == undefined && verfers == undefined) { - throw new Error("pubs or verfers required") + throw new Error('pubs or verfers required'); } if (pubs != undefined) { if (this.aeid != undefined && this.decrypter == undefined) { - throw new Error("Unauthorized decryption attempt. Aeid but no decrypter.") + throw new Error( + 'Unauthorized decryption attempt. Aeid but no decrypter.' + ); } pubs.forEach((pub) => { //If no decrypter then get SaltyState and regenerate prikey if (this.decrypter != undefined) { - let signer = this.ks.getPris(pub, this.decrypter) + let signer = this.ks.getPris(pub, this.decrypter); if (signer == undefined) { - throw new Error(`Missing prikey in db for pubkey=${pub}`) + throw new Error( + `Missing prikey in db for pubkey=${pub}` + ); } - signers.push(signer) + signers.push(signer); } else { - let verfer = new Verfer({qb64: pub}) - let ppt = this.ks.getPths(pub) + let verfer = new Verfer({ qb64: pub }); + let ppt = this.ks.getPths(pub); if (ppt == undefined) { - throw new Error(`Missing prikey in db for pubkey=${pub}`) + throw new Error( + `Missing prikey in db for pubkey=${pub}` + ); } - let salter = new Salter({qb64: this.salt}) - signers.push(salter.signer(ppt.code, verfer.transferable, ppt.path, ppt.tier as Tier, ppt.temp)) + let salter = new Salter({ qb64: this.salt }); + signers.push( + salter.signer( + ppt.code, + verfer.transferable, + ppt.path, + ppt.tier as Tier, + ppt.temp + ) + ); } - }) + }); } else { verfers!.forEach((verfer: Verfer) => { if (this.decrypter != undefined) { - let signer = this.ks.getPris(verfer.qb64, this.decrypter) + let signer = this.ks.getPris(verfer.qb64, this.decrypter); if (signer == undefined) { - throw new Error(`Missing prikey in db for pubkey=${verfer.qb64}`) + throw new Error( + `Missing prikey in db for pubkey=${verfer.qb64}` + ); } - signers.push(signer) + signers.push(signer); } else { - let ppt = this.ks.getPths(verfer.qb64) + let ppt = this.ks.getPths(verfer.qb64); if (ppt == undefined) { - throw new Error(`Missing prikey in db for pubkey=${verfer.qb64}`) + throw new Error( + `Missing prikey in db for pubkey=${verfer.qb64}` + ); } - let salter = new Salter({qb64: this.salt}) - signers.push(salter.signer(ppt.code, verfer.transferable, ppt.path, ppt.tier as Tier, ppt.temp)) + let salter = new Salter({ qb64: this.salt }); + signers.push( + salter.signer( + ppt.code, + verfer.transferable, + ppt.path, + ppt.tier as Tier, + ppt.temp + ) + ); } - }) + }); } if (indices != undefined && indices.length != signers.length) { - throw new Error(`Mismatch indices length=${indices.length} and resultant signers length=${signers.length}`) + throw new Error( + `Mismatch indices length=${indices.length} and resultant signers length=${signers.length}` + ); } if (ondices != undefined && ondices.length != signers.length) { - throw new Error(`Mismatch ondices length=${ondices.length} and resultant signers length=${signers.length}`) + throw new Error( + `Mismatch ondices length=${ondices.length} and resultant signers length=${signers.length}` + ); } if (indexed) { - let sigers = new Array() + let sigers = new Array(); signers.forEach((signer, idx) => { - let i + let i; if (indices != undefined) { - i = indices[idx] + i = indices[idx]; if (i < 0) { - throw new Error(`Invalid signing index = ${i}, not whole number.`) + throw new Error( + `Invalid signing index = ${i}, not whole number.` + ); } } else { - i = idx + i = idx; } - let o + let o; if (ondices != undefined) { - o = ondices[idx] + o = ondices[idx]; if (o <= 0) { - throw new Error(`Invalid other signing index = {o}, not None or not whole number.`) + throw new Error( + `Invalid other signing index = {o}, not None or not whole number.` + ); } } else { - o = i + o = i; } - let only = o == undefined - sigers.push(signer.sign(ser, i, only, o) as Siger) - }) - return sigers + let only = o == undefined; + sigers.push(signer.sign(ser, i, only, o) as Siger); + }); + return sigers; } else { - let cigars = new Array() + let cigars = new Array(); signers.forEach((signer: Signer) => { - cigars.push(signer.sign(ser) as Cigar) - }) + cigars.push(signer.sign(ser) as Cigar); + }); - return cigars + return cigars; } } } export function riKey(pre: string, ridx: number) { - return pre + "." + ridx.toString(16).padStart(32, '0') - + return pre + '.' + ridx.toString(16).padStart(32, '0'); } - export interface KeyStore { - getGbls(key: string): string | undefined - pinGbls(key: string, val: string): void - - prmsElements(): Array<[string, PrePrm]> - getPrms(keys: string) :PrePrm | undefined - pinPrms(keys: string, data: PrePrm): void - putPrms(keys: string, data: PrePrm): boolean - remPrms(keys: string): boolean - - prisElements(decrypter: Decrypter): Array<[string, Signer]> - getPris(keys: string, decrypter: Decrypter): Signer | undefined - pinPris(keys: string, data: Signer, encrypter: Encrypter): void - putPris(pubKey: string, signer: Signer, encrypter: Encrypter): boolean - remPris(pubKey: string): void - - getPths(pubKey: string): PubPath | undefined - putPths(pubKey: string, val: PubPath): boolean - pinPths(pubKey: string, val: PubPath): boolean - - getPres(pre: string): Uint8Array | undefined - putPres(pre: string, val: Uint8Array): boolean - pinPres(pre: string, val: Uint8Array): boolean - - getSits(keys: string) :PreSit | undefined - putSits(pre: string, val: PreSit): boolean - pinSits(pre: string, val: PreSit): boolean - remSits(keys: string): boolean - - getPubs(keys: string): PubSet | undefined - putPubs(keys: string, data: PubSet): boolean + getGbls(key: string): string | undefined; + pinGbls(key: string, val: string): void; + + prmsElements(): Array<[string, PrePrm]>; + getPrms(keys: string): PrePrm | undefined; + pinPrms(keys: string, data: PrePrm): void; + putPrms(keys: string, data: PrePrm): boolean; + remPrms(keys: string): boolean; + + prisElements(decrypter: Decrypter): Array<[string, Signer]>; + getPris(keys: string, decrypter: Decrypter): Signer | undefined; + pinPris(keys: string, data: Signer, encrypter: Encrypter): void; + putPris(pubKey: string, signer: Signer, encrypter: Encrypter): boolean; + remPris(pubKey: string): void; + + getPths(pubKey: string): PubPath | undefined; + putPths(pubKey: string, val: PubPath): boolean; + pinPths(pubKey: string, val: PubPath): boolean; + + getPres(pre: string): Uint8Array | undefined; + putPres(pre: string, val: Uint8Array): boolean; + pinPres(pre: string, val: Uint8Array): boolean; + + getSits(keys: string): PreSit | undefined; + putSits(pre: string, val: PreSit): boolean; + pinSits(pre: string, val: PreSit): boolean; + remSits(keys: string): boolean; + + getPubs(keys: string): PubSet | undefined; + putPubs(keys: string, data: PubSet): boolean; } /* @@ -854,169 +1021,166 @@ export interface KeyStore { */ class Keeper implements KeyStore { - private readonly _gbls: Map - private readonly _pris: Map - private readonly _pths: Map - private readonly _pres: Map - private readonly _prms: Map - private readonly _sits: Map - private readonly _pubs: Map + private readonly _gbls: Map; + private readonly _pris: Map; + private readonly _pths: Map; + private readonly _pres: Map; + private readonly _prms: Map; + private readonly _sits: Map; + private readonly _pubs: Map; constructor() { - this._gbls = new Map() - this._pris = new Map() - this._pths = new Map() - this._pres = new Map() - this._prms = new Map() - this._sits = new Map() - this._pubs = new Map() - + this._gbls = new Map(); + this._pris = new Map(); + this._pths = new Map(); + this._pres = new Map(); + this._prms = new Map(); + this._sits = new Map(); + this._pubs = new Map(); } getGbls(key: string): string | undefined { - return this._gbls.get(key) + return this._gbls.get(key); } pinGbls(key: string, val: string): void { - this._gbls.set(key, val) + this._gbls.set(key, val); } prmsElements(): Array<[string, PrePrm]> { - let out = new Array<[string, PrePrm]>() + let out = new Array<[string, PrePrm]>(); this._prms.forEach((value, key) => { - out.push([key, value]) - }) + out.push([key, value]); + }); - return out + return out; } getPrms(keys: string): PrePrm | undefined { - return this._prms.get(keys) + return this._prms.get(keys); } pinPrms(keys: string, data: PrePrm): void { - this._prms.set(keys, data) + this._prms.set(keys, data); } putPrms(keys: string, data: PrePrm): boolean { if (this._prms.has(keys)) { - return false + return false; } - this._prms.set(keys, data) - return true + this._prms.set(keys, data); + return true; } remPrms(keys: string): boolean { - return this._prms.delete(keys) + return this._prms.delete(keys); } prisElements(decrypter: Decrypter): Array<[string, Signer]> { - let out = new Array<[string, Signer]>() + let out = new Array<[string, Signer]>(); this._pris.forEach(function (val, pubKey) { - let verfer = new Verfer({qb64: pubKey}) - let signer = decrypter.decrypt(val, null, verfer.transferable) - out.push([pubKey, signer]) - }) - return out + let verfer = new Verfer({ qb64: pubKey }); + let signer = decrypter.decrypt(val, null, verfer.transferable); + out.push([pubKey, signer]); + }); + return out; } pinPris(pubKey: string, signer: Signer, encrypter: Encrypter): void { - let cipher = encrypter.encrypt(null, signer) - this._pris.set(pubKey, cipher.qb64b) + let cipher = encrypter.encrypt(null, signer); + this._pris.set(pubKey, cipher.qb64b); } putPris(pubKey: string, signer: Signer, encrypter: Encrypter): boolean { if (this._pris.has(pubKey)) { - return false + return false; } - let cipher = encrypter.encrypt(null, signer) - this._pris.set(pubKey, cipher.qb64b) - return true + let cipher = encrypter.encrypt(null, signer); + this._pris.set(pubKey, cipher.qb64b); + return true; } getPris(pubKey: string, decrypter: Decrypter): Signer | undefined { - let val = this._pris.get(pubKey) + let val = this._pris.get(pubKey); if (val == undefined) { - return undefined + return undefined; } - let verfer = new Verfer({qb64: pubKey}) + let verfer = new Verfer({ qb64: pubKey }); - - return decrypter.decrypt(val, null, verfer.transferable) + return decrypter.decrypt(val, null, verfer.transferable); } pinPths(pubKey: string, val: PubPath): boolean { - this._pths.set(pubKey, val) - return true + this._pths.set(pubKey, val); + return true; } putPths(pubKey: string, val: PubPath): boolean { if (this._pths.has(pubKey)) { - return false + return false; } - this._pths.set(pubKey, val) - return true - + this._pths.set(pubKey, val); + return true; } getPths(pubKey: string): PubPath | undefined { - return this._pths.get(pubKey) + return this._pths.get(pubKey); } remPris(pubKey: string): void { - this._pris.delete(pubKey) + this._pris.delete(pubKey); } getPres(pre: string): Uint8Array | undefined { - return this._pres.get(pre) + return this._pres.get(pre); } pinPres(pre: string, val: Uint8Array): boolean { - this._pres.set(pre, val) - return true + this._pres.set(pre, val); + return true; } putPres(pre: string, val: Uint8Array): boolean { if (this._pres.has(pre)) { - return false + return false; } - this._pres.set(pre, val) - return true + this._pres.set(pre, val); + return true; } getSits(keys: string): PreSit | undefined { - return this._sits.get(keys) + return this._sits.get(keys); } putSits(pre: string, val: PreSit): boolean { if (this._sits.has(pre)) { - return false + return false; } - this._sits.set(pre, val) - return true + this._sits.set(pre, val); + return true; } pinSits(pre: string, val: PreSit): boolean { - this._sits.set(pre, val) - return true + this._sits.set(pre, val); + return true; } remSits(keys: string): boolean { - return this._sits.delete(keys) + return this._sits.delete(keys); } getPubs(keys: string): PubSet | undefined { - return this._pubs.get(keys) + return this._pubs.get(keys); } putPubs(keys: string, data: PubSet): boolean { if (this._pubs.has(keys)) { - return false + return false; } - this._pubs.set(keys, data) - return true + this._pubs.set(keys, data); + return true; } -} \ No newline at end of file +} diff --git a/src/keri/core/matter.ts b/src/keri/core/matter.ts index bd3f817d..e7e3afe4 100644 --- a/src/keri/core/matter.ts +++ b/src/keri/core/matter.ts @@ -1,108 +1,106 @@ -import {EmptyMaterialError} from "./kering"; +import { EmptyMaterialError } from './kering'; -import {intToB64, readInt} from './core'; -import Base64 from "urlsafe-base64" -import {b, d} from "./core"; +import { intToB64, readInt } from './core'; +import Base64 from 'urlsafe-base64'; +import { b, d } from './core'; import { Buffer } from 'buffer'; export class Codex { has(prop: string): boolean { - let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])) - return m.has(prop) + let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + return m.has(prop); } } export class MatterCodex extends Codex { - Ed25519_Seed: string = 'A' // Ed25519 256 bit random seed for private key - Ed25519N: string = 'B' // Ed25519 verification key non-transferable, basic derivation. - X25519: string = 'C' // X25519 public encryption key, converted from Ed25519 or Ed25519N. - Ed25519: string = 'D' // Ed25519 verification key basic derivation - Blake3_256: string = 'E' // Blake3 256 bit digest self-addressing derivation. - SHA3_256: string = 'H' // SHA3 256 bit digest self-addressing derivation. - SHA2_256: string = 'I' // SHA2 256 bit digest self-addressing derivation. - ECDSA_256k1_Seed: string = 'J' // ECDSA secp256k1 256 bit random Seed for private key - X25519_Private: string = 'O' // X25519 private decryption key converted from Ed25519 - X25519_Cipher_Seed: string = 'P' // X25519 124 char b64 Cipher of 44 char qb64 Seed - ECDSA_256r1_Seed: string = 'Q' // ECDSA secp256r1 256 bit random Seed for private key - Salt_128: string = '0A' // 128 bit random salt or 128 bit number (see Huge) - Ed25519_Sig: string = '0B' // Ed25519 signature. - ECDSA_256k1_Sig: string = '0C' // ECDSA secp256k1 signature. - ECDSA_256r1_Sig: string = '0I' // ECDSA secp256r1 signature. - StrB64_L0: string = '4A' // String Base64 Only Lead Size 0 - StrB64_L1: string = '5A' // String Base64 Only Lead Size 1 - StrB64_L2: string = '6A' // String Base64 Only Lead Size 2 - ECDSA_256k1N: string = '1AAA' // ECDSA secp256k1 verification key non-transferable, basic derivation. - ECDSA_256k1: string = '1AAB' // ECDSA public verification or encryption key, basic derivation - X25519_Cipher_Salt: string = '1AAH' // X25519 100 char b64 Cipher of 24 char qb64 Salt - ECDSA_256r1N: string = '1AAI' // ECDSA secp256r1 verification key non-transferable, basic derivation. - ECDSA_256r1: string = '1AAJ' // ECDSA secp256r1 verification or encryption key, basic derivation - StrB64_Big_L0: string = '7AAA' // String Base64 Only Big Lead Size 0 - StrB64_Big_L1: string = '8AAA' // String Base64 Only Big Lead Size 1 - StrB64_Big_L2: string = '9AAA' // String Base64 Only Big Lead Size 2 + Ed25519_Seed: string = 'A'; // Ed25519 256 bit random seed for private key + Ed25519N: string = 'B'; // Ed25519 verification key non-transferable, basic derivation. + X25519: string = 'C'; // X25519 public encryption key, converted from Ed25519 or Ed25519N. + Ed25519: string = 'D'; // Ed25519 verification key basic derivation + Blake3_256: string = 'E'; // Blake3 256 bit digest self-addressing derivation. + SHA3_256: string = 'H'; // SHA3 256 bit digest self-addressing derivation. + SHA2_256: string = 'I'; // SHA2 256 bit digest self-addressing derivation. + ECDSA_256k1_Seed: string = 'J'; // ECDSA secp256k1 256 bit random Seed for private key + X25519_Private: string = 'O'; // X25519 private decryption key converted from Ed25519 + X25519_Cipher_Seed: string = 'P'; // X25519 124 char b64 Cipher of 44 char qb64 Seed + ECDSA_256r1_Seed: string = 'Q'; // ECDSA secp256r1 256 bit random Seed for private key + Salt_128: string = '0A'; // 128 bit random salt or 128 bit number (see Huge) + Ed25519_Sig: string = '0B'; // Ed25519 signature. + ECDSA_256k1_Sig: string = '0C'; // ECDSA secp256k1 signature. + ECDSA_256r1_Sig: string = '0I'; // ECDSA secp256r1 signature. + StrB64_L0: string = '4A'; // String Base64 Only Lead Size 0 + StrB64_L1: string = '5A'; // String Base64 Only Lead Size 1 + StrB64_L2: string = '6A'; // String Base64 Only Lead Size 2 + ECDSA_256k1N: string = '1AAA'; // ECDSA secp256k1 verification key non-transferable, basic derivation. + ECDSA_256k1: string = '1AAB'; // ECDSA public verification or encryption key, basic derivation + X25519_Cipher_Salt: string = '1AAH'; // X25519 100 char b64 Cipher of 24 char qb64 Salt + ECDSA_256r1N: string = '1AAI'; // ECDSA secp256r1 verification key non-transferable, basic derivation. + ECDSA_256r1: string = '1AAJ'; // ECDSA secp256r1 verification or encryption key, basic derivation + StrB64_Big_L0: string = '7AAA'; // String Base64 Only Big Lead Size 0 + StrB64_Big_L1: string = '8AAA'; // String Base64 Only Big Lead Size 1 + StrB64_Big_L2: string = '9AAA'; // String Base64 Only Big Lead Size 2 } -export const MtrDex = new MatterCodex() - +export const MtrDex = new MatterCodex(); export class NonTransCodex extends Codex { - Ed25519N: string = 'B' // Ed25519 verification key non-transferable, basic derivation. - ECDSA_256k1N: string = '1AAA' // ECDSA secp256k1 verification key non-transferable, basic derivation. - Ed448N: string = '1AAC' // Ed448 non-transferable prefix public signing verification key. Basic derivation. - ECDSA_256r1N: string = '1AAI' // ECDSA secp256r1 verification key non-transferable, basic derivation. + Ed25519N: string = 'B'; // Ed25519 verification key non-transferable, basic derivation. + ECDSA_256k1N: string = '1AAA'; // ECDSA secp256k1 verification key non-transferable, basic derivation. + Ed448N: string = '1AAC'; // Ed448 non-transferable prefix public signing verification key. Basic derivation. + ECDSA_256r1N: string = '1AAI'; // ECDSA secp256r1 verification key non-transferable, basic derivation. } -export const NonTransDex = new NonTransCodex() - +export const NonTransDex = new NonTransCodex(); export class DigiCodex extends Codex { - Blake3_256: string = 'E' // Blake3 256 bit digest self-addressing derivation. - Blake2b_256: string = 'F' // Blake2b 256 bit digest self-addressing derivation. - Blake2s_256: string = 'G' // Blake2s 256 bit digest self-addressing derivation. - SHA3_256: string = 'H' // SHA3 256 bit digest self-addressing derivation. - SHA2_256: string = 'I' // SHA2 256 bit digest self-addressing derivation. - Blake3_512: string = '0D' // Blake3 512 bit digest self-addressing derivation. - Blake2b_512: string = '0E' // Blake2b 512 bit digest self-addressing derivation. - SHA3_512: string = '0F' // SHA3 512 bit digest self-addressing derivation. - SHA2_512: string = '0G' // SHA2 512 bit digest self-addressing derivation. + Blake3_256: string = 'E'; // Blake3 256 bit digest self-addressing derivation. + Blake2b_256: string = 'F'; // Blake2b 256 bit digest self-addressing derivation. + Blake2s_256: string = 'G'; // Blake2s 256 bit digest self-addressing derivation. + SHA3_256: string = 'H'; // SHA3 256 bit digest self-addressing derivation. + SHA2_256: string = 'I'; // SHA2 256 bit digest self-addressing derivation. + Blake3_512: string = '0D'; // Blake3 512 bit digest self-addressing derivation. + Blake2b_512: string = '0E'; // Blake2b 512 bit digest self-addressing derivation. + SHA3_512: string = '0F'; // SHA3 512 bit digest self-addressing derivation. + SHA2_512: string = '0G'; // SHA2 512 bit digest self-addressing derivation. } -export const DigiDex = new DigiCodex() +export const DigiDex = new DigiCodex(); export class NumCodex extends Codex { - Short: string = 'M' // Short 2 byte b2 number - Long: string = '0H' // Long 4 byte b2 number - Big: string = 'N' // Big 8 byte b2 number - Huge: string = '0A' // Huge 16 byte b2 number (same as Salt_128) + Short: string = 'M'; // Short 2 byte b2 number + Long: string = '0H'; // Long 4 byte b2 number + Big: string = 'N'; // Big 8 byte b2 number + Huge: string = '0A'; // Huge 16 byte b2 number (same as Salt_128) } -export const NumDex = new NumCodex() +export const NumDex = new NumCodex(); export class BexCodex extends Codex { - StrB64_L0: string = '4A' // String Base64 Only Leader Size 0 - StrB64_L1: string = '5A' // String Base64 Only Leader Size 1 - StrB64_L2: string = '6A' // String Base64 Only Leader Size 2 - StrB64_Big_L0: string = '7AAA' // String Base64 Only Big Leader Size 0 - StrB64_Big_L1: string = '8AAA' // String Base64 Only Big Leader Size 1 - StrB64_Big_L2: string = '9AAA' // String Base64 Only Big Leader Size 2 + StrB64_L0: string = '4A'; // String Base64 Only Leader Size 0 + StrB64_L1: string = '5A'; // String Base64 Only Leader Size 1 + StrB64_L2: string = '6A'; // String Base64 Only Leader Size 2 + StrB64_Big_L0: string = '7AAA'; // String Base64 Only Big Leader Size 0 + StrB64_Big_L1: string = '8AAA'; // String Base64 Only Big Leader Size 1 + StrB64_Big_L2: string = '9AAA'; // String Base64 Only Big Leader Size 2 } -export const BexDex = new BexCodex() +export const BexDex = new BexCodex(); class SmallVarRawSizeCodex extends Codex { - Lead0: string = '4' // First Selector Character for all ls == 0 codes - Lead1: string = '5' // First Selector Character for all ls == 1 codes - Lead2: string = '6' // First Selector Character for all ls == 2 codes + Lead0: string = '4'; // First Selector Character for all ls == 0 codes + Lead1: string = '5'; // First Selector Character for all ls == 1 codes + Lead2: string = '6'; // First Selector Character for all ls == 2 codes } -export const SmallVrzDex = new SmallVarRawSizeCodex() +export const SmallVrzDex = new SmallVarRawSizeCodex(); class LargeVarRawSizeCodex extends Codex { - Lead0_Big: string = '7' // First Selector Character for all ls == 0 codes - Lead1_Big: string = '8' // First Selector Character for all ls == 1 codes - Lead2_Big: string = '9' // First Selector Character for all ls == 2 codes + Lead0_Big: string = '7'; // First Selector Character for all ls == 0 codes + Lead1_Big: string = '8'; // First Selector Character for all ls == 1 codes + Lead2_Big: string = '9'; // First Selector Character for all ls == 2 codes } -export const LargeVrzDex = new LargeVarRawSizeCodex() +export const LargeVrzDex = new LargeVarRawSizeCodex(); export class Sizage { public hs: number; @@ -119,148 +117,221 @@ export class Sizage { } export interface MatterArgs { - raw?: Uint8Array | undefined - code?: string - qb64b?: Uint8Array | undefined - qb64?: string - qb2?: Uint8Array | undefined - rize?: number + raw?: Uint8Array | undefined; + code?: string; + qb64b?: Uint8Array | undefined; + qb64?: string; + qb2?: Uint8Array | undefined; + rize?: number; } export class Matter { - - static Sizes = new Map(Object.entries({ - 'A': new Sizage(1, 0, 44, 0), - 'B': new Sizage(1, 0, 44, 0), - 'C': new Sizage(1, 0, 44, 0), - 'D': new Sizage(1, 0, 44, 0), - 'E': new Sizage(1, 0, 44, 0), - 'F': new Sizage(1, 0, 44, 0), - 'G': new Sizage(1, 0, 44, 0), - 'H': new Sizage(1, 0, 44, 0), - 'I': new Sizage(1, 0, 44, 0), - 'J': new Sizage(1, 0, 44, 0), - 'K': new Sizage(1, 0, 76, 0), - 'L': new Sizage(1, 0, 76, 0), - 'M': new Sizage(1, 0, 4, 0), - 'N': new Sizage(1, 0, 12, 0), - 'O': new Sizage(1, 0, 44, 0), - 'P': new Sizage(1, 0, 124, 0), - 'Q': new Sizage(1, 0, 44, 0), - '0A': new Sizage(2, 0, 24, 0), - '0B': new Sizage(2, 0, 88, 0), - '0C': new Sizage(2, 0, 88, 0), - '0D': new Sizage(2, 0, 88, 0), - '0E': new Sizage(2, 0, 88, 0), - '0F': new Sizage(2, 0, 88, 0), - '0G': new Sizage(2, 0, 88, 0), - '0H': new Sizage(2, 0, 8, 0), - '0I': new Sizage(2, 0, 88, 0), - '1AAA': new Sizage(4, 0, 48, 0), - '1AAB': new Sizage(4, 0, 48, 0), - '1AAC': new Sizage(4, 0, 80, 0), - '1AAD': new Sizage(4, 0, 80, 0), - '1AAE': new Sizage(4, 0, 56, 0), - '1AAF': new Sizage(4, 0, 8, 0), - '1AAG': new Sizage(4, 0, 36, 0), - '1AAH': new Sizage(4, 0, 100, 0), - '1AAI': new Sizage(4, 0, 48, 0), - '1AAJ': new Sizage(4, 0, 48, 0), - '2AAA': new Sizage(4, 0, 8, 1), - '3AAA': new Sizage(4, 0, 8, 2), - '4A': new Sizage(2, 2, undefined, 0), - '5A': new Sizage(2, 2, undefined, 1), - '6A': new Sizage(2, 2, undefined, 2), - '7AAA': new Sizage(4, 4, undefined, 0), - '8AAA': new Sizage(4, 4, undefined, 1), - '9AAA': new Sizage(4, 4, undefined, 2), - '4B': new Sizage(2, 2, undefined, 0), - '5B': new Sizage(2, 2, undefined, 1), - '6B': new Sizage(2, 2, undefined, 2), - '7AAB': new Sizage(4, 4, undefined, 0), - '8AAB': new Sizage(4, 4, undefined, 1), - '9AAB': new Sizage(4, 4, undefined, 2), - })); - - static Hards = new Map([['A', 1], ['B', 1], ['C', 1], ['D', 1], ['E', 1], ['F', 1], ['G', 1], - ['H', 1], ['I', 1], ['J', 1], ['K', 1], ['L', 1], ['M', 1], ['N', 1], ['O', 1], ['P', 1], ['Q', 1], ['R', 1], - ['S', 1], ['T', 1], ['U', 1], ['V', 1], ['W', 1], ['X', 1], ['Y', 1], ['Z', 1], ['a', 1], ['b', 1], ['c', 1], - ['d', 1], ['e', 1], ['f', 1], ['g', 1], ['h', 1], ['i', 1], ['j', 1], ['k', 1], ['l', 1], ['m', 1], ['n', 1], - ['o', 1], ['p', 1], ['q', 1], ['r', 1], ['s', 1], ['t', 1], ['u', 1], ['v', 1], ['w', 1], ['x', 1], ['y', 1], - ['z', 1], ['0', 2], ['1', 4], ['2', 4], ['3', 4], ['4', 2], ['5', 2], ['6', 2], ['7', 4], ['8', 4], ['9', 4]]) - - - private _code: string = ""; + static Sizes = new Map( + Object.entries({ + A: new Sizage(1, 0, 44, 0), + B: new Sizage(1, 0, 44, 0), + C: new Sizage(1, 0, 44, 0), + D: new Sizage(1, 0, 44, 0), + E: new Sizage(1, 0, 44, 0), + F: new Sizage(1, 0, 44, 0), + G: new Sizage(1, 0, 44, 0), + H: new Sizage(1, 0, 44, 0), + I: new Sizage(1, 0, 44, 0), + J: new Sizage(1, 0, 44, 0), + K: new Sizage(1, 0, 76, 0), + L: new Sizage(1, 0, 76, 0), + M: new Sizage(1, 0, 4, 0), + N: new Sizage(1, 0, 12, 0), + O: new Sizage(1, 0, 44, 0), + P: new Sizage(1, 0, 124, 0), + Q: new Sizage(1, 0, 44, 0), + '0A': new Sizage(2, 0, 24, 0), + '0B': new Sizage(2, 0, 88, 0), + '0C': new Sizage(2, 0, 88, 0), + '0D': new Sizage(2, 0, 88, 0), + '0E': new Sizage(2, 0, 88, 0), + '0F': new Sizage(2, 0, 88, 0), + '0G': new Sizage(2, 0, 88, 0), + '0H': new Sizage(2, 0, 8, 0), + '0I': new Sizage(2, 0, 88, 0), + '1AAA': new Sizage(4, 0, 48, 0), + '1AAB': new Sizage(4, 0, 48, 0), + '1AAC': new Sizage(4, 0, 80, 0), + '1AAD': new Sizage(4, 0, 80, 0), + '1AAE': new Sizage(4, 0, 56, 0), + '1AAF': new Sizage(4, 0, 8, 0), + '1AAG': new Sizage(4, 0, 36, 0), + '1AAH': new Sizage(4, 0, 100, 0), + '1AAI': new Sizage(4, 0, 48, 0), + '1AAJ': new Sizage(4, 0, 48, 0), + '2AAA': new Sizage(4, 0, 8, 1), + '3AAA': new Sizage(4, 0, 8, 2), + '4A': new Sizage(2, 2, undefined, 0), + '5A': new Sizage(2, 2, undefined, 1), + '6A': new Sizage(2, 2, undefined, 2), + '7AAA': new Sizage(4, 4, undefined, 0), + '8AAA': new Sizage(4, 4, undefined, 1), + '9AAA': new Sizage(4, 4, undefined, 2), + '4B': new Sizage(2, 2, undefined, 0), + '5B': new Sizage(2, 2, undefined, 1), + '6B': new Sizage(2, 2, undefined, 2), + '7AAB': new Sizage(4, 4, undefined, 0), + '8AAB': new Sizage(4, 4, undefined, 1), + '9AAB': new Sizage(4, 4, undefined, 2), + }) + ); + + static Hards = new Map([ + ['A', 1], + ['B', 1], + ['C', 1], + ['D', 1], + ['E', 1], + ['F', 1], + ['G', 1], + ['H', 1], + ['I', 1], + ['J', 1], + ['K', 1], + ['L', 1], + ['M', 1], + ['N', 1], + ['O', 1], + ['P', 1], + ['Q', 1], + ['R', 1], + ['S', 1], + ['T', 1], + ['U', 1], + ['V', 1], + ['W', 1], + ['X', 1], + ['Y', 1], + ['Z', 1], + ['a', 1], + ['b', 1], + ['c', 1], + ['d', 1], + ['e', 1], + ['f', 1], + ['g', 1], + ['h', 1], + ['i', 1], + ['j', 1], + ['k', 1], + ['l', 1], + ['m', 1], + ['n', 1], + ['o', 1], + ['p', 1], + ['q', 1], + ['r', 1], + ['s', 1], + ['t', 1], + ['u', 1], + ['v', 1], + ['w', 1], + ['x', 1], + ['y', 1], + ['z', 1], + ['0', 2], + ['1', 4], + ['2', 4], + ['3', 4], + ['4', 2], + ['5', 2], + ['6', 2], + ['7', 4], + ['8', 4], + ['9', 4], + ]); + + private _code: string = ''; private _size: number = -1; private _raw: Uint8Array = new Uint8Array(0); - constructor({raw, code = MtrDex.Ed25519N, qb64b, qb64, qb2, rize}: MatterArgs) { - - let size = -1 + constructor({ + raw, + code = MtrDex.Ed25519N, + qb64b, + qb64, + qb2, + rize, + }: MatterArgs) { + let size = -1; if (raw != undefined) { if (code.length == 0) { - throw new Error("Improper initialization need either (raw and code) or qb64b or qb64 or qb2.") + throw new Error( + 'Improper initialization need either (raw and code) or qb64b or qb64 or qb2.' + ); } - if (SmallVrzDex.has(code[0]) || LargeVrzDex.has(code[0])) { if (rize !== undefined) { if (rize < 0) - throw new Error(`missing var raw size for code=${code}`) + throw new Error( + `missing var raw size for code=${code}` + ); } else { - rize = raw.length + rize = raw.length; } - let ls = (3 - (rize % 3)) % 3 // calc actual lead (pad) size - size = Math.floor((rize + ls) / 3) // calculate value of size in triplets + let ls = (3 - (rize % 3)) % 3; // calc actual lead (pad) size + size = Math.floor((rize + ls) / 3); // calculate value of size in triplets if (SmallVrzDex.has(code[0])) { - if (size <= (64 ** 2 - 1)) { - let hs = 2 - let s = Object.values(SmallVrzDex)[ls] - code = `${s}${code.substring(1, hs)}` - } else if (size <= (64 ** 4 - 1)) { - let hs = 4 - let s = Object.values(LargeVrzDex)[ls] - code = `${s}${'AAAA'.substring(0, hs - 2)}${code[1]}` + if (size <= 64 ** 2 - 1) { + let hs = 2; + let s = Object.values(SmallVrzDex)[ls]; + code = `${s}${code.substring(1, hs)}`; + } else if (size <= 64 ** 4 - 1) { + let hs = 4; + let s = Object.values(LargeVrzDex)[ls]; + code = `${s}${'AAAA'.substring(0, hs - 2)}${code[1]}`; } else { - throw new Error(`Unsupported raw size for code=${code}`) + throw new Error( + `Unsupported raw size for code=${code}` + ); } } else { - if (size <= (64 ** 4 - 1)) { - let hs= 4 - let s = Object.values(LargeVrzDex)[ls] - code = `${s}${code.substring(1, hs)}` + if (size <= 64 ** 4 - 1) { + let hs = 4; + let s = Object.values(LargeVrzDex)[ls]; + code = `${s}${code.substring(1, hs)}`; } else { - throw new Error(`Unsupported raw size for code=${code}`) + throw new Error( + `Unsupported raw size for code=${code}` + ); } } } else { - let sizage = Matter.Sizes.get(code) - if (sizage!.fs == -1) { // invalid - throw new Error(`Unsupported variable size code=${code}`) + let sizage = Matter.Sizes.get(code); + if (sizage!.fs == -1) { + // invalid + throw new Error(`Unsupported variable size code=${code}`); } - rize = Matter._rawSize(code) - + rize = Matter._rawSize(code); } - raw = raw.slice(0, rize) // copy only exact size from raw stream - if (raw.length != rize) { // forbids shorter - throw new Error(`Not enougth raw bytes for code=${code} expected ${rize} got ${raw.length}.`) + raw = raw.slice(0, rize); // copy only exact size from raw stream + if (raw.length != rize) { + // forbids shorter + throw new Error( + `Not enougth raw bytes for code=${code} expected ${rize} got ${raw.length}.` + ); } - this._code = code // hard value part of code - this._size = size // soft value part of code in int - this._raw = raw // crypto ops require bytes not bytearray - + this._code = code; // hard value part of code + this._size = size; // soft value part of code in int + this._raw = raw; // crypto ops require bytes not bytearray } else if (qb64 !== undefined) { - this._exfil(qb64) + this._exfil(qb64); } else if (qb64b !== undefined) { - let qb64 = d(qb64b) - this._exfil(qb64) + let qb64 = d(qb64b); + this._exfil(qb64); } else if (qb2 !== undefined) { - this._bexfil(qb2) + this._bexfil(qb2); } else { - throw new EmptyMaterialError("EmptyMaterialError"); + throw new EmptyMaterialError('EmptyMaterialError'); } } @@ -273,7 +344,7 @@ export class Matter { } get raw(): Uint8Array { - return this._raw + return this._raw; } get qb64() { @@ -281,77 +352,82 @@ export class Matter { } get qb64b() { - return b(this.qb64) + return b(this.qb64); } get transferable(): boolean { - return !NonTransDex.has(this.code) + return !NonTransDex.has(this.code); } get digestive(): boolean { - return DigiDex.has(this.code) + return DigiDex.has(this.code); } static _rawSize(code: string) { - let sizage = this.Sizes.get(code) // get sizes - let cs = sizage!.hs + sizage!.ss // both hard + soft code size + let sizage = this.Sizes.get(code); // get sizes + let cs = sizage!.hs + sizage!.ss; // both hard + soft code size if (sizage!.fs === -1) { - throw Error(`Non-fixed raw size code ${code}.`) + throw Error(`Non-fixed raw size code ${code}.`); } - return (Math.floor((sizage!.fs! - cs) * 3 / 4)) - sizage!.ls! - + return Math.floor(((sizage!.fs! - cs) * 3) / 4) - sizage!.ls!; } static _leadSize(code: string) { let sizage = this.Sizes.get(code); - return sizage!.ls + return sizage!.ls; } get both() { let sizage = Matter.Sizes.get(this.code); - return `${this.code}${intToB64(this.size, sizage!.ss)}` + return `${this.code}${intToB64(this.size, sizage!.ss)}`; } - private _infil() { let code = this.code; - let size = this.size + let size = this.size; let raw = this.raw; - let ps = ((3 - (raw.length % 3)) % 3); // pad size chars or lead size bytes + let ps = (3 - (raw.length % 3)) % 3; // pad size chars or lead size bytes let sizage = Matter.Sizes.get(code); - if (sizage!.fs === undefined) { // Variable size code, NOT SUPPORTED - let cs = sizage!.hs + sizage!.ss + if (sizage!.fs === undefined) { + // Variable size code, NOT SUPPORTED + let cs = sizage!.hs + sizage!.ss; if (cs % 4) { - throw new Error(`Whole code size not multiple of 4 for variable length material. cs=${cs}`) + throw new Error( + `Whole code size not multiple of 4 for variable length material. cs=${cs}` + ); } - if (size < 0 || size > (64 ** sizage!.ss - 1)) { - throw new Error(`Invalid size=${size} for code=${code}.`) + if (size < 0 || size > 64 ** sizage!.ss - 1) { + throw new Error(`Invalid size=${size} for code=${code}.`); } - let both = `${code}${intToB64(size, sizage!.ss)}` + let both = `${code}${intToB64(size, sizage!.ss)}`; if (both.length % 4 !== ps - sizage!.ls!) { - throw new Error(`Invalid code=${both} for converted raw pad size=${ps}.`) + throw new Error( + `Invalid code=${both} for converted raw pad size=${ps}.` + ); } - let bytes = new Uint8Array(sizage!.ls! + raw.length) + let bytes = new Uint8Array(sizage!.ls! + raw.length); for (let i = 0; i < sizage!.ls!; i++) { bytes[i] = 0; } for (let i = 0; i < raw.length; i++) { - let odx = i + ps + let odx = i + ps; bytes[odx] = raw[i]; } - return both + Base64.encode(Buffer.from(bytes)) - + return both + Base64.encode(Buffer.from(bytes)); } else { - let both = code - let cs = both.length - if ((cs % 4) != ps - sizage!.ls!) { // adjusted pad given lead bytes - throw new Error(`Invalid code=${both} for converted raw pad size=${ps}, ${raw.length}.`); + let both = code; + let cs = both.length; + if (cs % 4 != ps - sizage!.ls!) { + // adjusted pad given lead bytes + throw new Error( + `Invalid code=${both} for converted raw pad size=${ps}, ${raw.length}.` + ); } // prepad, convert, and replace upfront // when fixed and ls != 0 then cs % 4 is zero and ps==ls @@ -361,79 +437,83 @@ export class Matter { bytes[i] = 0; } for (let i = 0; i < raw.length; i++) { - let odx = i + ps + let odx = i + ps; bytes[odx] = raw[i]; } - return both + Base64.encode(Buffer.from(bytes)).slice(cs % 4) + return both + Base64.encode(Buffer.from(bytes)).slice(cs % 4); } } private _exfil(qb64: string) { if (qb64.length == 0) { - throw new Error("Empty Material") + throw new Error('Empty Material'); } let first = qb64[0]; if (!Array.from(Matter.Hards.keys()).includes(first)) { - throw new Error(`Unexpected code ${first}`) + throw new Error(`Unexpected code ${first}`); } let hs = Matter.Hards.get(first); if (qb64.length < hs!) { - throw new Error(`Shortage Error`) + throw new Error(`Shortage Error`); } let hard = qb64.slice(0, hs); if (!Array.from(Matter.Sizes.keys()).includes(hard)) { - throw new Error(`Unsupported code ${hard}`) + throw new Error(`Unsupported code ${hard}`); } let sizage = Matter.Sizes.get(hard); let cs = sizage!.hs + sizage!.ss; let size = -1; - if (sizage!.fs == -1) { // Variable size code, Not supported - throw new Error("Variable size codes not supported yet") + if (sizage!.fs == -1) { + // Variable size code, Not supported + throw new Error('Variable size codes not supported yet'); } else { - size = sizage!.fs! + size = sizage!.fs!; } if (qb64.length < sizage!.fs!) { - throw new Error(`Need ${sizage!.fs! - qb64.length} more chars.`) + throw new Error(`Need ${sizage!.fs! - qb64.length} more chars.`); } - qb64 = qb64.slice(0, sizage!.fs) - let ps = cs % 4 - let pbs = 2 * (ps == 0 ? sizage!.ls! : ps) - let raw + qb64 = qb64.slice(0, sizage!.fs); + let ps = cs % 4; + let pbs = 2 * (ps == 0 ? sizage!.ls! : ps); + let raw; if (ps != 0) { let base = new Array(ps + 1).join('A') + qb64.slice(cs); - let paw = Base64.decode(base) // decode base to leave prepadded raw - let pi = (readInt(paw.subarray(0, ps))) // prepad as int - if (pi & (2 ** pbs - 1)) { // masked pad bits non-zero - throw new Error(`Non zeroed prepad bits = {pi & (2 ** pbs - 1 ):<06b} in {qb64b[cs:cs+1]}.`) + let paw = Base64.decode(base); // decode base to leave prepadded raw + let pi = readInt(paw.subarray(0, ps)); // prepad as int + if (pi & (2 ** pbs - 1)) { + // masked pad bits non-zero + throw new Error( + `Non zeroed prepad bits = {pi & (2 ** pbs - 1 ):<06b} in {qb64b[cs:cs+1]}.` + ); } - raw = paw.subarray(ps) // strip off ps prepad paw bytes + raw = paw.subarray(ps); // strip off ps prepad paw bytes } else { let base = qb64.slice(cs); let paw = Base64.decode(base); - let li = readInt(paw.subarray(0, sizage!.ls)) + let li = readInt(paw.subarray(0, sizage!.ls)); if (li != 0) { if (li == 1) { - throw new Error(`Non zeroed lead byte = 0x{li:02x}.`) + throw new Error(`Non zeroed lead byte = 0x{li:02x}.`); } else { - throw new Error(`Non zeroed lead bytes = 0x{li:04x}`) + throw new Error(`Non zeroed lead bytes = 0x{li:04x}`); } } - raw = paw.subarray(sizage!.ls) + raw = paw.subarray(sizage!.ls); } - this._code = hard // hard only - this._size = size - this._raw = Uint8Array.from(raw) // ensure bytes so immutable and for crypto ops + this._code = hard; // hard only + this._size = size; + this._raw = Uint8Array.from(raw); // ensure bytes so immutable and for crypto ops } private _bexfil(qb2: Uint8Array) { - throw new Error(`qb2 not yet supported: ${qb2}`) + throw new Error(`qb2 not yet supported: ${qb2}`); } } diff --git a/src/keri/core/number.ts b/src/keri/core/number.ts index dc93e8f8..082a2e14 100644 --- a/src/keri/core/number.ts +++ b/src/keri/core/number.ts @@ -1,46 +1,54 @@ -import {Matter, MatterArgs, NumDex} from "./matter"; -import {bytesToInt, intToBytes} from "./utils"; +import { Matter, MatterArgs, NumDex } from './matter'; +import { bytesToInt, intToBytes } from './utils'; export class CesrNumber extends Matter { - constructor({raw, code, qb64b, qb64, qb2}: MatterArgs, num?: number | string, numh?: string) { + constructor( + { raw, code, qb64b, qb64, qb2 }: MatterArgs, + num?: number | string, + numh?: string + ) { let _num; - if(raw == undefined && qb64 == undefined && qb64b == undefined && qb2 == undefined) { - if (typeof (num) == "number") { - _num = num + if ( + raw == undefined && + qb64 == undefined && + qb64b == undefined && + qb2 == undefined + ) { + if (typeof num == 'number') { + _num = num; } else if (numh != undefined) { - _num = parseInt(numh, 16) - } - else { - _num = 0 + _num = parseInt(numh, 16); + } else { + _num = 0; } } if (_num == undefined) { - throw new Error("Invalid whole number") + throw new Error('Invalid whole number'); } - if (_num <= (256 ** 2 - 1)) { // make short version of code + if (_num <= 256 ** 2 - 1) { + // make short version of code code = NumDex.Short; - } - else if (_num <= (256 ** 4 - 1)) { // make long version of code + } else if (_num <= 256 ** 4 - 1) { + // make long version of code code = code = NumDex.Long; - } - else if (_num <= (256 ** 8 - 1)) { // make big version of code + } else if (_num <= 256 ** 8 - 1) { + // make big version of code code = code = NumDex.Big; - } - else if (_num <= (256 ** 16 - 1)) { // make huge version of code + } else if (_num <= 256 ** 16 - 1) { + // make huge version of code code = code = NumDex.Huge; - } - else { - throw new Error("Invalid num = {num}, too large to encode."); + } else { + throw new Error('Invalid num = {num}, too large to encode.'); } raw = intToBytes(_num, Matter._rawSize(code)); - super({raw, code, qb64b, qb64, qb2}); + super({ raw, code, qb64b, qb64, qb2 }); if (!NumDex.has(this.code)) { - throw new Error("Invalid code " + code + " for Number"); + throw new Error('Invalid code ' + code + ' for Number'); } } @@ -49,10 +57,10 @@ export class CesrNumber extends Matter { } get numh(): string { - return this.num.toString(16) + return this.num.toString(16); } get positive(): boolean { - return this.num > 0 + return this.num > 0; } -} \ No newline at end of file +} diff --git a/src/keri/core/pather.ts b/src/keri/core/pather.ts index fd7c21b2..137a6d38 100644 --- a/src/keri/core/pather.ts +++ b/src/keri/core/pather.ts @@ -1,7 +1,6 @@ - -import {Bexter, Reb64} from "./bexter"; -import {MatterArgs, MtrDex} from "./matter"; -import {EmptyMaterialError} from "./kering"; +import { Bexter, Reb64 } from './bexter'; +import { MatterArgs, MtrDex } from './matter'; +import { EmptyMaterialError } from './kering'; /* Pather is a subclass of Bexter that provides SAD Path language specific functionality @@ -36,56 +35,64 @@ import {EmptyMaterialError} from "./kering"; */ export class Pather extends Bexter { - constructor({raw, code = MtrDex.StrB64_L0, qb64b, qb64, qb2}: MatterArgs, bext?: string, path?: string[]) { - if (raw === undefined && bext === undefined && qb64b === undefined && qb64 === undefined && qb2 === undefined) { + constructor( + { raw, code = MtrDex.StrB64_L0, qb64b, qb64, qb2 }: MatterArgs, + bext?: string, + path?: string[] + ) { + if ( + raw === undefined && + bext === undefined && + qb64b === undefined && + qb64 === undefined && + qb2 === undefined + ) { if (path === undefined) - throw new EmptyMaterialError("Missing bext string.") + throw new EmptyMaterialError('Missing bext string.'); - bext = Pather._bextify(path) + bext = Pather._bextify(path); } - super({raw, code, qb64b, qb64, qb2}, bext); - + super({ raw, code, qb64b, qb64, qb2 }, bext); } // TODO: implement SAD access methods like resolve, root, strip, startswith and tail get path(): string[] { - if (!this.bext.startsWith("-")) { - throw new Error("invalid SAD ptr") + if (!this.bext.startsWith('-')) { + throw new Error('invalid SAD ptr'); } - let path = this.bext - while(path.charAt(0) === '-') - { + let path = this.bext; + while (path.charAt(0) === '-') { path = path.substring(1); } - let apath = path.split("-") + let apath = path.split('-'); if (apath[0] !== '') { - return apath + return apath; } else { - return [] + return []; } } static _bextify(path: any[]): string { - let vath = [] + let vath = []; for (const p of path) { - let sp = "" - if (typeof(p) === "number") { - sp = p.toString() + let sp = ''; + if (typeof p === 'number') { + sp = p.toString(); } else { - sp = p + sp = p; } - let match = Reb64.exec(sp) + let match = Reb64.exec(sp); if (!match) { - throw new Error(`"Non Base64 path component = ${p}.`) + throw new Error(`"Non Base64 path component = ${p}.`); } - vath.push(sp) + vath.push(sp); } - return "-" + vath.join("-") + return '-' + vath.join('-'); } -} \ No newline at end of file +} diff --git a/src/keri/core/prefixer.ts b/src/keri/core/prefixer.ts index 8603c72e..97ddf5d6 100644 --- a/src/keri/core/prefixer.ts +++ b/src/keri/core/prefixer.ts @@ -1,212 +1,232 @@ -import {Matter, MatterArgs, MtrDex} from "./matter"; -import {EmptyMaterialError} from "./kering"; -import {Dict, Ilks} from "./core"; -import {sizeify} from "./serder"; -import {Verfer} from "./verfer"; +import { Matter, MatterArgs, MtrDex } from './matter'; +import { EmptyMaterialError } from './kering'; +import { Dict, Ilks } from './core'; +import { sizeify } from './serder'; +import { Verfer } from './verfer'; -import {createHash} from "blake3" - -const Dummy: string = "#" +import { createHash } from 'blake3'; +const Dummy: string = '#'; export class Prefixer extends Matter { - private readonly _derive: Function | undefined - private readonly _verify: Function | undefined + private readonly _derive: Function | undefined; + private readonly _verify: Function | undefined; - constructor({raw, code, qb64b, qb64, qb2}: MatterArgs, ked?: Dict) { + constructor({ raw, code, qb64b, qb64, qb2 }: MatterArgs, ked?: Dict) { try { - super({raw, code, qb64b, qb64, qb2}); + super({ raw, code, qb64b, qb64, qb2 }); } catch (e) { if (e instanceof EmptyMaterialError) { - if (ked == undefined || (code == undefined && !("i" in ked))) { - throw e + if (ked == undefined || (code == undefined && !('i' in ked))) { + throw e; } if (code == undefined) { - super({qb64: ked['i'], code: code}) - code = this.code + super({ qb64: ked['i'], code: code }); + code = this.code; } - let _derive + let _derive; if (code == MtrDex.Ed25519N) { - _derive = Prefixer._derive_ed25519N + _derive = Prefixer._derive_ed25519N; } else if (code == MtrDex.Ed25519) { - _derive = Prefixer._derive_ed25519 + _derive = Prefixer._derive_ed25519; } else if (code == MtrDex.Blake3_256) { - _derive = Prefixer._derive_blake3_256 + _derive = Prefixer._derive_blake3_256; } else { - throw new Error(`Unsupported code = ${code} for prefixer.`) + throw new Error(`Unsupported code = ${code} for prefixer.`); } - [raw, code] = _derive(ked) - super({raw: raw, code: code}) - this._derive = _derive + [raw, code] = _derive(ked); + super({ raw: raw, code: code }); + this._derive = _derive; } else { - throw e + throw e; } } if (this.code == MtrDex.Ed25519N) { - this._verify = this._verify_ed25519N + this._verify = this._verify_ed25519N; } else if (this.code == MtrDex.Ed25519) { - this._verify = this._verify_ed25519 + this._verify = this._verify_ed25519; } else if (this.code == MtrDex.Blake3_256) { - this._verify = this._verify_blake3_256 + this._verify = this._verify_blake3_256; } else { - throw new Error(`Unsupported code = ${code} for prefixer.`) + throw new Error(`Unsupported code = ${code} for prefixer.`); } - } derive(ked: Dict): [Uint8Array, string] { - if (ked["i"] != Ilks.icp) { - throw new Error(`Non-incepting ilk ${ked['i']} for prefix derivation`) + if (ked['i'] != Ilks.icp) { + throw new Error( + `Non-incepting ilk ${ked['i']} for prefix derivation` + ); } - return this._derive!(ked) + return this._derive!(ked); } verify(ked: Dict, prefixed: boolean = false): boolean { - if (ked["i"] != Ilks.icp) { - throw new Error(`Non-incepting ilk ${ked['i']} for prefix derivation`) + if (ked['i'] != Ilks.icp) { + throw new Error( + `Non-incepting ilk ${ked['i']} for prefix derivation` + ); } - return this._verify!(ked, this.qb64, prefixed) + return this._verify!(ked, this.qb64, prefixed); } - static _derive_ed25519N(ked: Dict): [Uint8Array, string] { - let verfer - let keys = ked["k"] + let verfer; + let keys = ked['k']; if (keys.length != 1) { - throw new Error(`Basic derivation needs at most 1 key got ${keys.length} keys instead`) + throw new Error( + `Basic derivation needs at most 1 key got ${keys.length} keys instead` + ); } try { - verfer = new Verfer({qb64: keys[0]}) + verfer = new Verfer({ qb64: keys[0] }); } catch (e) { - throw new Error(`Error extracting public key = ${e}`) + throw new Error(`Error extracting public key = ${e}`); } if (!(verfer.code in [MtrDex.Ed25519N])) { - throw new Error(`Mismatch derivation code = ${verfer.code}`) + throw new Error(`Mismatch derivation code = ${verfer.code}`); } - let next = 'n' in ked ? ked['n'] : [] + let next = 'n' in ked ? ked['n'] : []; if (verfer.code == MtrDex.Ed25519N && next.length > 0) { - throw new Error(`Non-empty nxt = ${next} for non-transferable code = ${verfer.code}`) + throw new Error( + `Non-empty nxt = ${next} for non-transferable code = ${verfer.code}` + ); } - let backers = 'b' in ked ? ked['b'] : [] + let backers = 'b' in ked ? ked['b'] : []; if (verfer.code == MtrDex.Ed25519N && backers.length > 0) { - throw new Error(`Non-empty b =${backers} for non-transferable code = ${verfer.code}`) + throw new Error( + `Non-empty b =${backers} for non-transferable code = ${verfer.code}` + ); } - let anchor = 'a' in ked ? ked['a'] : [] + let anchor = 'a' in ked ? ked['a'] : []; if (verfer.code == MtrDex.Ed25519N && anchor.length > 0) { - throw new Error(`Non-empty a = ${verfer.code} for non-transferable code = ${verfer.code}`) + throw new Error( + `Non-empty a = ${verfer.code} for non-transferable code = ${verfer.code}` + ); } - return [verfer.raw, verfer.code] - + return [verfer.raw, verfer.code]; } static _derive_ed25519(ked: Dict): [Uint8Array, string] { - let verfer - let keys = ked["k"] + let verfer; + let keys = ked['k']; if (keys.length != 1) { - throw new Error(`Basic derivation needs at most 1 key got ${keys.length} keys instead`) + throw new Error( + `Basic derivation needs at most 1 key got ${keys.length} keys instead` + ); } try { - verfer = new Verfer({qb64: keys[0]}) + verfer = new Verfer({ qb64: keys[0] }); } catch (e) { - throw new Error(`Error extracting public key = ${e}`) + throw new Error(`Error extracting public key = ${e}`); } if (verfer.code in [MtrDex.Ed25519]) { - throw new Error(`Mismatch derivation code = ${verfer.code}`) + throw new Error(`Mismatch derivation code = ${verfer.code}`); } - return [verfer.raw, verfer.code] + return [verfer.raw, verfer.code]; } static _derive_blake3_256(ked: Dict): [Uint8Array, string] { - let kd = ked - let ilk = ked["t"] - if (!([Ilks.icp, Ilks.dip, Ilks.vcp, Ilks.dip].includes(ilk))) { - throw new Error(`Invalid ilk = ${ilk} to derive pre.`) + let kd = ked; + let ilk = ked['t']; + if (![Ilks.icp, Ilks.dip, Ilks.vcp, Ilks.dip].includes(ilk)) { + throw new Error(`Invalid ilk = ${ilk} to derive pre.`); } - kd["i"] = "".padStart(Matter.Sizes.get(MtrDex.Blake3_256)!.fs!, Dummy) - kd["d"] = ked["i"] - let [raw] = sizeify(ked) + kd['i'] = ''.padStart(Matter.Sizes.get(MtrDex.Blake3_256)!.fs!, Dummy); + kd['d'] = ked['i']; + let [raw] = sizeify(ked); const hasher = createHash(); const dig = hasher.update(raw).digest(''); - return [dig, MtrDex.Blake3_256] + return [dig, MtrDex.Blake3_256]; } - _verify_ed25519N(ked: Dict, pre: string, prefixed: boolean = false): boolean { + _verify_ed25519N( + ked: Dict, + pre: string, + prefixed: boolean = false + ): boolean { try { - let keys = ked["k"] + let keys = ked['k']; if (keys.length != 1) { - return false + return false; } if (keys[0] != pre) { - return false + return false; } - if (prefixed && ked["i"] != pre) { - return false + if (prefixed && ked['i'] != pre) { + return false; } - let next = 'n' in ked ? ked['n'] : [] - if (next.length > 0) { // must be empty - return false + let next = 'n' in ked ? ked['n'] : []; + if (next.length > 0) { + // must be empty + return false; } } catch (e) { - return false + return false; } - return true - + return true; } - _verify_ed25519(ked: Dict, pre: string, prefixed: boolean = false): boolean { + _verify_ed25519( + ked: Dict, + pre: string, + prefixed: boolean = false + ): boolean { try { - let keys = ked["k"] + let keys = ked['k']; if (keys.length != 1) { - return false + return false; } if (keys[0] != pre) { - return false + return false; } - if (prefixed && ked["i"] != pre) { - return false + if (prefixed && ked['i'] != pre) { + return false; } } catch (e) { - return false + return false; } - return true + return true; } - _verify_blake3_256(ked: Dict, pre: string, prefixed: boolean = false): boolean { + _verify_blake3_256( + ked: Dict, + pre: string, + prefixed: boolean = false + ): boolean { try { - let [raw,] = Prefixer._derive_blake3_256(ked) - let crymat = new Matter({raw: raw, code: MtrDex.Blake3_256}) + let [raw] = Prefixer._derive_blake3_256(ked); + let crymat = new Matter({ raw: raw, code: MtrDex.Blake3_256 }); if (crymat.qb64 != pre) { - return false + return false; } - if (prefixed && ked["i"] != pre) { - return false + if (prefixed && ked['i'] != pre) { + return false; } - } catch (e) { - return false + return false; } - return true - + return true; } -} \ No newline at end of file +} diff --git a/src/keri/core/saider.ts b/src/keri/core/saider.ts index 21715731..295db7ab 100644 --- a/src/keri/core/saider.ts +++ b/src/keri/core/saider.ts @@ -1,158 +1,187 @@ -import {DigiDex, Matter, MatterArgs, MtrDex} from "./matter"; -import {deversify, Dict, Serials} from "./core"; -import {EmptyMaterialError} from "./kering"; -import {dumps, sizeify} from "./serder"; +import { DigiDex, Matter, MatterArgs, MtrDex } from './matter'; +import { deversify, Dict, Serials } from './core'; +import { EmptyMaterialError } from './kering'; +import { dumps, sizeify } from './serder'; -import {createHash} from "blake3" +import { createHash } from 'blake3'; -const Dummy = "#" +const Dummy = '#'; export enum Ids { - d = "d" + d = 'd', } class Digestage { - public klas: any = undefined - public size: number | undefined = 0 - public length: number | undefined = 0 + public klas: any = undefined; + public size: number | undefined = 0; + public length: number | undefined = 0; constructor(klas: any, size?: number, length?: number) { - this.klas = klas - this.size = size - this.length = length + this.klas = klas; + this.size = size; + this.length = length; } } - - export class Saider extends Matter { static Digests = new Map([ - [MtrDex.Blake3_256, new Digestage(Saider._derive_blake3_256, undefined, undefined)] - ]) - - constructor({raw, code, qb64b, qb64, qb2}: MatterArgs, sad?: Dict, kind?: Serials, label: string = Ids.d) { + [ + MtrDex.Blake3_256, + new Digestage(Saider._derive_blake3_256, undefined, undefined), + ], + ]); + + constructor( + { raw, code, qb64b, qb64, qb2 }: MatterArgs, + sad?: Dict, + kind?: Serials, + label: string = Ids.d + ) { try { - super({raw, code, qb64b, qb64, qb2}); + super({ raw, code, qb64b, qb64, qb2 }); } catch (e) { if (e instanceof EmptyMaterialError) { if (sad == undefined || !(label in sad)) { - throw e + throw e; } if (code == undefined) { - if (sad[label] != "") { - super({qb64: sad[label], code: code}) - code = this.code + if (sad[label] != '') { + super({ qb64: sad[label], code: code }); + code = this.code; } else { - code = MtrDex.Blake3_256 + code = MtrDex.Blake3_256; } } if (!DigiDex.has(code)) { - throw new Error(`Unsupported digest code = ${code}`) + throw new Error(`Unsupported digest code = ${code}`); } - [raw] = Saider._derive({...sad}, code, kind, label) - super({raw: raw, code: code}) + [raw] = Saider._derive({ ...sad }, code, kind, label); + super({ raw: raw, code: code }); } else { - throw e + throw e; } } if (!this.digestive) { - throw new Error(`Unsupported digest code = ${this.code}.`) + throw new Error(`Unsupported digest code = ${this.code}.`); } - } - static _derive_blake3_256(ser: Uint8Array, _digest_size: number, _length: number) { + static _derive_blake3_256( + ser: Uint8Array, + _digest_size: number, + _length: number + ) { const hasher = createHash(); return hasher.update(ser).digest(''); } - - private static _derive(sad: Dict, code: string, kind: Serials | undefined, label: string): [Uint8Array, Dict] { + private static _derive( + sad: Dict, + code: string, + kind: Serials | undefined, + label: string + ): [Uint8Array, Dict] { if (!DigiDex.has(code) || !Saider.Digests.has(code)) { - throw new Error(`Unsupported digest code = ${code}.`) + throw new Error(`Unsupported digest code = ${code}.`); } - sad = {...sad} - sad[label] = "".padStart(Matter.Sizes.get(code)!.fs!, Dummy) + sad = { ...sad }; + sad[label] = ''.padStart(Matter.Sizes.get(code)!.fs!, Dummy); if ('v' in sad) { - [, , kind, sad, ] = sizeify(sad, kind) + [, , kind, sad] = sizeify(sad, kind); } - let ser = {...sad} + let ser = { ...sad }; - let digestage = Saider.Digests.get(code) + let digestage = Saider.Digests.get(code); - let cpa = Saider._serialze(ser, kind) - let args: any[] = [] + let cpa = Saider._serialze(ser, kind); + let args: any[] = []; if (digestage!.size != undefined) { - args.push(digestage!.size) + args.push(digestage!.size); } if (digestage!.length != undefined) { - args.push(digestage!.length) + args.push(digestage!.length); } - return [digestage!.klas(cpa, ...args), sad] + return [digestage!.klas(cpa, ...args), sad]; } - public derive(sad: Dict, code: string, kind: Serials | undefined, label: string) : [Uint8Array, Dict]{ - code = code != undefined ? code : this.code - return Saider._derive(sad, code, kind, label) + public derive( + sad: Dict, + code: string, + kind: Serials | undefined, + label: string + ): [Uint8Array, Dict] { + code = code != undefined ? code : this.code; + return Saider._derive(sad, code, kind, label); } - public verify(sad: Dict, prefixed: boolean = false, versioned: boolean = false, kind?: Serials, - label: string = Ids.d): boolean { + public verify( + sad: Dict, + prefixed: boolean = false, + versioned: boolean = false, + kind?: Serials, + label: string = Ids.d + ): boolean { try { - let [raw, dsad] = Saider._derive(sad, this.code, kind, label) - let saider = new Saider({raw: raw, code: this.code}) + let [raw, dsad] = Saider._derive(sad, this.code, kind, label); + let saider = new Saider({ raw: raw, code: this.code }); if (this.qb64 != saider.qb64) { - return false + return false; } - if ("v" in sad && versioned) { - if (sad['v'] != dsad["v"]) { - return false + if ('v' in sad && versioned) { + if (sad['v'] != dsad['v']) { + return false; } } if (prefixed && sad[label] != this.qb64) { - return false + return false; } - } catch (e) { - return false + return false; } - return true + return true; } private static _serialze(sad: Dict, kind?: Serials): string { - let knd = Serials.JSON + let knd = Serials.JSON; if ('v' in sad) { - [,knd] = deversify(sad['v']) + [, knd] = deversify(sad['v']); } if (kind == undefined) { - kind = knd + kind = knd; } - return dumps(sad, kind) + return dumps(sad, kind); } - public static saidify(sad: Dict, code: string = MtrDex.Blake3_256, kind: Serials = Serials.JSON, - label: string = Ids.d): [Saider, Dict] { + public static saidify( + sad: Dict, + code: string = MtrDex.Blake3_256, + kind: Serials = Serials.JSON, + label: string = Ids.d + ): [Saider, Dict] { if (!(label in sad)) { - throw new Error(`Missing id field labeled=${label} in sad.`) + throw new Error(`Missing id field labeled=${label} in sad.`); } - let raw - [raw, sad]= Saider._derive(sad, code, kind, label) - let saider = new Saider({raw: raw, code: code}, undefined, kind, label) - sad[label] = saider.qb64 - return [saider, sad] + let raw; + [raw, sad] = Saider._derive(sad, code, kind, label); + let saider = new Saider( + { raw: raw, code: code }, + undefined, + kind, + label + ); + sad[label] = saider.qb64; + return [saider, sad]; } - - } diff --git a/src/keri/core/salter.ts b/src/keri/core/salter.ts index 5db09cb0..654c4c13 100644 --- a/src/keri/core/salter.ts +++ b/src/keri/core/salter.ts @@ -1,36 +1,47 @@ -import {Signer} from "./signer"; +import { Signer } from './signer'; import { Matter, MtrDex } from './matter'; -import { EmptyMaterialError } from './kering' -import libsodium from 'libsodium-wrappers-sumo'; +import { EmptyMaterialError } from './kering'; +import libsodium from 'libsodium-wrappers-sumo'; export enum Tier { - low = "low", - med = "med", - high = "high" + low = 'low', + med = 'med', + high = 'high', } interface SalterArgs { - raw?: Uint8Array | undefined - code? :string - tier?:Tier - qb64b? :Uint8Array | undefined - qb64?: string - qb2?: Uint8Array | undefined + raw?: Uint8Array | undefined; + code?: string; + tier?: Tier; + qb64b?: Uint8Array | undefined; + qb64?: string; + qb2?: Uint8Array | undefined; } export class Salter extends Matter { private readonly _tier: Tier | null; - constructor({raw, code = MtrDex.Salt_128, tier=Tier.low, qb64, qb64b, qb2}:SalterArgs) { + constructor({ + raw, + code = MtrDex.Salt_128, + tier = Tier.low, + qb64, + qb64b, + qb2, + }: SalterArgs) { try { - super({raw, code, qb64, qb64b, qb2}); + super({ raw, code, qb64, qb64b, qb2 }); } catch (e) { - if(e instanceof EmptyMaterialError) { + if (e instanceof EmptyMaterialError) { if (code == MtrDex.Salt_128) { - let salt = libsodium.randombytes_buf(libsodium.crypto_pwhash_SALTBYTES); - super({raw: salt, code: code}) + let salt = libsodium.randombytes_buf( + libsodium.crypto_pwhash_SALTBYTES + ); + super({ raw: salt, code: code }); } else { - throw new Error("invalid code for Salter, only Salt_128 accepted") + throw new Error( + 'invalid code for Salter, only Salt_128 accepted' + ); } } else { throw e; @@ -38,53 +49,72 @@ export class Salter extends Matter { } if (this.code != MtrDex.Salt_128) { - throw new Error("invalid code for Salter, only Salt_128 accepted") + throw new Error('invalid code for Salter, only Salt_128 accepted'); } - this._tier = tier !== null ? tier : Tier.low + this._tier = tier !== null ? tier : Tier.low; } - private stretch(size: number = 32, path: string = "", tier: Tier | null = null, temp: boolean = false): Uint8Array { + private stretch( + size: number = 32, + path: string = '', + tier: Tier | null = null, + temp: boolean = false + ): Uint8Array { tier = tier == null ? this.tier : tier; - let opslimit: number, memlimit: number + let opslimit: number, memlimit: number; // Harcoded values based on keripy if (temp) { - opslimit = 1 //libsodium.crypto_pwhash_OPSLIMIT_MIN - memlimit = 8192 //libsodium.crypto_pwhash_MEMLIMIT_MIN - + opslimit = 1; //libsodium.crypto_pwhash_OPSLIMIT_MIN + memlimit = 8192; //libsodium.crypto_pwhash_MEMLIMIT_MIN } else { switch (tier) { case Tier.low: - opslimit = 2 //libsodium.crypto_pwhash_OPSLIMIT_INTERACTIVE - memlimit = 67108864 //libsodium.crypto_pwhash_MEMLIMIT_INTERACTIVE + opslimit = 2; //libsodium.crypto_pwhash_OPSLIMIT_INTERACTIVE + memlimit = 67108864; //libsodium.crypto_pwhash_MEMLIMIT_INTERACTIVE break; case Tier.med: - opslimit = 3 //libsodium.crypto_pwhash_OPSLIMIT_MODERATE - memlimit = 268435456 //libsodium.crypto_pwhash_MEMLIMIT_MODERATE + opslimit = 3; //libsodium.crypto_pwhash_OPSLIMIT_MODERATE + memlimit = 268435456; //libsodium.crypto_pwhash_MEMLIMIT_MODERATE break; case Tier.high: - opslimit = 4 //libsodium.crypto_pwhash_OPSLIMIT_SENSITIVE - memlimit = 1073741824 //libsodium.crypto_pwhash_MEMLIMIT_SENSITIVE + opslimit = 4; //libsodium.crypto_pwhash_OPSLIMIT_SENSITIVE + memlimit = 1073741824; //libsodium.crypto_pwhash_MEMLIMIT_SENSITIVE break; default: - throw new Error(`Unsupported security tier = ${tier}.`) + throw new Error(`Unsupported security tier = ${tier}.`); } } - return libsodium.crypto_pwhash(size, path, this.raw, opslimit, memlimit, libsodium.crypto_pwhash_ALG_ARGON2ID13) + return libsodium.crypto_pwhash( + size, + path, + this.raw, + opslimit, + memlimit, + libsodium.crypto_pwhash_ALG_ARGON2ID13 + ); } - signer(code: string=MtrDex.Ed25519_Seed, transferable: boolean=true, path: string = "", - tier: Tier | null = null, temp:boolean = false): Signer { - let seed = this.stretch(Matter._rawSize(code), path, tier, temp) + signer( + code: string = MtrDex.Ed25519_Seed, + transferable: boolean = true, + path: string = '', + tier: Tier | null = null, + temp: boolean = false + ): Signer { + let seed = this.stretch(Matter._rawSize(code), path, tier, temp); - return new Signer({raw: seed, code: code, transferable: transferable}) + return new Signer({ + raw: seed, + code: code, + transferable: transferable, + }); } get tier(): Tier | null { return this._tier; } - -} \ No newline at end of file +} diff --git a/src/keri/core/seqner.ts b/src/keri/core/seqner.ts index 00d62361..a108217a 100644 --- a/src/keri/core/seqner.ts +++ b/src/keri/core/seqner.ts @@ -1,7 +1,5 @@ - - -import {Matter, MatterArgs, MtrDex} from './matter'; -import { intToBytes, bytesToInt } from './utils'; +import { Matter, MatterArgs, MtrDex } from './matter'; +import { intToBytes, bytesToInt } from './utils'; /** * @description Seqner: subclass of Matter, cryptographic material, for ordinal numbers * such as sequence numbers or first seen ordering numbers. @@ -9,7 +7,16 @@ import { intToBytes, bytesToInt } from './utils'; * when provided as attached cryptographic material elements. */ export class Seqner extends Matter { - constructor({raw, code=MtrDex.Salt_128, qb64, qb64b, qb2, sn, snh, ...kwa}: MatterArgs & {sn?: number, snh?: string}) { + constructor({ + raw, + code = MtrDex.Salt_128, + qb64, + qb64b, + qb2, + sn, + snh, + ...kwa + }: MatterArgs & { sn?: number; snh?: string }) { if (!raw && !qb64b && !qb64 && !qb2) { if (sn === undefined) { if (snh === undefined) { @@ -19,10 +26,10 @@ export class Seqner extends Matter { } } - raw = intToBytes(sn, Matter._rawSize(MtrDex.Salt_128)) + raw = intToBytes(sn, Matter._rawSize(MtrDex.Salt_128)); } - super({raw, code, qb64, qb64b, qb2, ...kwa}); + super({ raw, code, qb64, qb64b, qb2, ...kwa }); if (this.code !== MtrDex.Salt_128) { throw new Error(`Invalid code = ${this.code} for Seqner.`); @@ -30,7 +37,7 @@ export class Seqner extends Matter { } get sn(): number { - return bytesToInt(this.raw) //To check if other readUInt64 is needed + return bytesToInt(this.raw); //To check if other readUInt64 is needed } get snh(): string { diff --git a/src/keri/core/serder.ts b/src/keri/core/serder.ts index 91d19cd5..ef20fe7a 100644 --- a/src/keri/core/serder.ts +++ b/src/keri/core/serder.ts @@ -1,40 +1,52 @@ -import {MtrDex} from "./matter"; -import {deversify, Dict, Ident, Serials, versify, Version, Versionage} from "./core"; -import { Verfer } from "./verfer"; -import { Diger } from "./diger"; +import { MtrDex } from './matter'; +import { + deversify, + Dict, + Ident, + Serials, + versify, + Version, + Versionage, +} from './core'; +import { Verfer } from './verfer'; +import { Diger } from './diger'; export class Serder { private _kind: Serials; - private _raw: string = ""; + private _raw: string = ''; private _ked: Dict = {}; private _ident: Ident = Ident.KERI; private _size: number = 0; private _version: Version = Versionage; private readonly _code: string; - constructor(ked: Dict, kind: Serials=Serials.JSON, code: string=MtrDex.Blake3_256) { - this._code = code - this._kind = kind - this.ked = ked + constructor( + ked: Dict, + kind: Serials = Serials.JSON, + code: string = MtrDex.Blake3_256 + ) { + this._code = code; + this._kind = kind; + this.ked = ked; } set ked(ked: Dict) { - let [raw, ident, kind, kd, version] = this._exhale(ked, this._kind) - let size = raw.length - this._raw = raw - this._ident = ident - this._ked = kd - this._kind = kind - this._size = size - this._version = version + let [raw, ident, kind, kd, version] = this._exhale(ked, this._kind); + let size = raw.length; + this._raw = raw; + this._ident = ident; + this._ked = kd; + this._kind = kind; + this._size = size; + this._version = version; } get pre(): string { - return this._ked['i'] + return this._ked['i']; } get ked(): Dict { - return this._ked + return this._ked; } get code(): string { @@ -46,88 +58,97 @@ export class Serder { } get kind(): Serials { - return this._kind + return this._kind; } - private _exhale(ked: Dict, kind: Serials): [string, Ident, Serials, Dict, Version] { - return sizeify(ked, kind) + private _exhale( + ked: Dict, + kind: Serials + ): [string, Ident, Serials, Dict, Version] { + return sizeify(ked, kind); } get ident(): Ident { - return this._ident + return this._ident; } get size(): number { - return this._size + return this._size; } get version(): Version { - return this._version + return this._version; } get verfers(): Verfer[] { - let keys: any = [] - if ("k" in this._ked) { // establishment event - keys = this._ked["k"]; - } else { // non-establishment event + let keys: any = []; + if ('k' in this._ked) { + // establishment event + keys = this._ked['k']; + } else { + // non-establishment event keys = []; } // create a new Verfer for each key - let verfers = [] + let verfers = []; for (let key of keys) { - verfers.push(new Verfer({ qb64: key })) + verfers.push(new Verfer({ qb64: key })); } - return verfers + return verfers; } get digers(): Diger[] { - let keys: any = [] - if ("n" in this._ked) { // establishment event - keys = this._ked["n"]; - } else { // non-establishment event + let keys: any = []; + if ('n' in this._ked) { + // establishment event + keys = this._ked['n']; + } else { + // non-establishment event keys = []; } // create a new Verfer for each key - let digers = [] + let digers = []; for (let key of keys) { - digers.push(new Diger({ qb64: key })) + digers.push(new Diger({ qb64: key })); } - return digers + return digers; } pretty() { - return JSON.stringify(this._ked, undefined, 2) + return JSON.stringify(this._ked, undefined, 2); } } export function dumps(ked: Object, kind: Serials.JSON): string { if (kind == Serials.JSON) { - return JSON.stringify(ked) + return JSON.stringify(ked); } else { - throw new Error("unsupported event encoding") + throw new Error('unsupported event encoding'); } } -export function sizeify(ked: Dict, kind?: Serials) : [string, Ident, Serials, Dict, Version]{ - if (!("v" in ked)) { - throw new Error("Missing or empty version string") +export function sizeify( + ked: Dict, + kind?: Serials +): [string, Ident, Serials, Dict, Version] { + if (!('v' in ked)) { + throw new Error('Missing or empty version string'); } - let [ident ,knd, version,] = deversify(ked["v"] as string) + let [ident, knd, version] = deversify(ked['v'] as string); if (version != Versionage) { - throw new Error(`unsupported version ${version.toString()}`) + throw new Error(`unsupported version ${version.toString()}`); } if (kind == undefined) { - kind = knd + kind = knd; } - let raw = dumps(ked, kind) - let size = raw.length + let raw = dumps(ked, kind); + let size = raw.length; - ked['v'] = versify(ident, version, kind, size) + ked['v'] = versify(ident, version, kind, size); - raw = dumps(ked, kind) - - return [raw, ident, kind, ked, version] + raw = dumps(ked, kind); + return [raw, ident, kind, ked, version]; } diff --git a/src/keri/core/siger.ts b/src/keri/core/siger.ts index a6418585..f06457c0 100644 --- a/src/keri/core/siger.ts +++ b/src/keri/core/siger.ts @@ -1,5 +1,5 @@ -import {IdxSigDex, Indexer, IndexerArgs} from "./indexer"; -import {Verfer} from "./verfer"; +import { IdxSigDex, Indexer, IndexerArgs } from './indexer'; +import { Verfer } from './verfer'; /** Siger is subclass of Indexer, indexed signature material, @@ -17,23 +17,24 @@ import {Verfer} from "./verfer"; **/ export class Siger extends Indexer { - - private _verfer?: Verfer - constructor({raw, code, index, ondex, qb64, qb64b, qb2}: IndexerArgs, verfer?: Verfer) { - super({raw, code, index, ondex, qb64, qb64b, qb2}); - - if (!IdxSigDex.has(this.code)) { - throw new Error(`Invalid code = ${this.code} for Siger.`) + private _verfer?: Verfer; + constructor( + { raw, code, index, ondex, qb64, qb64b, qb2 }: IndexerArgs, + verfer?: Verfer + ) { + super({ raw, code, index, ondex, qb64, qb64b, qb2 }); + + if (!IdxSigDex.has(this.code)) { + throw new Error(`Invalid code = ${this.code} for Siger.`); + } + this._verfer = verfer; } - this._verfer = verfer - } - - get verfer(): Verfer | undefined { - return this._verfer; - } - set verfer(verfer: Verfer | undefined) { - this._verfer = verfer; - } + get verfer(): Verfer | undefined { + return this._verfer; + } + set verfer(verfer: Verfer | undefined) { + this._verfer = verfer; + } } diff --git a/src/keri/core/signer.ts b/src/keri/core/signer.ts index 5cb09d96..0736bd81 100644 --- a/src/keri/core/signer.ts +++ b/src/keri/core/signer.ts @@ -1,13 +1,13 @@ -import {EmptyMaterialError} from "./kering"; +import { EmptyMaterialError } from './kering'; export {}; import libsodium from 'libsodium-wrappers-sumo'; -import {Matter} from './matter'; -import {MtrDex} from './matter'; -import {Verfer} from "./verfer"; -import {Cigar} from "./cigar"; -import {Siger} from "./siger"; -import {IdrDex} from "./indexer"; +import { Matter } from './matter'; +import { MtrDex } from './matter'; +import { Verfer } from './verfer'; +import { Cigar } from './cigar'; +import { Siger } from './siger'; +import { IdrDex } from './indexer'; import { Buffer } from 'buffer'; /** @@ -19,48 +19,57 @@ import { Buffer } from 'buffer'; as cipher suite for creating key-pair. */ interface SignerArgs { - raw?: Uint8Array | undefined - code?: string - qb64b?: Uint8Array | undefined - qb64?: string - qb2?: Uint8Array | undefined - transferable?: boolean + raw?: Uint8Array | undefined; + code?: string; + qb64b?: Uint8Array | undefined; + qb64?: string; + qb2?: Uint8Array | undefined; + transferable?: boolean; } export class Signer extends Matter { - private readonly _sign: Function - private readonly _verfer: Verfer - - constructor({raw, code = MtrDex.Ed25519_Seed, qb64, qb64b, qb2, transferable = true}: SignerArgs) { + private readonly _sign: Function; + private readonly _verfer: Verfer; + + constructor({ + raw, + code = MtrDex.Ed25519_Seed, + qb64, + qb64b, + qb2, + transferable = true, + }: SignerArgs) { try { - super({raw, code, qb64, qb64b, qb2}) + super({ raw, code, qb64, qb64b, qb2 }); } catch (e) { if (e instanceof EmptyMaterialError) { if (code == MtrDex.Ed25519_Seed) { - let raw = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); - super({raw, code, qb64, qb64b, qb2}) + let raw = libsodium.randombytes_buf( + libsodium.crypto_sign_SEEDBYTES + ); + super({ raw, code, qb64, qb64b, qb2 }); } else { - throw new Error(`Unsupported signer code = ${code}.`) + throw new Error(`Unsupported signer code = ${code}.`); } } else { - throw e + throw e; } } - let verfer + let verfer; if (this.code == MtrDex.Ed25519_Seed) { - this._sign = this._ed25519 - const keypair = libsodium.crypto_sign_seed_keypair(this.raw) - verfer = new Verfer({raw: keypair.publicKey, code: transferable ? MtrDex.Ed25519 : MtrDex.Ed25519N}) - + this._sign = this._ed25519; + const keypair = libsodium.crypto_sign_seed_keypair(this.raw); + verfer = new Verfer({ + raw: keypair.publicKey, + code: transferable ? MtrDex.Ed25519 : MtrDex.Ed25519N, + }); } else { - throw new Error(`Unsupported signer code = ${this.code}.`) + throw new Error(`Unsupported signer code = ${this.code}.`); } - this._verfer = verfer - + this._verfer = verfer; } - /** * @description Property verfer: Returns Verfer instance @@ -70,44 +79,55 @@ export class Signer extends Matter { return this._verfer; } - sign(ser: Uint8Array, index: number | null = null, only: boolean = false, - ondex: number | undefined = undefined): Siger | Cigar { - return this._sign(ser, this.raw, this.verfer, index, only, ondex) + sign( + ser: Uint8Array, + index: number | null = null, + only: boolean = false, + ondex: number | undefined = undefined + ): Siger | Cigar { + return this._sign(ser, this.raw, this.verfer, index, only, ondex); } - _ed25519(ser: Uint8Array, seed: Uint8Array, verfer: Verfer, index: number | null, - only: boolean = false, ondex: number | undefined) { - + _ed25519( + ser: Uint8Array, + seed: Uint8Array, + verfer: Verfer, + index: number | null, + only: boolean = false, + ondex: number | undefined + ) { let sig = libsodium.crypto_sign_detached( ser, - Buffer.concat([seed, verfer.raw]), + Buffer.concat([seed, verfer.raw]) ); if (index == null) { - return new Cigar({raw: sig, code: MtrDex.Ed25519_Sig}, verfer); + return new Cigar({ raw: sig, code: MtrDex.Ed25519_Sig }, verfer); } else { let code; if (only) { - ondex = undefined + ondex = undefined; if (index <= 63) { - code = IdrDex.Ed25519_Crt_Sig + code = IdrDex.Ed25519_Crt_Sig; } else { - code = IdrDex.Ed25519_Big_Crt_Sig + code = IdrDex.Ed25519_Big_Crt_Sig; } } else { - if(ondex == undefined) { - ondex = index + if (ondex == undefined) { + ondex = index; } - if (ondex == index && index <= 63) // both same and small - code = IdrDex.Ed25519_Sig // use small both same - else // otherwise big or both not same so use big both - code = IdrDex.Ed25519_Big_Sig // use use big both - + if (ondex == index && index <= 63) + // both same and small + code = IdrDex.Ed25519_Sig; // use small both same + // otherwise big or both not same so use big both + else code = IdrDex.Ed25519_Big_Sig; // use use big both } - return new Siger({raw: sig, code: code, index: index, ondex: ondex}, verfer) + return new Siger( + { raw: sig, code: code, index: index, ondex: ondex }, + verfer + ); } - } -} \ No newline at end of file +} diff --git a/src/keri/core/tholder.ts b/src/keri/core/tholder.ts index b0d5d6d1..55535c3c 100644 --- a/src/keri/core/tholder.ts +++ b/src/keri/core/tholder.ts @@ -1,19 +1,18 @@ -import {BexDex, Matter, NumDex} from "./matter"; -import {CesrNumber} from "./number"; -import {Fraction} from "mathjs"; -import {math} from "../../index"; - +import { BexDex, Matter, NumDex } from './matter'; +import { CesrNumber } from './number'; +import { Fraction } from 'mathjs'; +import { math } from '../../index'; export class Tholder { - private _weighted: boolean = false - private _thold: any = undefined - private _size: number = 0 - private _number: CesrNumber | undefined = undefined - private _satisfy: any = undefined + private _weighted: boolean = false; + private _thold: any = undefined; + private _size: number = 0; + private _number: CesrNumber | undefined = undefined; + private _satisfy: any = undefined; // private _bexter: any - constructor(kargs: { thold?: any, limen?: any, sith?: any }) { + constructor(kargs: { thold?: any; limen?: any; sith?: any }) { if (kargs.thold !== undefined) { this._processThold(kargs.thold); } else if (kargs.limen != undefined) { @@ -21,7 +20,7 @@ export class Tholder { } else if (kargs.sith !== undefined) { this._processSith(kargs.sith); } else { - throw new Error("Missing threshold expression"); + throw new Error('Missing threshold expression'); } } @@ -46,21 +45,19 @@ export class Tholder { let sith = this.thold.map((clause: Fraction[]) => { return clause.map((c) => { if (0 < Number(c) && Number(c) < 1) { - return math.format(c, { fraction: 'ratio' }) - } - else { - return math.format(c, { fraction: 'decimal' }) + return math.format(c, { fraction: 'ratio' }); + } else { + return math.format(c, { fraction: 'decimal' }); } - - }) - }) + }); + }); if (sith.length == 1) { - sith = sith[0] + sith = sith[0]; } - return sith + return sith; } else { - return this.thold.toString(16) + return this.thold.toString(16); } } @@ -73,61 +70,63 @@ export class Tholder { } private _processThold(thold: number | Array>) { - if (typeof (thold) === "number") { + if (typeof thold === 'number') { this._processUnweighted(thold); } else { - this._processWeighted(thold) + this._processWeighted(thold); } - } private _processLimen(limen: string) { - let matter = new Matter({qb64: limen}) + let matter = new Matter({ qb64: limen }); if (NumDex.has(matter.code)) { - let number = new CesrNumber({raw: matter.raw, code: matter.code}) + let number = new CesrNumber({ raw: matter.raw, code: matter.code }); this._processUnweighted(number.num); } else if (BexDex.has(matter.code)) { // TODO: Implement Bexter } else { - throw new Error("Invalid code for limen=" + matter.code) + throw new Error('Invalid code for limen=' + matter.code); } } private _processSith(sith: string | number | Array) { - if (typeof (sith) == "number") { + if (typeof sith == 'number') { this._processUnweighted(sith); - } else if (typeof (sith) == "string" && sith.indexOf('[') == -1) { - this._processUnweighted(parseInt(sith, 16)) + } else if (typeof sith == 'string' && sith.indexOf('[') == -1) { + this._processUnweighted(parseInt(sith, 16)); } else { let _sith: any = sith; - if (typeof (sith) == "string") { + if (typeof sith == 'string') { _sith = JSON.parse(sith); } if (_sith.length == 0) { - throw new Error("Empty weight list") + throw new Error('Empty weight list'); } - let mask = _sith.map((x: any) => { - return typeof (x) !== "string" - }) + return typeof x !== 'string'; + }); if (mask.length > 0 && !mask.every((x: boolean) => x)) { - _sith = [_sith] + _sith = [_sith]; } for (let c of _sith) { let mask = c.map((x: any) => { - return typeof (x) === "string" - }) + return typeof x === 'string'; + }); if (mask.length > 0 && !mask.every((x: boolean) => x)) { - throw new Error("Invalid sith, some weights in clause " + mask + " are non string") + throw new Error( + 'Invalid sith, some weights in clause ' + + mask + + ' are non string' + ); } } let thold = this._processClauses(_sith); - this._processWeighted(thold) + this._processWeighted(thold); } } @@ -136,69 +135,71 @@ export class Tholder { sith.forEach((clause) => { thold.push( clause.map((w) => { - return this.weight(w) + return this.weight(w); }) - ) - }) - return thold + ); + }); + return thold; } private _processUnweighted(thold: number) { if (thold < 0) { - throw new Error("Non-positive int threshold = {thold}.") + throw new Error('Non-positive int threshold = {thold}.'); } - this._thold = thold - this._weighted = false - this._size = this._thold // used to verify that keys list size is at least size - this._satisfy = this._satisfy_numeric - this._number = new CesrNumber({}, thold) + this._thold = thold; + this._weighted = false; + this._size = this._thold; // used to verify that keys list size is at least size + this._satisfy = this._satisfy_numeric; + this._number = new CesrNumber({}, thold); // this._bexter = undefined - } private _processWeighted(thold: Array>) { for (let clause of thold) { if (Number(math.sum(clause)) < 1) { - throw new Error("Invalid sith clause: " + thold + "all clause weight sums must be >= 1") + throw new Error( + 'Invalid sith clause: ' + + thold + + 'all clause weight sums must be >= 1' + ); } } - this._thold = thold - this._weighted = true + this._thold = thold; + this._weighted = true; this._size = thold.reduce((acc, currentValue) => { return acc + currentValue.length; - }, 0) - this._satisfy = this._satisfy_weighted + }, 0); + this._satisfy = this._satisfy_weighted; //TODO: created Bexter if needed - } private weight(w: string): Fraction { - return math.fraction(w) + return math.fraction(w); } private _satisfy_numeric(indices: any[]) { - return this.thold > 0 && indices.length >= this.thold // at least one + return this.thold > 0 && indices.length >= this.thold; // at least one } private _satisfy_weighted(indices: any) { if (indices.length === 0) { - return false + return false; } - let indexes: Set = new Set(indices.sort()) - let sats = new Array(indices.length).fill(false) + let indexes: Set = new Set(indices.sort()); + let sats = new Array(indices.length).fill(false); for (let idx of indexes) { - sats[idx] = true + sats[idx] = true; } let wio = 0; for (let clause of this.thold) { let cw = 0; for (let w of clause) { if (sats[wio]) { - cw += Number(w) + cw += Number(w); } - wio += 1 + wio += 1; } if (cw < 1) { return false; @@ -209,6 +210,6 @@ export class Tholder { } public satisfy(indices: any): boolean { - return this._satisfy(indices) + return this._satisfy(indices); } -} \ No newline at end of file +} diff --git a/src/keri/core/utils.ts b/src/keri/core/utils.ts index fe68254b..47e1e978 100644 --- a/src/keri/core/utils.ts +++ b/src/keri/core/utils.ts @@ -1,6 +1,5 @@ - export function pad(n: any, width = 3, z = 0) { - return (String(z).repeat(width) + String(n)).slice(String(n).length); + return (String(z).repeat(width) + String(n)).slice(String(n).length); } /** @@ -11,19 +10,19 @@ export function pad(n: any, width = 3, z = 0) { * @param {*} labels labels is list of element labels in ked from which to extract values */ export function extractValues(ked: any, labels: any) { - let values = []; - for (let label of labels) { - values = extractElementValues(ked[label], values); - } + let values = []; + for (let label of labels) { + values = extractElementValues(ked[label], values); + } - return values; + return values; } export function arrayEquals(ar1: Uint8Array, ar2: Uint8Array) { - return ( - ar1.length === ar2.length && - ar1.every((val, index) => val === ar2[index]) - ); + return ( + ar1.length === ar2.length && + ar1.every((val, index) => val === ar2[index]) + ); } /** @@ -36,27 +35,22 @@ export function arrayEquals(ar1: Uint8Array, ar2: Uint8Array) { */ function extractElementValues(element: any, values: any) { - let data = []; - - - try { - if((element instanceof Array) && !(typeof(element) == 'string')) { - for(let k in element) - extractElementValues(element[k], values); - } else if (typeof(element) == 'string') { - values.push(element); + let data = []; + + try { + if (element instanceof Array && !(typeof element == 'string')) { + for (let k in element) extractElementValues(element[k], values); + } else if (typeof element == 'string') { + values.push(element); + } + data = values; + } catch (error) { + throw new Error(error as string); } - data = values; - } catch (error) { - throw new Error(error as string); - } - return data; + return data; } - - - /** * @description Returns True if obj is non-string iterable, False otherwise @@ -68,52 +62,50 @@ function extractElementValues(element: any, values: any) { // return instanceof(obj, (str, bytes)) && instanceof(obj, Iterable)) // } - export function nowUTC(): Date { - return new Date() + return new Date(); } - export function range(start: number, stop: number, step: number) { - if (typeof stop == 'undefined') { - // one param defined - stop = start; - start = 0; - } - - if (typeof step == 'undefined') { - step = 1; - } - - if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) { - return []; - } - - let result = new Array(); - for (let i: number = start; step > 0 ? i < stop : i > stop; i += step) { - result.push(i); - } - - return result; + if (typeof stop == 'undefined') { + // one param defined + stop = start; + start = 0; + } + + if (typeof step == 'undefined') { + step = 1; + } + + if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) { + return []; + } + + let result = new Array(); + for (let i: number = start; step > 0 ? i < stop : i > stop; i += step) { + result.push(i); + } + + return result; } export function intToBytes(value: number, length: number): Uint8Array { - const byteArray = new Uint8Array(length); // Assuming a 4-byte integer (32 bits) - - for ( let index = 0; index < byteArray.length; index ++ ) { - let byte = value & 0xff; - byteArray [ index ] = byte; - value = (value - byte) / 256 ; - } - - return byteArray; + const byteArray = new Uint8Array(length); // Assuming a 4-byte integer (32 bits) + + for (let index = 0; index < byteArray.length; index++) { + let byte = value & 0xff; + byteArray[index] = byte; + value = (value - byte) / 256; + } + + return byteArray; } export function bytesToInt(ar: Uint8Array): number { - let value = 0; - for (let i = ar.length - 1; i >= 0; i--) { - value = (value * 256) + ar[i]; - } + let value = 0; + for (let i = ar.length - 1; i >= 0; i--) { + value = value * 256 + ar[i]; + } - return value; + return value; } diff --git a/src/keri/core/vdring.ts b/src/keri/core/vdring.ts index 61d570e6..5da1ddb3 100644 --- a/src/keri/core/vdring.ts +++ b/src/keri/core/vdring.ts @@ -1,42 +1,58 @@ -import { randomNonce } from "../app/coring"; -import { TraitDex } from "../app/habery"; -import { Serials, Versionage, Version, Ident, versify, Ilks } from "../core/core"; -import { ample } from "./eventing"; -import { MtrDex } from "./matter"; -import { Prefixer } from "./prefixer"; -import { Serder } from "./serder"; +import { randomNonce } from '../app/coring'; +import { TraitDex } from '../app/habery'; +import { + Serials, + Versionage, + Version, + Ident, + versify, + Ilks, +} from '../core/core'; +import { ample } from './eventing'; +import { MtrDex } from './matter'; +import { Prefixer } from './prefixer'; +import { Serder } from './serder'; namespace vdr { - export interface VDRInceptArgs { - pre: string, - toad?: string | number | undefined - nonce?: string, - baks?: string[], - cnfg?: string[], - version?: Version, - kind?: Serials, - code?: string, + pre: string; + toad?: string | number | undefined; + nonce?: string; + baks?: string[]; + cnfg?: string[]; + version?: Version; + kind?: Serials; + code?: string; } - export function incept({ pre, toad, nonce = randomNonce(), baks = [], cnfg = [], version = Versionage, kind = Serials.JSON, code = MtrDex.Blake3_256 }: VDRInceptArgs): Serder { - + export function incept({ + pre, + toad, + nonce = randomNonce(), + baks = [], + cnfg = [], + version = Versionage, + kind = Serials.JSON, + code = MtrDex.Blake3_256, + }: VDRInceptArgs): Serder { const vs = versify(Ident.KERI, version, kind, 0); let isn = 0; let ilk = Ilks.vcp; if (cnfg.includes(TraitDex.NoBackers) && baks.length > 0) { - throw new Error(`${baks.length} backers specified for NB vcp, 0 allowed`); + throw new Error( + `${baks.length} backers specified for NB vcp, 0 allowed` + ); } if (new Set(baks).size < baks.length) { throw new Error(`Invalid baks ${baks} has duplicates`); } - let _toad: number + let _toad: number; if (toad === undefined) { if (baks.length === 0) { - _toad = 0 + _toad = 0; } else { _toad = ample(baks.length); } @@ -45,7 +61,7 @@ namespace vdr { } if (baks.length > 0) { - if (_toad < 1 || (_toad > baks.length)) { + if (_toad < 1 || _toad > baks.length) { throw new Error(`Invalid toad ${_toad} for baks in ${baks}`); } } else { @@ -57,14 +73,14 @@ namespace vdr { let ked = { v: vs, t: ilk, - d: "", - i: "", + d: '', + i: '', ii: pre, - s: "" + isn, + s: '' + isn, c: cnfg, - bt: "0", + bt: '0', b: baks, - n: nonce + n: nonce, }; let prefixer = new Prefixer({ code }, ked); diff --git a/src/keri/core/verfer.ts b/src/keri/core/verfer.ts index f966d3c2..caf7c85b 100644 --- a/src/keri/core/verfer.ts +++ b/src/keri/core/verfer.ts @@ -1,7 +1,7 @@ export {}; -import libsodium from "libsodium-wrappers-sumo" -import {Matter, MatterArgs, MtrDex} from './matter' -import secp256r1 from "ecdsa-secp256r1" +import libsodium from 'libsodium-wrappers-sumo'; +import { Matter, MatterArgs, MtrDex } from './matter'; +import secp256r1 from 'ecdsa-secp256r1'; /** * @description Verfer :sublclass of Matter,helps to verify signature of serialization @@ -9,35 +9,37 @@ import secp256r1 from "ecdsa-secp256r1" */ export class Verfer extends Matter { private readonly _verify: (sig: any, ser: any, key: any) => boolean; - constructor({raw, code, qb64, qb64b, qb2}: MatterArgs) { - super({raw, code, qb64, qb64b, qb2}); + constructor({ raw, code, qb64, qb64b, qb2 }: MatterArgs) { + super({ raw, code, qb64, qb64b, qb2 }); if (Array.from([MtrDex.Ed25519N, MtrDex.Ed25519]).includes(this.code)) { - this._verify = this._ed25519 - } else if (Array.from([MtrDex.ECDSA_256r1N, MtrDex.ECDSA_256r1]).includes(this.code)) { - this._verify = this._secp256r1 + this._verify = this._ed25519; + } else if ( + Array.from([MtrDex.ECDSA_256r1N, MtrDex.ECDSA_256r1]).includes( + this.code + ) + ) { + this._verify = this._secp256r1; } else { - throw new Error(`Unsupported code = ${this.code} for verifier.`) + throw new Error(`Unsupported code = ${this.code} for verifier.`); } } verify(sig: any, ser: any) { - return this._verify(sig, ser, this.raw) + return this._verify(sig, ser, this.raw); } _ed25519(sig: any, ser: any, key: any) { try { return libsodium.crypto_sign_verify_detached(sig, ser, key); - } catch (error) { throw new Error(error as string); } } _secp256r1(sig: any, ser: any, key: any) { try { - const publicKey = secp256r1.fromCompressedPublicKey(key) - return publicKey.verify(ser, sig) - + const publicKey = secp256r1.fromCompressedPublicKey(key); + return publicKey.verify(ser, sig); } catch (error) { throw new Error(error as string); } diff --git a/src/keri/end/ending.ts b/src/keri/end/ending.ts index 40b39940..5811ec46 100644 --- a/src/keri/end/ending.ts +++ b/src/keri/end/ending.ts @@ -1,159 +1,170 @@ -import {Siger} from "../core/siger"; -import {Cigar} from "../core/cigar"; +import { Siger } from '../core/siger'; +import { Cigar } from '../core/cigar'; -export const FALSY = [false, 0, "?0", "no", "false", "False", "off"] -export const TRUTHY = [true, 1, "?1", "yes", "true", "True", 'on'] +export const FALSY = [false, 0, '?0', 'no', 'false', 'False', 'off']; +export const TRUTHY = [true, 1, '?1', 'yes', 'true', 'True', 'on']; export class Signage { - - constructor(markers: any, indexed?: boolean, signer?: string, ordinal?: string, - digest?: string, kind?: string) { - this.markers = markers - this.indexed = indexed - this.signer = signer - this.ordinal = ordinal - this.digest = digest - this.kind = kind + constructor( + markers: any, + indexed?: boolean, + signer?: string, + ordinal?: string, + digest?: string, + kind?: string + ) { + this.markers = markers; + this.indexed = indexed; + this.signer = signer; + this.ordinal = ordinal; + this.digest = digest; + this.kind = kind; } - public markers: any - public indexed: boolean | undefined = false - public signer: string | undefined - public ordinal: string | undefined - public digest: string | undefined - public kind: string | undefined + public markers: any; + public indexed: boolean | undefined = false; + public signer: string | undefined; + public ordinal: string | undefined; + public digest: string | undefined; + public kind: string | undefined; } export function signature(signages: Array): Headers { - let values = new Array() + let values = new Array(); for (let signage of signages) { - let markers: Array - let indexed = signage.indexed - let signer = signage.signer - let ordinal = signage.ordinal - let digest = signage.digest - let kind = signage.kind - let tags: Array + let markers: Array; + let indexed = signage.indexed; + let signer = signage.signer; + let ordinal = signage.ordinal; + let digest = signage.digest; + let kind = signage.kind; + let tags: Array; if (signage.markers instanceof Map) { - tags = Array.from(signage.markers.keys()) - markers = Array.from(signage.markers.values()) + tags = Array.from(signage.markers.keys()); + markers = Array.from(signage.markers.values()); } else { - markers = signage.markers as Array - tags = new Array() + markers = signage.markers as Array; + tags = new Array(); } if (indexed == undefined) { - indexed = markers[0] instanceof Siger + indexed = markers[0] instanceof Siger; } - let items = new Array() - let tag = "indexed" + let items = new Array(); + let tag = 'indexed'; - let val = indexed ? "?1" : "?0" - items.push(`${tag}="${val}"`) + let val = indexed ? '?1' : '?0'; + items.push(`${tag}="${val}"`); if (signer != undefined) { - items.push(`signer="${signer}"`) + items.push(`signer="${signer}"`); } if (ordinal != undefined) { - items.push(`ordinal="${ordinal}"`) + items.push(`ordinal="${ordinal}"`); } if (digest != undefined) { - items.push(`digest="${digest}"`) + items.push(`digest="${digest}"`); } if (kind != undefined) { - items.push(`kind="${kind}"`) + items.push(`kind="${kind}"`); } markers.forEach((marker, idx) => { - let tag: string + let tag: string; if (tags != undefined && tags.length > idx) { - tag = tags[idx] + tag = tags[idx]; } else if (marker instanceof Siger) { if (!indexed) - throw new Error(`Indexed signature marker ${marker} when indexed False.`) + throw new Error( + `Indexed signature marker ${marker} when indexed False.` + ); - tag = marker.index.toString() - } else { // Must be a Cigar + tag = marker.index.toString(); + } else { + // Must be a Cigar if (indexed) - throw new Error(`Unindexed signature marker ${marker} when indexed True.`) - tag = marker.verfer!.qb64 + throw new Error( + `Unindexed signature marker ${marker} when indexed True.` + ); + tag = marker.verfer!.qb64; } - val = marker.qb64 - items.push(`${tag}="${val}"`) - }) + val = marker.qb64; + items.push(`${tag}="${val}"`); + }); - values.push(items.join(";")) + values.push(items.join(';')); } - return new Headers([ - ["Signature", values.join(",")] - ]) + return new Headers([['Signature', values.join(',')]]); } export function designature(value: string) { - let values = value.replace(" ", "").split(",") + let values = value.replace(' ', '').split(','); - let signages = new Array() + let signages = new Array(); values.forEach((val) => { - let dict = new Map() - val.split(";").forEach((v) => { - let splits = v.split("=", 2) - dict.set(splits[0], splits[1].replaceAll("\"", "")) - }) - - if (!dict.has("indexed")) { - throw new Error("Missing indexed field in Signature header signage.") + let dict = new Map(); + val.split(';').forEach((v) => { + let splits = v.split('=', 2); + dict.set(splits[0], splits[1].replaceAll('"', '')); + }); + + if (!dict.has('indexed')) { + throw new Error( + 'Missing indexed field in Signature header signage.' + ); } - let item = dict.get("indexed")! - let indexed = !(FALSY.includes(item)) - dict.delete("indexed") - - let signer - if (dict.has("signer")) { - signer = dict.get("signer") as string - dict.delete("signer") + let item = dict.get('indexed')!; + let indexed = !FALSY.includes(item); + dict.delete('indexed'); + + let signer; + if (dict.has('signer')) { + signer = dict.get('signer') as string; + dict.delete('signer'); } - let ordinal - if (dict.has("ordinal")) { - ordinal = dict.get("ordinal") as string - dict.delete("ordinal") + let ordinal; + if (dict.has('ordinal')) { + ordinal = dict.get('ordinal') as string; + dict.delete('ordinal'); } - let digest - if (dict.has("digest")) { - digest = dict.get("digest") as string - dict.delete("digest") + let digest; + if (dict.has('digest')) { + digest = dict.get('digest') as string; + dict.delete('digest'); } - let kind - if (dict.has("kind")) { - kind = dict.get("kind") as string - dict.delete("kind") + let kind; + if (dict.has('kind')) { + kind = dict.get('kind') as string; + dict.delete('kind'); } else { - kind = "CESR" + kind = 'CESR'; } - let markers: Map - if (kind == "CESR") { - markers = new Map() + let markers: Map; + if (kind == 'CESR') { + markers = new Map(); dict.forEach((val, key) => { if (indexed) { - markers.set(key, new Siger({qb64: val as string})) + markers.set(key, new Siger({ qb64: val as string })); } else { - markers.set(key, new Cigar({qb64: val as string})) + markers.set(key, new Cigar({ qb64: val as string })); } - }) + }); } else { - markers = dict + markers = dict; } - signages.push(new Signage(markers, indexed, signer, ordinal, digest, kind)) - - }) + signages.push( + new Signage(markers, indexed, signer, ordinal, digest, kind) + ); + }); - return signages -} \ No newline at end of file + return signages; +} diff --git a/test/app/aiding.test.ts b/test/app/aiding.test.ts index a5d7778c..141986eb 100644 --- a/test/app/aiding.test.ts +++ b/test/app/aiding.test.ts @@ -1,19 +1,23 @@ -import { strict as assert } from "assert" -import { SignifyClient, } from "../../src/keri/app/clienting" -import { CreateIdentiferArgs, RotateIdentifierArgs } from "../../src/keri/app/aiding" -import { Authenticater } from "../../src/keri/core/authing" -import { Salter, Tier } from "../../src/keri/core/salter" -import { Algos } from "../../src/keri/core/manager" -import libsodium from "libsodium-wrappers-sumo" -import fetchMock from "jest-fetch-mock" -import 'whatwg-fetch' +import { strict as assert } from 'assert'; +import { SignifyClient } from '../../src/keri/app/clienting'; +import { + CreateIdentiferArgs, + RotateIdentifierArgs, +} from '../../src/keri/app/aiding'; +import { Authenticater } from '../../src/keri/core/authing'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import { Algos } from '../../src/keri/core/manager'; +import libsodium from 'libsodium-wrappers-sumo'; +import fetchMock from 'jest-fetch-mock'; +import 'whatwg-fetch'; fetchMock.enableMocks(); -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + +const mockConnect = + '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + @@ -29,241 +33,377 @@ const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3Acy '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + - '"pidx":0}' + '"pidx":0}'; const mockGetAID = { - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true + name: 'aid1', + prefix: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + salty: { + sxlt: '1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A', + pidx: 0, + kidx: 0, + stem: 'signify:aid', + tier: 'low', + dcode: 'E', + icodes: ['A'], + ncodes: ['A'], + transferable: true, }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] + transferable: true, + state: { + vn: [1, 0], + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '0', + p: '', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + f: '0', + dt: '2023-08-21T22:30:46.473545+00:00', + et: 'icp', + kt: '1', + k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], + nt: '1', + n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], + bt: '0', + b: [], + c: [], + ee: { + s: '0', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + br: [], + ba: [], }, - "di": "" + di: '', }, - "windexes": [] -} - -const mockCredential = { "sad": { "v": "ACDC10JSON000197_", "d": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "i": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "s": "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao", "a": { "d": "EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P", "i": "EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby", "dt": "2023-08-23T15:16:07.553000+00:00", "LEI": "5493001KJTIIGC8Y1R17" } }, "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sadsigers": [{ "path": "-", "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sn": 0, "d": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1" }], "sadcigars": [], "chains": [], "status": { "v": "KERI10JSON000135_", "i": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "s": "0", "d": "ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "ra": {}, "a": { "s": 2, "d": "EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt" }, "dt": "2023-08-23T15:16:07.553000+00:00", "et": "iss" } } - + windexes: [], +}; + +const mockCredential = { + sad: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17', + }, + }, + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sadsigers: [ + { + path: '-', + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sn: 0, + d: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + }, + ], + sadcigars: [], + chains: [], + status: { + v: 'KERI10JSON000135_', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + ra: {}, + a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, + dt: '2023-08-23T15:16:07.553000+00:00', + et: 'iss', + }, +}; -fetchMock.mockResponse(req => { +fetchMock.mockResponse((req) => { if (req.url.startsWith(url + '/agent')) { - return Promise.resolve({ body: mockConnect, init: { status: 202 } }) + return Promise.resolve({ body: mockConnect, init: { status: 202 } }); } else if (req.url == boot_url + '/boot') { - return Promise.resolve({ body: "", init: { status: 202 } }) + return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers() - let signed_headers = new Headers() - - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - const requrl = new URL(req.url) - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }) - let signer = salter.signer("A", true, "agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00", Tier.low) - - let authn = new Authenticater(signer!, signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID - - return Promise.resolve({ body: JSON.stringify(body), init: { status: 202, headers: signed_headers } }) + let headers = new Headers(); + let signed_headers = new Headers(); + + headers.set( + 'Signify-Resource', + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); + headers.set('Content-Type', 'application/json'); + + const requrl = new URL(req.url); + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + let signer = salter.signer( + 'A', + true, + 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', + Tier.low + ); + + let authn = new Authenticater(signer!, signer!.verfer); + signed_headers = authn.sign( + headers, + req.method, + requrl.pathname.split('?')[0] + ); + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + ? mockCredential + : mockGetAID; + + return Promise.resolve({ + body: JSON.stringify(body), + init: { status: 202, headers: signed_headers }, + }); } - -}) +}); describe('Aiding', () => { - it('Salty identifiers', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let identifiers = client.identifiers() - - await identifiers.list() - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - assert.equal(lastCall[0]!, url + '/identifiers') - assert.equal(lastCall[1]!.method, 'GET') - - await client.identifiers().create('aid1', { bran: '0123456789abcdefghijk' }) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!, url + '/identifiers') - assert.equal(lastCall[1]!.method, 'POST') - assert.equal(lastBody.name, 'aid1') - assert.deepEqual(lastBody.icp, { "v": "KERI10JSON00012b_", "t": "icp", "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "s": "0", "kt": "1", "k": ["DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9"], "nt": "1", "n": ["EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc"], "bt": "0", "b": [], "c": [], "a": [] }) - assert.deepEqual(lastBody.sigs, ["AACZZe75PvUZ1lCREPxFAcX59XHo-BGMYTAGni-I4E0eqKznrEoK2d-mtWmWHwKns7tfnjOzTfDUcv7PLFJ52g0A"]) - assert.deepEqual(lastBody.salty.pidx, 0) - assert.deepEqual(lastBody.salty.kidx, 0) - assert.deepEqual(lastBody.salty.stem, "signify:aid") - assert.deepEqual(lastBody.salty.tier, "low") - assert.deepEqual(lastBody.salty.icodes, ["A"]) - assert.deepEqual(lastBody.salty.ncodes, ["A"]) - assert.deepEqual(lastBody.salty.dcode, "E") - assert.deepEqual(lastBody.salty.transferable, true) - - await client.identifiers().create('aid2', { count: 3, ncount: 3, isith: "2", nsith: "2", bran: "0123456789lmnopqrstuv" }) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!, url + '/identifiers') - assert.equal(lastCall[1]!.method, 'POST') - assert.equal(lastBody.name, 'aid2') - assert.deepEqual(lastBody.icp, { "v": "KERI10JSON0001e7_", "t": "icp", "d": "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX", "i": "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX", "s": "0", "kt": "2", "k": ["DGBw7C7AfC7jbD3jLLRS3SzIWFndM947TyNWKQ52iQx5", "DD_bHYFsgWXuCbz3SD0HjCIe_ITjRvEoCGuZ4PcNFFDz", "DEe9u8k0fm1wMFAuOIsCtCNrpduoaV5R21rAcJl0awze"], "nt": "2", "n": ["EML5FrjCpz8SEl4dh0U15l8bMRhV_O5iDcR1opLJGBSH", "EJpKquuibYTqpwMDqEFAFs0gwq0PASAHZ_iDmSF3I2Vg", "ELplTAiEKdobFhlf-dh1vUb2iVDW0dYOSzs1dR7fQo60"], "bt": "0", "b": [], "c": [], "a": [] }) - assert.deepEqual(lastBody.sigs, ["AAD9_IgPaUEBjAl1Ck61Jkn78ErzsnVkIxpaFBYSdSEAW4NbtXsLiUn1olijzdTQYn_Byq6MaEk-eoMN3Oc0WEEC", "ABBWJ7KkAXXiRK8JyEUpeARHJTTzlBHu_ev-jUrNEhV9sX4_4lI7wxowrQisumt5r50bUNfYBK7pxSwHk8I4IFQP", "ACDTITaEquHdYKkS-94tVCxL3IYrtvhlTt__sSUavTJT6fI3KB-uwXV7L0SfzMq0gFqYxkheH2LdC4HkAW2mH4QJ"]) - assert.deepEqual(lastBody.salty.pidx, 1) - assert.deepEqual(lastBody.salty.kidx, 0) - assert.deepEqual(lastBody.salty.stem, "signify:aid") - assert.deepEqual(lastBody.salty.tier, "low") - assert.deepEqual(lastBody.salty.icodes, ["A", "A", "A"]) - assert.deepEqual(lastBody.salty.ncodes, ["A", "A", "A"]) - assert.deepEqual(lastBody.salty.dcode, "E") - assert.deepEqual(lastBody.salty.transferable, true) - - await client.identifiers().rotate('aid1') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!, url + '/identifiers/aid1') - assert.equal(lastCall[1]!.method, 'PUT') - assert.deepEqual(lastBody.rot, { "v": "KERI10JSON000160_", "t": "rot", "d": "EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg", "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "s": "1", "p": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "kt": "1", "k": ["DHgomzINlGJHr-XP3sv2ZcR9QsIEYS3LJhs4KRaZYKly"], "nt": "1", "n": ["EJMovBlrBuD6BVeUsGSxLjczbLEbZU9YnTSud9K4nVzk"], "bt": "0", "br": [], "ba": [], "a": [] }) - assert.deepEqual(lastBody.sigs, ["AABWSckRpAWLpfFSrpnDR3SzQASrRSVKGh8AnHxauhN_43qKkqPb9l04utnTm2ixNpGGJ-UB8qdKMjfkEQ61AIQC"]) - assert.deepEqual(lastBody.salty.pidx, 0) - assert.deepEqual(lastBody.salty.kidx, 1) - assert.deepEqual(lastBody.salty.stem, "signify:aid") - assert.deepEqual(lastBody.salty.tier, "low") - assert.deepEqual(lastBody.salty.icodes, ["A"]) - assert.deepEqual(lastBody.salty.ncodes, ["A"]) - assert.deepEqual(lastBody.salty.dcode, "E") - assert.deepEqual(lastBody.salty.transferable, true) - - let data = [{ i: "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", s: 0, d: "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK" }] - await client.identifiers().interact('aid1', data) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!, url + '/identifiers/aid1?type=ixn') - assert.equal(lastCall[1]!.method, 'PUT') - assert.deepEqual(lastBody.ixn, { "v": "KERI10JSON000138_", "t": "ixn", "d": "EPtNJLDft3CB-oz3qIhe86fnTKs-GYWiWyx8fJv3VO5e", "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "s": "1", "p": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "a": [{ "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "s": 0, "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK" }] }) - assert.deepEqual(lastBody.sigs, ["AADEzKk-5LT6vH-PWFb_1i1A8FW-KGHORtTOCZrKF4gtWkCr9vN1z_mDSVKRc6MKktpdeB3Ub1fWCGpnS50hRgoJ"]) - - await client.identifiers().addEndRole('aid1', 'agent') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!, url + '/identifiers/aid1/endroles') - assert.equal(lastCall[1]!.method, 'POST') - assert.equal(lastBody.rpy.t, 'rpy') - assert.equal(lastBody.rpy.r, '/end/role/add') - assert.deepEqual(lastBody.rpy.a, { "cid": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", "role": "agent" }) - - await client.identifiers().members('aid1') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - assert.equal(lastCall[0]!, url + '/identifiers/aid1/members') - assert.equal(lastCall[1]!.method, 'GET') - - }) + const bran = '0123456789abcdefghijk'; + + let client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.boot(); + await client.connect(); + + let identifiers = client.identifiers(); + + await identifiers.list(); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/identifiers'); + assert.equal(lastCall[1]!.method, 'GET'); + + await client + .identifiers() + .create('aid1', { bran: '0123456789abcdefghijk' }); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + let lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/identifiers'); + assert.equal(lastCall[1]!.method, 'POST'); + assert.equal(lastBody.name, 'aid1'); + assert.deepEqual(lastBody.icp, { + v: 'KERI10JSON00012b_', + t: 'icp', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '0', + kt: '1', + k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], + nt: '1', + n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], + bt: '0', + b: [], + c: [], + a: [], + }); + assert.deepEqual(lastBody.sigs, [ + 'AACZZe75PvUZ1lCREPxFAcX59XHo-BGMYTAGni-I4E0eqKznrEoK2d-mtWmWHwKns7tfnjOzTfDUcv7PLFJ52g0A', + ]); + assert.deepEqual(lastBody.salty.pidx, 0); + assert.deepEqual(lastBody.salty.kidx, 0); + assert.deepEqual(lastBody.salty.stem, 'signify:aid'); + assert.deepEqual(lastBody.salty.tier, 'low'); + assert.deepEqual(lastBody.salty.icodes, ['A']); + assert.deepEqual(lastBody.salty.ncodes, ['A']); + assert.deepEqual(lastBody.salty.dcode, 'E'); + assert.deepEqual(lastBody.salty.transferable, true); + + await client + .identifiers() + .create('aid2', { + count: 3, + ncount: 3, + isith: '2', + nsith: '2', + bran: '0123456789lmnopqrstuv', + }); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/identifiers'); + assert.equal(lastCall[1]!.method, 'POST'); + assert.equal(lastBody.name, 'aid2'); + assert.deepEqual(lastBody.icp, { + v: 'KERI10JSON0001e7_', + t: 'icp', + d: 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX', + i: 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX', + s: '0', + kt: '2', + k: [ + 'DGBw7C7AfC7jbD3jLLRS3SzIWFndM947TyNWKQ52iQx5', + 'DD_bHYFsgWXuCbz3SD0HjCIe_ITjRvEoCGuZ4PcNFFDz', + 'DEe9u8k0fm1wMFAuOIsCtCNrpduoaV5R21rAcJl0awze', + ], + nt: '2', + n: [ + 'EML5FrjCpz8SEl4dh0U15l8bMRhV_O5iDcR1opLJGBSH', + 'EJpKquuibYTqpwMDqEFAFs0gwq0PASAHZ_iDmSF3I2Vg', + 'ELplTAiEKdobFhlf-dh1vUb2iVDW0dYOSzs1dR7fQo60', + ], + bt: '0', + b: [], + c: [], + a: [], + }); + assert.deepEqual(lastBody.sigs, [ + 'AAD9_IgPaUEBjAl1Ck61Jkn78ErzsnVkIxpaFBYSdSEAW4NbtXsLiUn1olijzdTQYn_Byq6MaEk-eoMN3Oc0WEEC', + 'ABBWJ7KkAXXiRK8JyEUpeARHJTTzlBHu_ev-jUrNEhV9sX4_4lI7wxowrQisumt5r50bUNfYBK7pxSwHk8I4IFQP', + 'ACDTITaEquHdYKkS-94tVCxL3IYrtvhlTt__sSUavTJT6fI3KB-uwXV7L0SfzMq0gFqYxkheH2LdC4HkAW2mH4QJ', + ]); + assert.deepEqual(lastBody.salty.pidx, 1); + assert.deepEqual(lastBody.salty.kidx, 0); + assert.deepEqual(lastBody.salty.stem, 'signify:aid'); + assert.deepEqual(lastBody.salty.tier, 'low'); + assert.deepEqual(lastBody.salty.icodes, ['A', 'A', 'A']); + assert.deepEqual(lastBody.salty.ncodes, ['A', 'A', 'A']); + assert.deepEqual(lastBody.salty.dcode, 'E'); + assert.deepEqual(lastBody.salty.transferable, true); + + await client.identifiers().rotate('aid1'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/identifiers/aid1'); + assert.equal(lastCall[1]!.method, 'PUT'); + assert.deepEqual(lastBody.rot, { + v: 'KERI10JSON000160_', + t: 'rot', + d: 'EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg', + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '1', + p: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + kt: '1', + k: ['DHgomzINlGJHr-XP3sv2ZcR9QsIEYS3LJhs4KRaZYKly'], + nt: '1', + n: ['EJMovBlrBuD6BVeUsGSxLjczbLEbZU9YnTSud9K4nVzk'], + bt: '0', + br: [], + ba: [], + a: [], + }); + assert.deepEqual(lastBody.sigs, [ + 'AABWSckRpAWLpfFSrpnDR3SzQASrRSVKGh8AnHxauhN_43qKkqPb9l04utnTm2ixNpGGJ-UB8qdKMjfkEQ61AIQC', + ]); + assert.deepEqual(lastBody.salty.pidx, 0); + assert.deepEqual(lastBody.salty.kidx, 1); + assert.deepEqual(lastBody.salty.stem, 'signify:aid'); + assert.deepEqual(lastBody.salty.tier, 'low'); + assert.deepEqual(lastBody.salty.icodes, ['A']); + assert.deepEqual(lastBody.salty.ncodes, ['A']); + assert.deepEqual(lastBody.salty.dcode, 'E'); + assert.deepEqual(lastBody.salty.transferable, true); + + let data = [ + { + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: 0, + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + }, + ]; + await client.identifiers().interact('aid1', data); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/identifiers/aid1?type=ixn'); + assert.equal(lastCall[1]!.method, 'PUT'); + assert.deepEqual(lastBody.ixn, { + v: 'KERI10JSON000138_', + t: 'ixn', + d: 'EPtNJLDft3CB-oz3qIhe86fnTKs-GYWiWyx8fJv3VO5e', + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '1', + p: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + a: [ + { + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: 0, + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + }, + ], + }); + assert.deepEqual(lastBody.sigs, [ + 'AADEzKk-5LT6vH-PWFb_1i1A8FW-KGHORtTOCZrKF4gtWkCr9vN1z_mDSVKRc6MKktpdeB3Ub1fWCGpnS50hRgoJ', + ]); + + await client.identifiers().addEndRole('aid1', 'agent'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/identifiers/aid1/endroles'); + assert.equal(lastCall[1]!.method, 'POST'); + assert.equal(lastBody.rpy.t, 'rpy'); + assert.equal(lastBody.rpy.r, '/end/role/add'); + assert.deepEqual(lastBody.rpy.a, { + cid: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + role: 'agent', + }); + + await client.identifiers().members('aid1'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/identifiers/aid1/members'); + assert.equal(lastCall[1]!.method, 'GET'); + }); it('Randy identifiers', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let identifiers = client.identifiers() - - await identifiers.list() - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - assert.equal(lastCall[0]!, url + '/identifiers') - assert.equal(lastCall[1]!.method, 'GET') - - await client.identifiers().create('aid1', { bran: '0123456789abcdefghijk', algo: Algos.randy }) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!, url + '/identifiers') - assert.equal(lastCall[1]!.method, 'POST') - assert.equal(lastBody.name, 'aid1') - assert.deepEqual(lastBody.icp.s, "0") - assert.deepEqual(lastBody.icp.kt, "1") - assert.deepEqual(lastBody.randy.transferable, true) - - }) + const bran = '0123456789abcdefghijk'; + + let client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.boot(); + await client.connect(); + + let identifiers = client.identifiers(); + + await identifiers.list(); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/identifiers'); + assert.equal(lastCall[1]!.method, 'GET'); + + await client + .identifiers() + .create('aid1', { + bran: '0123456789abcdefghijk', + algo: Algos.randy, + }); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + let lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/identifiers'); + assert.equal(lastCall[1]!.method, 'POST'); + assert.equal(lastBody.name, 'aid1'); + assert.deepEqual(lastBody.icp.s, '0'); + assert.deepEqual(lastBody.icp.kt, '1'); + assert.deepEqual(lastBody.randy.transferable, true); + }); it('CreateIdentiferArgs', () => { let args: CreateIdentiferArgs; args = { isith: 1, - nsith: 1 + nsith: 1, }; args = { - isith: "1", - nsith: "1" + isith: '1', + nsith: '1', }; args = { - isith: ["1"], - nsith: ["1"] + isith: ['1'], + nsith: ['1'], }; args !== null; // avoids TS6133 - }) + }); it('RotateIdentifierArgs', () => { let args: RotateIdentifierArgs; args = { - nsith: 1 + nsith: 1, }; args = { - nsith: "1" + nsith: '1', }; args = { - nsith: ["1"] + nsith: ['1'], }; args !== null; // avoids TS6133 - }) - - - -}) \ No newline at end of file + }); +}); diff --git a/test/app/clienting.test.ts b/test/app/clienting.test.ts index 08489511..e748f174 100644 --- a/test/app/clienting.test.ts +++ b/test/app/clienting.test.ts @@ -1,266 +1,380 @@ -import {strict as assert} from "assert" -import { SignifyClient } from "../../src/keri/app/clienting" -import { Identifier } from "../../src/keri/app/aiding" -import { Operations, KeyEvents, KeyStates, Oobis } from "../../src/keri/app/coring" -import { Contacts, Challenges } from "../../src/keri/app/contacting" -import { Credentials, Schemas, Registries } from "../../src/keri/app/credentialing" -import { Escrows } from "../../src/keri/app/escrowing" -import { Exchanges } from "../../src/keri/app/exchanging" -import { Groups } from "../../src/keri/app/grouping" -import { Notifications } from "../../src/keri/app/notifying" +import { strict as assert } from 'assert'; +import { SignifyClient } from '../../src/keri/app/clienting'; +import { Identifier } from '../../src/keri/app/aiding'; +import { + Operations, + KeyEvents, + KeyStates, + Oobis, +} from '../../src/keri/app/coring'; +import { Contacts, Challenges } from '../../src/keri/app/contacting'; +import { + Credentials, + Schemas, + Registries, +} from '../../src/keri/app/credentialing'; +import { Escrows } from '../../src/keri/app/escrowing'; +import { Exchanges } from '../../src/keri/app/exchanging'; +import { Groups } from '../../src/keri/app/grouping'; +import { Notifications } from '../../src/keri/app/notifying'; -import { Authenticater } from "../../src/keri/core/authing" -import { Salter, Tier } from "../../src/keri/core/salter" -import libsodium from "libsodium-wrappers-sumo" -import fetchMock from "jest-fetch-mock" -import 'whatwg-fetch' +import { Authenticater } from '../../src/keri/core/authing'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import libsodium from 'libsodium-wrappers-sumo'; +import fetchMock from 'jest-fetch-mock'; +import 'whatwg-fetch'; fetchMock.enableMocks(); -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" -const bran = "0123456789abcdefghijk" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; +const bran = '0123456789abcdefghijk'; -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ - '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ - '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ - '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ - '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ - '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ - '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ - '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ - '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ - '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ - '"pidx":0}' -const mockGetAID ={ - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true +const mockConnect = + '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],' + + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},' + + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",' + + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},' + + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + + '"pidx":0}'; +const mockGetAID = { + name: 'aid1', + prefix: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + salty: { + sxlt: '1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A', + pidx: 0, + kidx: 0, + stem: 'signify:aid', + tier: 'low', + dcode: 'E', + icodes: ['A'], + ncodes: ['A'], + transferable: true, }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] + transferable: true, + state: { + vn: [1, 0], + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '0', + p: '', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + f: '0', + dt: '2023-08-21T22:30:46.473545+00:00', + et: 'icp', + kt: '1', + k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], + nt: '1', + n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], + bt: '0', + b: [], + c: [], + ee: { + s: '0', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + br: [], + ba: [], }, - "di": "" + di: '', }, - "windexes": [] -} - -const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} + windexes: [], +}; +const mockCredential = { + sad: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17', + }, + }, + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sadsigers: [ + { + path: '-', + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sn: 0, + d: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + }, + ], + sadcigars: [], + chains: [], + status: { + v: 'KERI10JSON000135_', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + ra: {}, + a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, + dt: '2023-08-23T15:16:07.553000+00:00', + et: 'iss', + }, +}; -fetchMock.mockResponse(req => { - if (req.url.startsWith(url+'/agent')) { - return Promise.resolve({body: mockConnect, init:{ status: 202 }}) - } else if (req.url == boot_url+'/boot') { - return Promise.resolve({body: "", init:{ status: 202 }}) +fetchMock.mockResponse((req) => { + if (req.url.startsWith(url + '/agent')) { + return Promise.resolve({ body: mockConnect, init: { status: 202 } }); + } else if (req.url == boot_url + '/boot') { + return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers() - let signed_headers = new Headers() + let headers = new Headers(); + let signed_headers = new Headers(); - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') + headers.set( + 'Signify-Resource', + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); + headers.set('Content-Type', 'application/json'); - const requrl = new URL(req.url) - let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) - let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) + const requrl = new URL(req.url); + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + let signer = salter.signer( + 'A', + true, + 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', + Tier.low + ); - let authn = new Authenticater(signer!,signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID - - return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) - } + let authn = new Authenticater(signer!, signer!.verfer); + signed_headers = authn.sign( + headers, + req.method, + requrl.pathname.split('?')[0] + ); + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + ? mockCredential + : mockGetAID; -}) + return Promise.resolve({ + body: JSON.stringify(body), + init: { status: 202, headers: signed_headers }, + }); + } +}); describe('SignifyClient', () => { it('SignifyClient initialization', async () => { await libsodium.ready; - let t = () => {new SignifyClient(url, 'short', Tier.low, boot_url)} - expect(t).toThrow('bran must be 21 characters') + let t = () => { + new SignifyClient(url, 'short', Tier.low, boot_url); + }; + expect(t).toThrow('bran must be 21 characters'); - let client = new SignifyClient(url, bran, Tier.low, boot_url) - assert.equal(client.bran, "0123456789abcdefghijk") - assert.equal(client.url, url) - assert.equal(client.bootUrl, boot_url) - assert.equal(client.tier, Tier.low) - assert.equal(client.pidx, 0) - assert.equal(client.controller.pre, "ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose") - assert.equal(client.controller.stem, "signify:controller") - assert.equal(client.controller.tier, Tier.low) - assert.equal(client.controller.serder.raw, '{"v":"KERI10JSON00012b_","t":"icp",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0",' + - '"kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],' + - '"nt":"1","n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],' + - '"bt":"0","b":[],"c":[],"a":[]}') - assert.deepEqual(client.controller.serder.ked.s, "0") - - let res = await client.boot() - assert.equal(fetchMock.mock.calls[0]![0]!,boot_url+'/boot') - assert.equal(fetchMock.mock.calls[0]![1]!.body!.toString(),'{"icp":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1","n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]},"sig":"AACJwsJ0mvb4VgxD87H4jIsiT1QtlzznUy9zrX3lGdd48jjQRTv8FxlJ8ClDsGtkvK4Eekg5p-oPYiPvK_1eTXEG","stem":"signify:controller","pidx":1,"tier":"low"}') - assert.equal(res.status, 202) - - await client.connect() + let client = new SignifyClient(url, bran, Tier.low, boot_url); + assert.equal(client.bran, '0123456789abcdefghijk'); + assert.equal(client.url, url); + assert.equal(client.bootUrl, boot_url); + assert.equal(client.tier, Tier.low); + assert.equal(client.pidx, 0); + assert.equal( + client.controller.pre, + 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose' + ); + assert.equal(client.controller.stem, 'signify:controller'); + assert.equal(client.controller.tier, Tier.low); + assert.equal( + client.controller.serder.raw, + '{"v":"KERI10JSON00012b_","t":"icp",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0",' + + '"kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],' + + '"nt":"1","n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],' + + '"bt":"0","b":[],"c":[],"a":[]}' + ); + assert.deepEqual(client.controller.serder.ked.s, '0'); - // validate agent - assert(client.agent!.pre, 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei') - assert(client.agent!.anchor, 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') - assert(client.agent!.said, 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei') - assert(client.agent!.state.s,'0') - assert(client.agent!.state.d,'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei') + let res = await client.boot(); + assert.equal(fetchMock.mock.calls[0]![0]!, boot_url + '/boot'); + assert.equal( + fetchMock.mock.calls[0]![1]!.body!.toString(), + '{"icp":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1","n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]},"sig":"AACJwsJ0mvb4VgxD87H4jIsiT1QtlzznUy9zrX3lGdd48jjQRTv8FxlJ8ClDsGtkvK4Eekg5p-oPYiPvK_1eTXEG","stem":"signify:controller","pidx":1,"tier":"low"}' + ); + assert.equal(res.status, 202); - // validate approve delegation - assert.equal(client.controller.serder.ked.s, "1") - assert.equal(client.controller.serder.ked.t, "ixn") - assert.equal(client.controller.serder.ked.a[0].i, "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - assert.equal(client.controller.serder.ked.a[0].d, "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - assert.equal(client.controller.serder.ked.a[0].s, "0") + await client.connect(); - let data =client.data - assert(data[0],url) - assert(data[0],bran) + // validate agent + assert( + client.agent!.pre, + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + assert( + client.agent!.anchor, + 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose' + ); + assert( + client.agent!.said, + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + assert(client.agent!.state.s, '0'); + assert( + client.agent!.state.d, + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); - assert.equal(client.identifiers() instanceof Identifier, true) - assert.equal(client.operations() instanceof Operations, true) - assert.equal(client.keyEvents() instanceof KeyEvents, true) - assert.equal(client.keyStates() instanceof KeyStates, true) - assert.equal(client.keyStates() instanceof KeyStates, true) - assert.equal(client.credentials() instanceof Credentials, true) - assert.equal(client.registries() instanceof Registries, true) - assert.equal(client.schemas() instanceof Schemas, true) - assert.equal(client.challenges() instanceof Challenges, true) - assert.equal(client.contacts() instanceof Contacts, true) - assert.equal(client.notifications() instanceof Notifications, true) - assert.equal(client.escrows() instanceof Escrows, true) - assert.equal(client.oobis() instanceof Oobis, true) - assert.equal(client.exchanges() instanceof Exchanges, true) - assert.equal(client.groups() instanceof Groups, true) + // validate approve delegation + assert.equal(client.controller.serder.ked.s, '1'); + assert.equal(client.controller.serder.ked.t, 'ixn'); + assert.equal( + client.controller.serder.ked.a[0].i, + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + assert.equal( + client.controller.serder.ked.a[0].d, + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + assert.equal(client.controller.serder.ked.a[0].s, '0'); + + let data = client.data; + assert(data[0], url); + assert(data[0], bran); - }) + assert.equal(client.identifiers() instanceof Identifier, true); + assert.equal(client.operations() instanceof Operations, true); + assert.equal(client.keyEvents() instanceof KeyEvents, true); + assert.equal(client.keyStates() instanceof KeyStates, true); + assert.equal(client.keyStates() instanceof KeyStates, true); + assert.equal(client.credentials() instanceof Credentials, true); + assert.equal(client.registries() instanceof Registries, true); + assert.equal(client.schemas() instanceof Schemas, true); + assert.equal(client.challenges() instanceof Challenges, true); + assert.equal(client.contacts() instanceof Contacts, true); + assert.equal(client.notifications() instanceof Notifications, true); + assert.equal(client.escrows() instanceof Escrows, true); + assert.equal(client.oobis() instanceof Oobis, true); + assert.equal(client.exchanges() instanceof Exchanges, true); + assert.equal(client.groups() instanceof Groups, true); + }); - it('Signed fetch', async () => { - await libsodium.ready + it('Signed fetch', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" - const client = new SignifyClient(url, bran, Tier.low, boot_url) + await libsodium.ready; + const bran = '0123456789abcdefghijk'; + const client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.connect(); - await client.connect() - - let resp = await client.fetch('/contacts','GET', undefined) - assert.equal(resp.status, 202) - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/contacts') - assert.equal(lastCall[1]!.method,'GET') - let lastHeaders = new Headers((lastCall[1]!.headers!)) - assert.equal(lastHeaders.get('signify-resource'),'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') + let resp = await client.fetch('/contacts', 'GET', undefined); + assert.equal(resp.status, 202); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/contacts'); + assert.equal(lastCall[1]!.method, 'GET'); + let lastHeaders = new Headers(lastCall[1]!.headers!); + assert.equal( + lastHeaders.get('signify-resource'), + 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose' + ); // Headers in error let badAgentHeaders = { 'signify-resource': 'bad_resource', 'signify-timestamp': '2023-08-20T15:34:31.534673+00:00', - 'signature-input': 'signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1692545671;keyid="EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei";alg="ed25519"', - 'signature': 'indexed="?0";signify="0BDiSoxCv42h2BtGMHy_tpWAqyCgEoFwRa8bQy20mBB2D5Vik4gRp3XwkEHtqy6iy6SUYAytMUDtRbewotAfkCgN"', + 'signature-input': + 'signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1692545671;keyid="EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei";alg="ed25519"', + signature: + 'indexed="?0";signify="0BDiSoxCv42h2BtGMHy_tpWAqyCgEoFwRa8bQy20mBB2D5Vik4gRp3XwkEHtqy6iy6SUYAytMUDtRbewotAfkCgN"', 'content-type': 'application/json', - } - fetchMock.mockResponseOnce('[]', { status: 202, headers: badAgentHeaders }) - let t = async () => await client.fetch('/contacts','GET', undefined) - expect(t).rejects.toThrowError('message from a different remote agent') + }; + fetchMock.mockResponseOnce('[]', { + status: 202, + headers: badAgentHeaders, + }); + let t = async () => await client.fetch('/contacts', 'GET', undefined); + expect(t).rejects.toThrowError('message from a different remote agent'); badAgentHeaders = { 'signify-resource': 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei', 'signify-timestamp': '2023-08-20T15:34:31.534673+00:00', - 'signature-input': 'signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1692545671;keyid="EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei";alg="ed25519"', - 'signature': 'indexed="?0";signify="0BDiSoxCv42h2BtGMHy_tpWAqyCgEoFwRa8bQy20mBB2D5Vik4gRp3XwkEHtqy6iy6SUYAytMUDtRbewotAfkCbad"', - 'content-type': 'application/json' - } - fetchMock.mockResponseOnce('[]', { status: 202, headers: badAgentHeaders }) - t = async () => await client.fetch('/contacts','GET', undefined) - expect(t).rejects.toThrowError('Signature for EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei invalid.') - + 'signature-input': + 'signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1692545671;keyid="EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei";alg="ed25519"', + signature: + 'indexed="?0";signify="0BDiSoxCv42h2BtGMHy_tpWAqyCgEoFwRa8bQy20mBB2D5Vik4gRp3XwkEHtqy6iy6SUYAytMUDtRbewotAfkCbad"', + 'content-type': 'application/json', + }; + fetchMock.mockResponseOnce('[]', { + status: 202, + headers: badAgentHeaders, + }); + t = async () => await client.fetch('/contacts', 'GET', undefined); + expect(t).rejects.toThrowError( + 'Signature for EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei invalid.' + ); // Other calls - resp = await client.saveOldPasscode('1234') - assert.equal(resp.status, 202) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/salt/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') - assert.equal(lastCall[1]!.method,'PUT') - assert.equal(lastCall[1]!.body,'{"salt":"1234"}') - - resp = await client.deletePasscode() - assert.equal(resp.status, 202) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/salt/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') - assert.equal(lastCall[1]!.method,'DELETE') + resp = await client.saveOldPasscode('1234'); + assert.equal(resp.status, 202); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + '/salt/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose' + ); + assert.equal(lastCall[1]!.method, 'PUT'); + assert.equal(lastCall[1]!.body, '{"salt":"1234"}'); - resp = await client.rotate("abcdefghijk0123456789",[]) - assert.equal(resp.status, 202) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/agent/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose') - assert.equal(lastCall[1]!.method,'PUT') - let lastBody = JSON.parse(lastCall[1]!.body!) - assert.equal(lastBody.rot.t,'rot') - assert.equal(lastBody.rot.s,'1') - assert.deepEqual(lastBody.rot.kt,['1','0']) - assert.equal(lastBody.rot.d,'EGFi9pCcRaLK8dPh5S7JP9Em62fBMiR1l4gW1ZazuuAO') + resp = await client.deletePasscode(); + assert.equal(resp.status, 202); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + '/salt/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose' + ); + assert.equal(lastCall[1]!.method, 'DELETE'); - resp = await client.signedFetch('http://example.com','/test','POST',{foo:true},'aid1') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,'http://example.com/test') - assert.equal(lastCall[1]!.method,'POST') - lastBody = JSON.parse(lastCall[1]!.body!) - assert.deepEqual(lastBody.foo,true) - lastHeaders = new Headers((lastCall[1]!.headers!)) - assert.equal(lastHeaders.get('signify-resource'),'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK') + resp = await client.rotate('abcdefghijk0123456789', []); + assert.equal(resp.status, 202); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + '/agent/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose' + ); + assert.equal(lastCall[1]!.method, 'PUT'); + let lastBody = JSON.parse(lastCall[1]!.body!); + assert.equal(lastBody.rot.t, 'rot'); + assert.equal(lastBody.rot.s, '1'); + assert.deepEqual(lastBody.rot.kt, ['1', '0']); + assert.equal( + lastBody.rot.d, + 'EGFi9pCcRaLK8dPh5S7JP9Em62fBMiR1l4gW1ZazuuAO' + ); - }) - -}) \ No newline at end of file + resp = await client.signedFetch( + 'http://example.com', + '/test', + 'POST', + { foo: true }, + 'aid1' + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, 'http://example.com/test'); + assert.equal(lastCall[1]!.method, 'POST'); + lastBody = JSON.parse(lastCall[1]!.body!); + assert.deepEqual(lastBody.foo, true); + lastHeaders = new Headers(lastCall[1]!.headers!); + assert.equal( + lastHeaders.get('signify-resource'), + 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK' + ); + }); +}); diff --git a/test/app/contacting.test.ts b/test/app/contacting.test.ts index 4ed3db68..0a0c8409 100644 --- a/test/app/contacting.test.ts +++ b/test/app/contacting.test.ts @@ -1,210 +1,307 @@ -import {strict as assert} from "assert" -import { SignifyClient } from "../../src/keri/app/clienting" -import { Authenticater } from "../../src/keri/core/authing" -import { Salter, Tier } from "../../src/keri/core/salter" -import libsodium from "libsodium-wrappers-sumo" -import fetchMock from "jest-fetch-mock" -import 'whatwg-fetch' +import { strict as assert } from 'assert'; +import { SignifyClient } from '../../src/keri/app/clienting'; +import { Authenticater } from '../../src/keri/core/authing'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import libsodium from 'libsodium-wrappers-sumo'; +import fetchMock from 'jest-fetch-mock'; +import 'whatwg-fetch'; fetchMock.enableMocks(); -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" - -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ - '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ - '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ - '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ - '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ - '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ - '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ - '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ - '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ - '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ - '"pidx":0}' -const mockGetAID ={ - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; + +const mockConnect = + '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],' + + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},' + + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",' + + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},' + + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + + '"pidx":0}'; +const mockGetAID = { + name: 'aid1', + prefix: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + salty: { + sxlt: '1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A', + pidx: 0, + kidx: 0, + stem: 'signify:aid', + tier: 'low', + dcode: 'E', + icodes: ['A'], + ncodes: ['A'], + transferable: true, }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] + transferable: true, + state: { + vn: [1, 0], + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '0', + p: '', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + f: '0', + dt: '2023-08-21T22:30:46.473545+00:00', + et: 'icp', + kt: '1', + k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], + nt: '1', + n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], + bt: '0', + b: [], + c: [], + ee: { + s: '0', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + br: [], + ba: [], }, - "di": "" + di: '', }, - "windexes": [] -} - -const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} - + windexes: [], +}; + +const mockCredential = { + sad: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17', + }, + }, + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sadsigers: [ + { + path: '-', + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sn: 0, + d: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + }, + ], + sadcigars: [], + chains: [], + status: { + v: 'KERI10JSON000135_', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + ra: {}, + a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, + dt: '2023-08-23T15:16:07.553000+00:00', + et: 'iss', + }, +}; -fetchMock.mockResponse(req => { - if (req.url.startsWith(url+'/agent')) { - return Promise.resolve({body: mockConnect, init:{ status: 202 }}) - } else if (req.url == boot_url+'/boot') { - return Promise.resolve({body: "", init:{ status: 202 }}) +fetchMock.mockResponse((req) => { + if (req.url.startsWith(url + '/agent')) { + return Promise.resolve({ body: mockConnect, init: { status: 202 } }); + } else if (req.url == boot_url + '/boot') { + return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers() - let signed_headers = new Headers() - - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - const requrl = new URL(req.url) - let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) - let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) - - let authn = new Authenticater(signer!,signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID - - return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) + let headers = new Headers(); + let signed_headers = new Headers(); + + headers.set( + 'Signify-Resource', + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); + headers.set('Content-Type', 'application/json'); + + const requrl = new URL(req.url); + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + let signer = salter.signer( + 'A', + true, + 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', + Tier.low + ); + + let authn = new Authenticater(signer!, signer!.verfer); + signed_headers = authn.sign( + headers, + req.method, + requrl.pathname.split('?')[0] + ); + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + ? mockCredential + : mockGetAID; + + return Promise.resolve({ + body: JSON.stringify(body), + init: { status: 202, headers: signed_headers }, + }); } - -}) +}); describe('Contacting', () => { - it('Contacts', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() + const bran = '0123456789abcdefghijk'; - let contacts = client.contacts() + let client = new SignifyClient(url, bran, Tier.low, boot_url); + await client.boot(); + await client.connect(); - await contacts.list("mygroup","company","mycompany") - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/contacts?group=mygroup&filter_field=company&filter_value=mycompany') - assert.equal(lastCall[1]!.method,'GET') + let contacts = client.contacts(); + await contacts.list('mygroup', 'company', 'mycompany'); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + + '/contacts?group=mygroup&filter_field=company&filter_value=mycompany' + ); + assert.equal(lastCall[1]!.method, 'GET'); - await contacts.get("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') - assert.equal(lastCall[1]!.method,'GET') + await contacts.get('EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + '/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + assert.equal(lastCall[1]!.method, 'GET'); let info = { - "name": "John Doe", - "company": "My Company" - } - await contacts.add("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao",info) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') - assert.equal(lastCall[1]!.method,'POST') - assert.deepEqual(lastBody,info) - - await contacts.update("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao",info) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') - assert.equal(lastCall[1]!.method,'PUT') - assert.deepEqual(lastBody,info) - - await contacts.delete("EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') - assert.equal(lastCall[1]!.method,'DELETE') - - }) + name: 'John Doe', + company: 'My Company', + }; + await contacts.add( + 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + info + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + let lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal( + lastCall[0]!, + url + '/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + assert.equal(lastCall[1]!.method, 'POST'); + assert.deepEqual(lastBody, info); + + await contacts.update( + 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + info + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal( + lastCall[0]!, + url + '/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + assert.equal(lastCall[1]!.method, 'PUT'); + assert.deepEqual(lastBody, info); + + await contacts.delete('EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal( + lastCall[0]!, + url + '/contacts/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + assert.equal(lastCall[1]!.method, 'DELETE'); + }); it('Challenges', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let challenges = client.challenges() - - - await challenges.generate(128) - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/challenges?strength=128') - assert.equal(lastCall[1]!.method,'GET') - - const words = ["shell", "gloom", "mimic", "cereal", "stool", "furnace", "nominee", "nation", "sauce", "sausage", "rather", "venue"] - await challenges.respond("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p",words) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/identifiers/aid1/exchanges') - assert.equal(lastCall[1]!.method,'POST') - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastBody.tpc,"challenge") - assert.equal(lastBody.exn.r,"/challenge/response") - assert.equal(lastBody.exn.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.deepEqual(lastBody.exn.a.words,words) - assert.equal(lastBody.sigs[0].length,88) - - await challenges.verify("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p",words) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/challenges/aid1/verify/EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p') - assert.equal(lastCall[1]!.method,'POST') - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.deepEqual(lastBody.words,words) - - await challenges.responded("aid1","EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p","EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/challenges/aid1/verify/EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p') - assert.equal(lastCall[1]!.method,'PUT') - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastBody.said,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - - }) - - -}) \ No newline at end of file + const bran = '0123456789abcdefghijk'; + + let client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.boot(); + await client.connect(); + + let challenges = client.challenges(); + + await challenges.generate(128); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/challenges?strength=128'); + assert.equal(lastCall[1]!.method, 'GET'); + + const words = [ + 'shell', + 'gloom', + 'mimic', + 'cereal', + 'stool', + 'furnace', + 'nominee', + 'nation', + 'sauce', + 'sausage', + 'rather', + 'venue', + ]; + await challenges.respond( + 'aid1', + 'EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p', + words + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/identifiers/aid1/exchanges'); + assert.equal(lastCall[1]!.method, 'POST'); + let lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastBody.tpc, 'challenge'); + assert.equal(lastBody.exn.r, '/challenge/response'); + assert.equal( + lastBody.exn.i, + 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK' + ); + assert.deepEqual(lastBody.exn.a.words, words); + assert.equal(lastBody.sigs[0].length, 88); + + await challenges.verify( + 'aid1', + 'EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p', + words + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + + '/challenges/aid1/verify/EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p' + ); + assert.equal(lastCall[1]!.method, 'POST'); + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.deepEqual(lastBody.words, words); + + await challenges.responded( + 'aid1', + 'EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p', + 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + + '/challenges/aid1/verify/EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p' + ); + assert.equal(lastCall[1]!.method, 'PUT'); + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal( + lastBody.said, + 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + }); +}); diff --git a/test/app/controller.test.ts b/test/app/controller.test.ts index d31efe5c..b83479d2 100644 --- a/test/app/controller.test.ts +++ b/test/app/controller.test.ts @@ -1,31 +1,47 @@ -import {Controller} from "../../src/keri/app/controller"; -import {strict as assert} from "assert"; -import libsodium from "libsodium-wrappers-sumo"; -import {openManager} from "../../src/keri/core/manager"; -import {Signer} from "../../src/keri/core/signer"; -import {MtrDex} from "../../src/keri/core/matter"; -import {Tier} from "../../src"; +import { Controller } from '../../src/keri/app/controller'; +import { strict as assert } from 'assert'; +import libsodium from 'libsodium-wrappers-sumo'; +import { openManager } from '../../src/keri/core/manager'; +import { Signer } from '../../src/keri/core/signer'; +import { MtrDex } from '../../src/keri/core/matter'; +import { Tier } from '../../src'; describe('Controller', () => { it('manage account AID signing and agent verification', async () => { await libsodium.ready; - let passcode = "0123456789abcdefghijk" - let mgr = openManager(passcode) - assert.equal(mgr.aeid, "BMbZTXzB7LmWPT2TXLGV88PQz5vDEM2L2flUs2yxn3U9") + let passcode = '0123456789abcdefghijk'; + let mgr = openManager(passcode); + assert.equal(mgr.aeid, 'BMbZTXzB7LmWPT2TXLGV88PQz5vDEM2L2flUs2yxn3U9'); - let raw = new Uint8Array([187, 140, 234, 145, 219, 254, 20, 194, 16, 18, 97, 194, 140, 192, 61, 145, 222, 110, - 59, 160, 152, 2, 72, 122, 87, 143, 109, 39, 98, 153, 192, 148]) - let agentSigner = new Signer({raw: raw, code: MtrDex.Ed25519_Seed, transferable: false}) - assert.equal(agentSigner.verfer.qb64, "BHptu91ecGv_mxO8T3b98vNQUCghT8nfYkWRkVqOZark") + let raw = new Uint8Array([ + 187, 140, 234, 145, 219, 254, 20, 194, 16, 18, 97, 194, 140, 192, + 61, 145, 222, 110, 59, 160, 152, 2, 72, 122, 87, 143, 109, 39, 98, + 153, 192, 148, + ]); + let agentSigner = new Signer({ + raw: raw, + code: MtrDex.Ed25519_Seed, + transferable: false, + }); + assert.equal( + agentSigner.verfer.qb64, + 'BHptu91ecGv_mxO8T3b98vNQUCghT8nfYkWRkVqOZark' + ); // New account needed. Send to remote my name and encryption pubk and get back // their pubk and and my encrypted account package // let pkg = {} - let controller = new Controller(passcode, Tier.low) - assert.equal(controller.pre, "ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose") + let controller = new Controller(passcode, Tier.low); + assert.equal( + controller.pre, + 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose' + ); - passcode = "abcdefghijk0123456789" - controller = new Controller(passcode, Tier.low) - assert.equal(controller.pre, "EIIY2SgE_bqKLl2MlnREUawJ79jTuucvWwh-S6zsSUFo") - }) -}) \ No newline at end of file + passcode = 'abcdefghijk0123456789'; + controller = new Controller(passcode, Tier.low); + assert.equal( + controller.pre, + 'EIIY2SgE_bqKLl2MlnREUawJ79jTuucvWwh-S6zsSUFo' + ); + }); +}); diff --git a/test/app/coring.test.ts b/test/app/coring.test.ts index a2b2f421..7490bfd2 100644 --- a/test/app/coring.test.ts +++ b/test/app/coring.test.ts @@ -1,218 +1,281 @@ -import {strict as assert} from "assert"; -import libsodium from "libsodium-wrappers-sumo" -import { randomPasscode, randomNonce } from "../../src/keri/app/coring"; -import { SignifyClient } from "../../src/keri/app/clienting"; -import { Authenticater } from "../../src/keri/core/authing" -import { Salter, Tier } from "../../src/keri/core/salter" -import fetchMock from "jest-fetch-mock" -import 'whatwg-fetch' +import { strict as assert } from 'assert'; +import libsodium from 'libsodium-wrappers-sumo'; +import { randomPasscode, randomNonce } from '../../src/keri/app/coring'; +import { SignifyClient } from '../../src/keri/app/clienting'; +import { Authenticater } from '../../src/keri/core/authing'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import fetchMock from 'jest-fetch-mock'; +import 'whatwg-fetch'; fetchMock.enableMocks(); -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; fetchMock.enableMocks(); -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ - '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ - '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ - '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ - '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ - '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ - '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ - '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ - '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ - '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ - '"pidx":0}' -const mockGetAID ={ - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true +const mockConnect = + '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],' + + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},' + + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",' + + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},' + + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + + '"pidx":0}'; +const mockGetAID = { + name: 'aid1', + prefix: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + salty: { + sxlt: '1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A', + pidx: 0, + kidx: 0, + stem: 'signify:aid', + tier: 'low', + dcode: 'E', + icodes: ['A'], + ncodes: ['A'], + transferable: true, }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] + transferable: true, + state: { + vn: [1, 0], + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '0', + p: '', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + f: '0', + dt: '2023-08-21T22:30:46.473545+00:00', + et: 'icp', + kt: '1', + k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], + nt: '1', + n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], + bt: '0', + b: [], + c: [], + ee: { + s: '0', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + br: [], + ba: [], }, - "di": "" + di: '', }, - "windexes": [] -} - -const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} - + windexes: [], +}; + +const mockCredential = { + sad: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17', + }, + }, + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sadsigers: [ + { + path: '-', + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sn: 0, + d: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + }, + ], + sadcigars: [], + chains: [], + status: { + v: 'KERI10JSON000135_', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + ra: {}, + a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, + dt: '2023-08-23T15:16:07.553000+00:00', + et: 'iss', + }, +}; -fetchMock.mockResponse(req => { - if (req.url.startsWith(url+'/agent')) { - return Promise.resolve({body: mockConnect, init:{ status: 202 }}) - } else if (req.url == boot_url+'/boot') { - return Promise.resolve({body: "", init:{ status: 202 }}) +fetchMock.mockResponse((req) => { + if (req.url.startsWith(url + '/agent')) { + return Promise.resolve({ body: mockConnect, init: { status: 202 } }); + } else if (req.url == boot_url + '/boot') { + return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers() - let signed_headers = new Headers() - - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - const requrl = new URL(req.url) - let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) - let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) - - let authn = new Authenticater(signer!,signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID - - return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) + let headers = new Headers(); + let signed_headers = new Headers(); + + headers.set( + 'Signify-Resource', + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); + headers.set('Content-Type', 'application/json'); + + const requrl = new URL(req.url); + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + let signer = salter.signer( + 'A', + true, + 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', + Tier.low + ); + + let authn = new Authenticater(signer!, signer!.verfer); + signed_headers = authn.sign( + headers, + req.method, + requrl.pathname.split('?')[0] + ); + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + ? mockCredential + : mockGetAID; + + return Promise.resolve({ + body: JSON.stringify(body), + init: { status: 202, headers: signed_headers }, + }); } - -}) +}); describe('Coring', () => { it('Random passcode', async () => { await libsodium.ready; - let passcode = randomPasscode() - assert.equal(passcode.length, 22) - }) + let passcode = randomPasscode(); + assert.equal(passcode.length, 22); + }); it('Random nonce', async () => { await libsodium.ready; - let nonce = randomNonce() - assert.equal(nonce.length, 44) - }) + let nonce = randomNonce(); + assert.equal(nonce.length, 44); + }); it('OOBIs', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" + const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url) + let client = new SignifyClient(url, bran, Tier.low, boot_url); - await client.boot() - await client.connect() + await client.boot(); + await client.connect(); - let oobis = client.oobis() + let oobis = client.oobis(); - await oobis.get("aid","agent") - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/identifiers/aid/oobis?role=agent') - assert.equal(lastCall[1]!.method,'GET') + await oobis.get('aid', 'agent'); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/identifiers/aid/oobis?role=agent'); + assert.equal(lastCall[1]!.method, 'GET'); - await oobis.resolve("http://oobiurl.com") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/oobis') - assert.equal(lastCall[1]!.method,'POST') - assert.deepEqual(lastBody.url,"http://oobiurl.com") - - await oobis.resolve("http://oobiurl.com","witness") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/oobis') - assert.equal(lastCall[1]!.method,'POST') - assert.deepEqual(lastBody.url,"http://oobiurl.com") - assert.deepEqual(lastBody.oobialias,"witness") + await oobis.resolve('http://oobiurl.com'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + let lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/oobis'); + assert.equal(lastCall[1]!.method, 'POST'); + assert.deepEqual(lastBody.url, 'http://oobiurl.com'); - }) + await oobis.resolve('http://oobiurl.com', 'witness'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/oobis'); + assert.equal(lastCall[1]!.method, 'POST'); + assert.deepEqual(lastBody.url, 'http://oobiurl.com'); + assert.deepEqual(lastBody.oobialias, 'witness'); + }); it('Operations', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) + const bran = '0123456789abcdefghijk'; - await client.boot() - await client.connect() + let client = new SignifyClient(url, bran, Tier.low, boot_url); - let ops = client.operations() + await client.boot(); + await client.connect(); - await ops.get("operationName") - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/operations/operationName') - assert.equal(lastCall[1]!.method,'GET') + let ops = client.operations(); - - }) + await ops.get('operationName'); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/operations/operationName'); + assert.equal(lastCall[1]!.method, 'GET'); + }); it('Events and states', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let keyEvents = client.keyEvents() - let keyStates = client.keyStates() - - await keyEvents.get("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/events?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX') - assert.equal(lastCall[1]!.method,'GET') - - await keyStates.get("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/states?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX') - assert.equal(lastCall[1]!.method,'GET') - - await keyStates.list(["EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX","ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK"]) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/states?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX&pre=ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK') - assert.equal(lastCall[1]!.method,'GET') - - await keyStates.query("EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX",1,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/queries') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.pre,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - assert.equal(lastBody.sn,1) - assert.equal(lastBody.anchor,"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao") - }) - -}) \ No newline at end of file + const bran = '0123456789abcdefghijk'; + + let client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.boot(); + await client.connect(); + + let keyEvents = client.keyEvents(); + let keyStates = client.keyStates(); + + await keyEvents.get('EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX'); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + '/events?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' + ); + assert.equal(lastCall[1]!.method, 'GET'); + + await keyStates.get('EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + '/states?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' + ); + assert.equal(lastCall[1]!.method, 'GET'); + + await keyStates.list([ + 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX', + 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + ]); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + + '/states?pre=EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX&pre=ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK' + ); + assert.equal(lastCall[1]!.method, 'GET'); + + await keyStates.query( + 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX', + 1, + 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + let lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/queries'); + assert.equal(lastCall[1]!.method, 'POST'); + assert.equal( + lastBody.pre, + 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' + ); + assert.equal(lastBody.sn, 1); + assert.equal( + lastBody.anchor, + 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + }); +}); diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index 921baedf..49576f98 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -1,213 +1,316 @@ -import {strict as assert} from "assert" -import { SignifyClient } from "../../src/keri/app/clienting" +import { strict as assert } from 'assert'; +import { SignifyClient } from '../../src/keri/app/clienting'; -import { Authenticater } from "../../src/keri/core/authing" -import { Salter, Tier } from "../../src/keri/core/salter" -import libsodium from "libsodium-wrappers-sumo" -import fetchMock from "jest-fetch-mock" -import 'whatwg-fetch' +import { Authenticater } from '../../src/keri/core/authing'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import libsodium from 'libsodium-wrappers-sumo'; +import fetchMock from 'jest-fetch-mock'; +import 'whatwg-fetch'; fetchMock.enableMocks(); -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" - -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ - '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ - '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ - '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ - '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ - '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ - '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ - '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ - '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ - '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ - '"pidx":0}' -const mockGetAID ={ - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; + +const mockConnect = + '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],' + + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},' + + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",' + + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},' + + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + + '"pidx":0}'; +const mockGetAID = { + name: 'aid1', + prefix: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + salty: { + sxlt: '1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A', + pidx: 0, + kidx: 0, + stem: 'signify:aid', + tier: 'low', + dcode: 'E', + icodes: ['A'], + ncodes: ['A'], + transferable: true, }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] + transferable: true, + state: { + vn: [1, 0], + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '0', + p: '', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + f: '0', + dt: '2023-08-21T22:30:46.473545+00:00', + et: 'icp', + kt: '1', + k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], + nt: '1', + n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], + bt: '0', + b: [], + c: [], + ee: { + s: '0', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + br: [], + ba: [], }, - "di": "" + di: '', }, - "windexes": [] -} - -const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} + windexes: [], +}; +const mockCredential = { + sad: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17', + }, + }, + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sadsigers: [ + { + path: '-', + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sn: 0, + d: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + }, + ], + sadcigars: [], + chains: [], + status: { + v: 'KERI10JSON000135_', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + ra: {}, + a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, + dt: '2023-08-23T15:16:07.553000+00:00', + et: 'iss', + }, +}; -fetchMock.mockResponse(req => { - if (req.url.startsWith(url+'/agent')) { - return Promise.resolve({body: mockConnect, init:{ status: 202 }}) - } else if (req.url == boot_url+'/boot') { - return Promise.resolve({body: "", init:{ status: 202 }}) +fetchMock.mockResponse((req) => { + if (req.url.startsWith(url + '/agent')) { + return Promise.resolve({ body: mockConnect, init: { status: 202 } }); + } else if (req.url == boot_url + '/boot') { + return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers() - let signed_headers = new Headers() - - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - const requrl = new URL(req.url) - let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) - let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) - - let authn = new Authenticater(signer!,signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID - - return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) - } + let headers = new Headers(); + let signed_headers = new Headers(); + + headers.set( + 'Signify-Resource', + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); + headers.set('Content-Type', 'application/json'); -}) + const requrl = new URL(req.url); + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + let signer = salter.signer( + 'A', + true, + 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', + Tier.low + ); + + let authn = new Authenticater(signer!, signer!.verfer); + signed_headers = authn.sign( + headers, + req.method, + requrl.pathname.split('?')[0] + ); + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + ? mockCredential + : mockGetAID; + + return Promise.resolve({ + body: JSON.stringify(body), + init: { status: 202, headers: signed_headers }, + }); + } +}); describe('Credentialing', () => { it('Credentials', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" + const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url) + let client = new SignifyClient(url, bran, Tier.low, boot_url); - await client.boot() - await client.connect() + await client.boot(); + await client.connect(); - let credentials = client.credentials() + let credentials = client.credentials(); let kargs = { - filter:{"-i": {"$eq": "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX"}}, - sort: [{"-s": 1}], + filter: { + '-i': { $eq: 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' }, + }, + sort: [{ '-s': 1 }], limit: 25, - skip: 5 - } - await credentials.list("aid1",kargs) - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - let lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/query') - assert.equal(lastCall[1]!.method,'POST') - assert.deepEqual(lastBody,kargs) - - await credentials.get("aid1","EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao",true) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao') - assert.equal(lastCall[1]!.method,'GET') - - const registry = "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX" - const schema = "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao" - const isuee = "EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p" - await credentials.issue('aid1',registry,schema,isuee,{LEI: '1234'},{},{},false) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.cred.ri,registry) - assert.equal(lastBody.cred.s,schema) - assert.equal(lastBody.cred.a.i,isuee) - assert.equal(lastBody.cred.a.LEI,'1234') - assert.equal(lastBody.iss.s,"0") - assert.equal(lastBody.iss.t,"iss") - assert.equal(lastBody.iss.ri,registry) - assert.equal(lastBody.iss.i,lastBody.cred.d) - assert.equal(lastBody.ixn.t,"ixn") - assert.equal(lastBody.ixn.i,lastBody.cred.i) - assert.equal(lastBody.ixn.p,lastBody.cred.i) - assert.equal(lastBody.path,'6AABAAA-') - assert.equal(lastBody.csigs[0].substring(0,2),'AA') - assert.equal(lastBody.csigs[0].length,88) - assert.equal(lastBody.sigs[0].substring(0,2),'AA') - assert.equal(lastBody.sigs[0].length,88) - - const credential = lastBody.cred.i - await credentials.revoke('aid1',credential) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/'+credential) - assert.equal(lastCall[1]!.method,'DELETE') - assert.equal(lastBody.rev.s,"1") - assert.equal(lastBody.rev.t,"rev") - assert.equal(lastBody.rev.ri,"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df") - assert.equal(lastBody.rev.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.equal(lastBody.ixn.t,"ixn") - assert.equal(lastBody.ixn.i,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.equal(lastBody.ixn.p,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.equal(lastBody.sigs[0].substring(0,2),'AA') - assert.equal(lastBody.sigs[0].length,88) - - await credentials.present('aid1',credential, "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX",false) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/credentials/'+credential+'/presentations') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.exn.t,"exn") - assert.equal(lastBody.exn.r,"/presentation") - assert.equal(lastBody.exn.a.n,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.equal(lastBody.exn.a.s,schema) - assert.equal(lastBody.sig.length,144) - assert.equal(lastBody.recipient,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - assert.equal(lastBody.include, false) - - await credentials.request('aid1', "EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX", credential,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - lastBody = JSON.parse(lastCall[1]!.body!.toString()) - assert.equal(lastCall[0]!,url+'/identifiers/aid1/requests') - assert.equal(lastCall[1]!.method,'POST') - assert.equal(lastBody.exn.t,"exn") - assert.equal(lastBody.exn.r,"/presentation/request") - assert.equal(lastBody.exn.a.i,registry) - assert.equal(lastBody.exn.a.s,"ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK") - assert.equal(lastBody.sig.length,144) - assert.equal(lastBody.recipient,"EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX") - - }) - - -}) \ No newline at end of file + skip: 5, + }; + await credentials.list('aid1', kargs); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + let lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/identifiers/aid1/credentials/query'); + assert.equal(lastCall[1]!.method, 'POST'); + assert.deepEqual(lastBody, kargs); + + await credentials.get( + 'aid1', + 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + true + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + + '/identifiers/aid1/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + assert.equal(lastCall[1]!.method, 'GET'); + + const registry = 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX'; + const schema = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; + const isuee = 'EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p'; + await credentials.issue( + 'aid1', + registry, + schema, + isuee, + { LEI: '1234' }, + {}, + {}, + false + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/identifiers/aid1/credentials'); + assert.equal(lastCall[1]!.method, 'POST'); + assert.equal(lastBody.cred.ri, registry); + assert.equal(lastBody.cred.s, schema); + assert.equal(lastBody.cred.a.i, isuee); + assert.equal(lastBody.cred.a.LEI, '1234'); + assert.equal(lastBody.iss.s, '0'); + assert.equal(lastBody.iss.t, 'iss'); + assert.equal(lastBody.iss.ri, registry); + assert.equal(lastBody.iss.i, lastBody.cred.d); + assert.equal(lastBody.ixn.t, 'ixn'); + assert.equal(lastBody.ixn.i, lastBody.cred.i); + assert.equal(lastBody.ixn.p, lastBody.cred.i); + assert.equal(lastBody.path, '6AABAAA-'); + assert.equal(lastBody.csigs[0].substring(0, 2), 'AA'); + assert.equal(lastBody.csigs[0].length, 88); + assert.equal(lastBody.sigs[0].substring(0, 2), 'AA'); + assert.equal(lastBody.sigs[0].length, 88); + + const credential = lastBody.cred.i; + await credentials.revoke('aid1', credential); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal( + lastCall[0]!, + url + '/identifiers/aid1/credentials/' + credential + ); + assert.equal(lastCall[1]!.method, 'DELETE'); + assert.equal(lastBody.rev.s, '1'); + assert.equal(lastBody.rev.t, 'rev'); + assert.equal( + lastBody.rev.ri, + 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df' + ); + assert.equal( + lastBody.rev.i, + 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK' + ); + assert.equal(lastBody.ixn.t, 'ixn'); + assert.equal( + lastBody.ixn.i, + 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK' + ); + assert.equal( + lastBody.ixn.p, + 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK' + ); + assert.equal(lastBody.sigs[0].substring(0, 2), 'AA'); + assert.equal(lastBody.sigs[0].length, 88); + + await credentials.present( + 'aid1', + credential, + 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX', + false + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal( + lastCall[0]!, + url + + '/identifiers/aid1/credentials/' + + credential + + '/presentations' + ); + assert.equal(lastCall[1]!.method, 'POST'); + assert.equal(lastBody.exn.t, 'exn'); + assert.equal(lastBody.exn.r, '/presentation'); + assert.equal( + lastBody.exn.a.n, + 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK' + ); + assert.equal(lastBody.exn.a.s, schema); + assert.equal(lastBody.sig.length, 144); + assert.equal( + lastBody.recipient, + 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' + ); + assert.equal(lastBody.include, false); + + await credentials.request( + 'aid1', + 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX', + credential, + 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + lastBody = JSON.parse(lastCall[1]!.body!.toString()); + assert.equal(lastCall[0]!, url + '/identifiers/aid1/requests'); + assert.equal(lastCall[1]!.method, 'POST'); + assert.equal(lastBody.exn.t, 'exn'); + assert.equal(lastBody.exn.r, '/presentation/request'); + assert.equal(lastBody.exn.a.i, registry); + assert.equal( + lastBody.exn.a.s, + 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK' + ); + assert.equal(lastBody.sig.length, 144); + assert.equal( + lastBody.recipient, + 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' + ); + }); +}); diff --git a/test/app/escrowing.test.ts b/test/app/escrowing.test.ts index 825d580b..70eb71ce 100644 --- a/test/app/escrowing.test.ts +++ b/test/app/escrowing.test.ts @@ -1,17 +1,18 @@ -import { strict as assert } from "assert" -import { SignifyClient } from "../../src/keri/app/clienting" -import { Authenticater } from "../../src/keri/core/authing" -import { Salter, Tier } from "../../src/keri/core/salter" -import fetchMock from "jest-fetch-mock" -import libsodium from "libsodium-wrappers-sumo" -import 'whatwg-fetch' +import { strict as assert } from 'assert'; +import { SignifyClient } from '../../src/keri/app/clienting'; +import { Authenticater } from '../../src/keri/core/authing'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import fetchMock from 'jest-fetch-mock'; +import libsodium from 'libsodium-wrappers-sumo'; +import 'whatwg-fetch'; fetchMock.enableMocks(); -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + +const mockConnect = + '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + @@ -27,108 +28,151 @@ const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3Acy '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + - '"pidx":0}' + '"pidx":0}'; const mockGetAID = { - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true + name: 'aid1', + prefix: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + salty: { + sxlt: '1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A', + pidx: 0, + kidx: 0, + stem: 'signify:aid', + tier: 'low', + dcode: 'E', + icodes: ['A'], + ncodes: ['A'], + transferable: true, }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] + transferable: true, + state: { + vn: [1, 0], + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '0', + p: '', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + f: '0', + dt: '2023-08-21T22:30:46.473545+00:00', + et: 'icp', + kt: '1', + k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], + nt: '1', + n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], + bt: '0', + b: [], + c: [], + ee: { + s: '0', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + br: [], + ba: [], }, - "di": "" + di: '', }, - "windexes": [] -} - -const mockCredential = { "sad": { "v": "ACDC10JSON000197_", "d": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "i": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "s": "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao", "a": { "d": "EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P", "i": "EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby", "dt": "2023-08-23T15:16:07.553000+00:00", "LEI": "5493001KJTIIGC8Y1R17" } }, "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sadsigers": [{ "path": "-", "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sn": 0, "d": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1" }], "sadcigars": [], "chains": [], "status": { "v": "KERI10JSON000135_", "i": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "s": "0", "d": "ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "ra": {}, "a": { "s": 2, "d": "EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt" }, "dt": "2023-08-23T15:16:07.553000+00:00", "et": "iss" } } - + windexes: [], +}; + +const mockCredential = { + sad: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17', + }, + }, + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sadsigers: [ + { + path: '-', + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sn: 0, + d: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + }, + ], + sadcigars: [], + chains: [], + status: { + v: 'KERI10JSON000135_', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + ra: {}, + a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, + dt: '2023-08-23T15:16:07.553000+00:00', + et: 'iss', + }, +}; -fetchMock.mockResponse(req => { +fetchMock.mockResponse((req) => { if (req.url.startsWith(url + '/agent')) { - return Promise.resolve({ body: mockConnect, init: { status: 202 } }) + return Promise.resolve({ body: mockConnect, init: { status: 202 } }); } else if (req.url == boot_url + '/boot') { - return Promise.resolve({ body: "", init: { status: 202 } }) + return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers() - let signed_headers = new Headers() - - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - const requrl = new URL(req.url) - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }) - let signer = salter.signer("A", true, "agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00", Tier.low) - - let authn = new Authenticater(signer!, signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID - - return Promise.resolve({ body: JSON.stringify(body), init: { status: 202, headers: signed_headers } }) + let headers = new Headers(); + let signed_headers = new Headers(); + + headers.set( + 'Signify-Resource', + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); + headers.set('Content-Type', 'application/json'); + + const requrl = new URL(req.url); + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + let signer = salter.signer( + 'A', + true, + 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', + Tier.low + ); + + let authn = new Authenticater(signer!, signer!.verfer); + signed_headers = authn.sign( + headers, + req.method, + requrl.pathname.split('?')[0] + ); + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + ? mockCredential + : mockGetAID; + + return Promise.resolve({ + body: JSON.stringify(body), + init: { status: 202, headers: signed_headers }, + }); } - -}) +}); describe('SignifyClient', () => { - - it('Escrows', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let escrows = client.escrows() - - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - await escrows.listReply('/presentation/request') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - assert.equal(lastCall[0]!, url + '/escrows/rpy?route=%2Fpresentation%2Frequest') - assert.equal(lastCall[1]!.method, 'GET') - - }) - -}) \ No newline at end of file + it('Escrows', async () => { + await libsodium.ready; + const bran = '0123456789abcdefghijk'; + + let client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.boot(); + await client.connect(); + + let escrows = client.escrows(); + + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + await escrows.listReply('/presentation/request'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + '/escrows/rpy?route=%2Fpresentation%2Frequest' + ); + assert.equal(lastCall[1]!.method, 'GET'); + }); +}); diff --git a/test/app/exchanging.test.ts b/test/app/exchanging.test.ts index e3c9ff28..fb9714b3 100644 --- a/test/app/exchanging.test.ts +++ b/test/app/exchanging.test.ts @@ -1,17 +1,29 @@ -import {strict as assert} from "assert"; -import {b, d, Dict, Diger, exchange, Ilks, MtrDex, Salter, Serder, Tier} from "../../src"; -import libsodium from "libsodium-wrappers-sumo"; -import { SignifyClient } from "../../src/keri/app/clienting" -import { Authenticater } from "../../src/keri/core/authing" -import fetchMock from "jest-fetch-mock" -import 'whatwg-fetch' +import { strict as assert } from 'assert'; +import { + b, + d, + Dict, + Diger, + exchange, + Ilks, + MtrDex, + Salter, + Serder, + Tier, +} from '../../src'; +import libsodium from 'libsodium-wrappers-sumo'; +import { SignifyClient } from '../../src/keri/app/clienting'; +import { Authenticater } from '../../src/keri/core/authing'; +import fetchMock from 'jest-fetch-mock'; +import 'whatwg-fetch'; fetchMock.enableMocks(); -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + +const mockConnect = + '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + @@ -27,124 +39,189 @@ const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3Acy '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + - '"pidx":0}' + '"pidx":0}'; const mockGetAID = { - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true + name: 'aid1', + prefix: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + salty: { + sxlt: '1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A', + pidx: 0, + kidx: 0, + stem: 'signify:aid', + tier: 'low', + dcode: 'E', + icodes: ['A'], + ncodes: ['A'], + transferable: true, }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] + transferable: true, + state: { + vn: [1, 0], + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '0', + p: '', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + f: '0', + dt: '2023-08-21T22:30:46.473545+00:00', + et: 'icp', + kt: '1', + k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], + nt: '1', + n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], + bt: '0', + b: [], + c: [], + ee: { + s: '0', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + br: [], + ba: [], }, - "di": "" + di: '', }, - "windexes": [] -} - -const mockCredential = { "sad": { "v": "ACDC10JSON000197_", "d": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "i": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "s": "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao", "a": { "d": "EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P", "i": "EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby", "dt": "2023-08-23T15:16:07.553000+00:00", "LEI": "5493001KJTIIGC8Y1R17" } }, "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sadsigers": [{ "path": "-", "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sn": 0, "d": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1" }], "sadcigars": [], "chains": [], "status": { "v": "KERI10JSON000135_", "i": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "s": "0", "d": "ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "ra": {}, "a": { "s": 2, "d": "EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt" }, "dt": "2023-08-23T15:16:07.553000+00:00", "et": "iss" } } - + windexes: [], +}; + +const mockCredential = { + sad: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17', + }, + }, + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sadsigers: [ + { + path: '-', + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sn: 0, + d: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + }, + ], + sadcigars: [], + chains: [], + status: { + v: 'KERI10JSON000135_', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + ra: {}, + a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, + dt: '2023-08-23T15:16:07.553000+00:00', + et: 'iss', + }, +}; -fetchMock.mockResponse(req => { +fetchMock.mockResponse((req) => { if (req.url.startsWith(url + '/agent')) { - return Promise.resolve({ body: mockConnect, init: { status: 202 } }) + return Promise.resolve({ body: mockConnect, init: { status: 202 } }); } else if (req.url == boot_url + '/boot') { - return Promise.resolve({ body: "", init: { status: 202 } }) + return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers() - let signed_headers = new Headers() - - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - const requrl = new URL(req.url) - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }) - let signer = salter.signer("A", true, "agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00", Tier.low) - - let authn = new Authenticater(signer!, signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID - - return Promise.resolve({ body: JSON.stringify(body), init: { status: 202, headers: signed_headers } }) + let headers = new Headers(); + let signed_headers = new Headers(); + + headers.set( + 'Signify-Resource', + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); + headers.set('Content-Type', 'application/json'); + + const requrl = new URL(req.url); + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + let signer = salter.signer( + 'A', + true, + 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', + Tier.low + ); + + let authn = new Authenticater(signer!, signer!.verfer); + signed_headers = authn.sign( + headers, + req.method, + requrl.pathname.split('?')[0] + ); + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + ? mockCredential + : mockGetAID; + + return Promise.resolve({ + body: JSON.stringify(body), + init: { status: 202, headers: signed_headers }, + }); } +}); -}) - - -describe("exchange", () => { - it("should create an exchange message with no transposed attachments", async () => { - await libsodium.ready - let dt = "2023-08-30T17:22:54.183Z" +describe('exchange', () => { + it('should create an exchange message with no transposed attachments', async () => { + await libsodium.ready; + let dt = '2023-08-30T17:22:54.183Z'; - let [exn, end] = exchange("/multisig/vcp", {}, "test", undefined, dt) + let [exn, end] = exchange('/multisig/vcp', {}, 'test', undefined, dt); assert.deepStrictEqual(exn.ked, { - "a": {}, "d": "EMhxioc6Ud9b3JZ4X9o79uytSRIXXNDUf27ruwiOmNdQ", "dt": "2023-08-30T17:22:54.183Z", "e": {}, - "i": "test", - "p": "", "q": {}, "r": "/multisig/vcp", "t": "exn", "v": "KERI10JSON0000b1_" - } - ) - assert.deepStrictEqual(end, new Uint8Array()) - - let sith = 1 - let nsith = 1 - let sn = 0 - let toad = 0 - - let raw = new Uint8Array([5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, 117]) - let salter = new Salter({raw: raw}) - let skp0 = salter.signer(MtrDex.Ed25519_Seed, true, "A", Tier.low, true) - let keys = [skp0.verfer.qb64] - - let skp1 = salter.signer(MtrDex.Ed25519_Seed, true, "N", Tier.low, true) - let ndiger = new Diger({}, skp1.verfer.qb64b) - let nxt = [ndiger.qb64] - assert.deepStrictEqual(nxt, ['EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj']) + a: {}, + d: 'EMhxioc6Ud9b3JZ4X9o79uytSRIXXNDUf27ruwiOmNdQ', + dt: '2023-08-30T17:22:54.183Z', + e: {}, + i: 'test', + p: '', + q: {}, + r: '/multisig/vcp', + t: 'exn', + v: 'KERI10JSON0000b1_', + }); + assert.deepStrictEqual(end, new Uint8Array()); + + let sith = 1; + let nsith = 1; + let sn = 0; + let toad = 0; + + let raw = new Uint8Array([ + 5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, + 117, + ]); + let salter = new Salter({ raw: raw }); + let skp0 = salter.signer( + MtrDex.Ed25519_Seed, + true, + 'A', + Tier.low, + true + ); + let keys = [skp0.verfer.qb64]; + + let skp1 = salter.signer( + MtrDex.Ed25519_Seed, + true, + 'N', + Tier.low, + true + ); + let ndiger = new Diger({}, skp1.verfer.qb64b); + let nxt = [ndiger.qb64]; + assert.deepStrictEqual(nxt, [ + 'EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj', + ]); let ked0 = { - v: "KERI10JSON000000_", + v: 'KERI10JSON000000_', t: Ilks.icp, - d: "", - i: "", + d: '', + i: '', s: sn.toString(16), kt: sith.toString(16), k: keys, @@ -154,96 +231,133 @@ describe("exchange", () => { b: [], c: [], a: [], - } as Dict + } as Dict; - let serder = new Serder(ked0) - let siger = skp0.sign(b(serder.raw), 0) - assert.equal(siger.qb64, "AAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI") + let serder = new Serder(ked0); + let siger = skp0.sign(b(serder.raw), 0); + assert.equal( + siger.qb64, + 'AAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI' + ); let ked1 = { - v: "KERI10JSON000000_", + v: 'KERI10JSON000000_', t: Ilks.vcp, - d: "", - i: "", - s: "0", + d: '', + i: '', + s: '0', bt: toad.toString(16), - b: [] - } as Dict - let vcp = new Serder(ked1) - + b: [], + } as Dict; + let vcp = new Serder(ked1); let embeds = { icp: [serder, siger.qb64], - vcp: [vcp, undefined] - } as Dict - - [exn, end] = exchange("/multisig/vcp", {}, "test", undefined, dt, undefined, undefined, embeds) + vcp: [vcp, undefined], + } as Dict; + + [exn, end] = exchange( + '/multisig/vcp', + {}, + 'test', + undefined, + dt, + undefined, + undefined, + embeds + ); assert.deepStrictEqual(exn.ked, { - "a": {}, - "d": "EHDEXQx-i0KlQ8iVnITMLa144dAb7Kjq2KDTufDUyLcm", - "dt": "2023-08-30T17:22:54.183Z", - "e": { - "d": "EDPWpKtMoPwro_Of8TQzpNMGdtmfyWzqTcRKQ01fGFRi", - "icp": { - "a": [], - "b": [], - "bt": "0", - "c": [], - "d": "", - "i": "", - "k": ["DAUDqkmn-hqlQKD8W-FAEa5JUvJC2I9yarEem-AAEg3e"], - "kt": "1", - "n": ["EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj"], - "nt": "1", - "s": "0", - "t": "icp", - "v": "KERI10JSON0000d3_" + a: {}, + d: 'EHDEXQx-i0KlQ8iVnITMLa144dAb7Kjq2KDTufDUyLcm', + dt: '2023-08-30T17:22:54.183Z', + e: { + d: 'EDPWpKtMoPwro_Of8TQzpNMGdtmfyWzqTcRKQ01fGFRi', + icp: { + a: [], + b: [], + bt: '0', + c: [], + d: '', + i: '', + k: ['DAUDqkmn-hqlQKD8W-FAEa5JUvJC2I9yarEem-AAEg3e'], + kt: '1', + n: ['EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj'], + nt: '1', + s: '0', + t: 'icp', + v: 'KERI10JSON0000d3_', + }, + vcp: { + b: [], + bt: '0', + d: '', + i: '', + s: '0', + t: 'vcp', + v: 'KERI10JSON000049_', }, - "vcp": {"b": [], "bt": "0", "d": "", "i": "", "s": "0", "t": "vcp", "v": "KERI10JSON000049_"} }, - "i": "test", - "p": "", - "q": {}, - "r": "/multisig/vcp", - "t": "exn", - "v": "KERI10JSON00020d_" - }) - assert.equal(d(end), "-LAZ5AACAA-e-icpAAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI") - - - }) + i: 'test', + p: '', + q: {}, + r: '/multisig/vcp', + t: 'exn', + v: 'KERI10JSON00020d_', + }); + assert.equal( + d(end), + '-LAZ5AACAA-e-icpAAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI' + ); + }); it('SendFromEvents', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let exchange = client.exchanges() - let sith = 1 - let nsith = 1 - let sn = 0 - let toad = 0 - - let raw = new Uint8Array([5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, 117]) - let salter = new Salter({raw: raw}) - let skp0 = salter.signer(MtrDex.Ed25519_Seed, true, "A", Tier.low, true) - let keys = [skp0.verfer.qb64] - - let skp1 = salter.signer(MtrDex.Ed25519_Seed, true, "N", Tier.low, true) - let ndiger = new Diger({}, skp1.verfer.qb64b) - let nxt = [ndiger.qb64] - assert.deepStrictEqual(nxt, ['EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj']) + const bran = '0123456789abcdefghijk'; + + let client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.boot(); + await client.connect(); + + let exchange = client.exchanges(); + let sith = 1; + let nsith = 1; + let sn = 0; + let toad = 0; + + let raw = new Uint8Array([ + 5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, + 117, + ]); + let salter = new Salter({ raw: raw }); + let skp0 = salter.signer( + MtrDex.Ed25519_Seed, + true, + 'A', + Tier.low, + true + ); + let keys = [skp0.verfer.qb64]; + + let skp1 = salter.signer( + MtrDex.Ed25519_Seed, + true, + 'N', + Tier.low, + true + ); + let ndiger = new Diger({}, skp1.verfer.qb64b); + let nxt = [ndiger.qb64]; + assert.deepStrictEqual(nxt, [ + 'EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj', + ]); let ked0 = { - v: "KERI10JSON000000_", + v: 'KERI10JSON000000_', t: Ilks.icp, - d: "", - i: "", + d: '', + i: '', s: sn.toString(16), kt: sith.toString(16), k: keys, @@ -253,15 +367,14 @@ describe("exchange", () => { b: [], c: [], a: [], - } as Dict - - let serder = new Serder(ked0) + } as Dict; - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - await exchange.sendFromEvents('aid1','',serder,[''],'',[]) - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - assert.equal(lastCall[0]!, url + '/identifiers/aid1/exchanges') - assert.equal(lastCall[1]!.method, 'POST') + let serder = new Serder(ked0); - }) -}) \ No newline at end of file + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + await exchange.sendFromEvents('aid1', '', serder, [''], '', []); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/identifiers/aid1/exchanges'); + assert.equal(lastCall[1]!.method, 'POST'); + }); +}); diff --git a/test/app/grouping.test.ts b/test/app/grouping.test.ts index 45671e0f..6e85221a 100644 --- a/test/app/grouping.test.ts +++ b/test/app/grouping.test.ts @@ -1,17 +1,18 @@ -import { strict as assert } from "assert" -import { SignifyClient } from "../../src/keri/app/clienting" -import { Authenticater } from "../../src/keri/core/authing" -import { Salter, Tier } from "../../src/keri/core/salter" -import fetchMock from "jest-fetch-mock" -import libsodium from "libsodium-wrappers-sumo" -import 'whatwg-fetch' +import { strict as assert } from 'assert'; +import { SignifyClient } from '../../src/keri/app/clienting'; +import { Authenticater } from '../../src/keri/core/authing'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import fetchMock from 'jest-fetch-mock'; +import libsodium from 'libsodium-wrappers-sumo'; +import 'whatwg-fetch'; fetchMock.enableMocks(); -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + +const mockConnect = + '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + @@ -27,112 +28,158 @@ const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3Acy '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + - '"pidx":0}' + '"pidx":0}'; const mockGetAID = { - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true + name: 'aid1', + prefix: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + salty: { + sxlt: '1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A', + pidx: 0, + kidx: 0, + stem: 'signify:aid', + tier: 'low', + dcode: 'E', + icodes: ['A'], + ncodes: ['A'], + transferable: true, }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] + transferable: true, + state: { + vn: [1, 0], + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '0', + p: '', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + f: '0', + dt: '2023-08-21T22:30:46.473545+00:00', + et: 'icp', + kt: '1', + k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], + nt: '1', + n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], + bt: '0', + b: [], + c: [], + ee: { + s: '0', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + br: [], + ba: [], }, - "di": "" + di: '', }, - "windexes": [] -} - -const mockCredential = { "sad": { "v": "ACDC10JSON000197_", "d": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "i": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "s": "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao", "a": { "d": "EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P", "i": "EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby", "dt": "2023-08-23T15:16:07.553000+00:00", "LEI": "5493001KJTIIGC8Y1R17" } }, "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sadsigers": [{ "path": "-", "pre": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1", "sn": 0, "d": "EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1" }], "sadcigars": [], "chains": [], "status": { "v": "KERI10JSON000135_", "i": "EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo", "s": "0", "d": "ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW", "ri": "EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df", "ra": {}, "a": { "s": 2, "d": "EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt" }, "dt": "2023-08-23T15:16:07.553000+00:00", "et": "iss" } } - + windexes: [], +}; + +const mockCredential = { + sad: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17', + }, + }, + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sadsigers: [ + { + path: '-', + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sn: 0, + d: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + }, + ], + sadcigars: [], + chains: [], + status: { + v: 'KERI10JSON000135_', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + ra: {}, + a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, + dt: '2023-08-23T15:16:07.553000+00:00', + et: 'iss', + }, +}; -fetchMock.mockResponse(req => { +fetchMock.mockResponse((req) => { if (req.url.startsWith(url + '/agent')) { - return Promise.resolve({ body: mockConnect, init: { status: 202 } }) + return Promise.resolve({ body: mockConnect, init: { status: 202 } }); } else if (req.url == boot_url + '/boot') { - return Promise.resolve({ body: "", init: { status: 202 } }) + return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers() - let signed_headers = new Headers() - - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - const requrl = new URL(req.url) - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }) - let signer = salter.signer("A", true, "agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00", Tier.low) - - let authn = new Authenticater(signer!, signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID - - return Promise.resolve({ body: JSON.stringify(body), init: { status: 202, headers: signed_headers } }) + let headers = new Headers(); + let signed_headers = new Headers(); + + headers.set( + 'Signify-Resource', + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); + headers.set('Content-Type', 'application/json'); + + const requrl = new URL(req.url); + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + let signer = salter.signer( + 'A', + true, + 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', + Tier.low + ); + + let authn = new Authenticater(signer!, signer!.verfer); + signed_headers = authn.sign( + headers, + req.method, + requrl.pathname.split('?')[0] + ); + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + ? mockCredential + : mockGetAID; + + return Promise.resolve({ + body: JSON.stringify(body), + init: { status: 202, headers: signed_headers }, + }); } - -}) +}); describe('Grouping', () => { - - it('Groups', async () => { - await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let groups = client.groups() - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - await groups.sendRequest('aid1',{},[],"") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - assert.equal(lastCall[0]!, url + '/identifiers/aid1/multisig/request') - assert.equal(lastCall[1]!.method, 'POST') - - await groups.getRequest('ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00') - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]! - assert.equal(lastCall[0]!, url + '/multisig/request/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00') - assert.equal(lastCall[1]!.method, 'GET') - - }) - -}) \ No newline at end of file + it('Groups', async () => { + await libsodium.ready; + const bran = '0123456789abcdefghijk'; + + let client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.boot(); + await client.connect(); + + let groups = client.groups(); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + await groups.sendRequest('aid1', {}, [], ''); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/identifiers/aid1/multisig/request'); + assert.equal(lastCall[1]!.method, 'POST'); + + await groups.getRequest( + 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00' + ); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + + '/multisig/request/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00' + ); + assert.equal(lastCall[1]!.method, 'GET'); + }); +}); diff --git a/test/app/habery.test.ts b/test/app/habery.test.ts index 78f1fe66..3b46e04a 100644 --- a/test/app/habery.test.ts +++ b/test/app/habery.test.ts @@ -1,41 +1,57 @@ -import {Habery} from "../../src/keri/app/habery"; -import {strict as assert} from "assert"; -import libsodium from "libsodium-wrappers-sumo"; -import {Salter} from "../../src/keri/core/salter"; -import {b} from "../../src/keri/core/core"; -import {MtrDex} from "../../src/keri/core/matter"; +import { Habery } from '../../src/keri/app/habery'; +import { strict as assert } from 'assert'; +import libsodium from 'libsodium-wrappers-sumo'; +import { Salter } from '../../src/keri/core/salter'; +import { b } from '../../src/keri/core/core'; +import { MtrDex } from '../../src/keri/core/matter'; describe('Habery', () => { it('should manage AID creation and rotation', async () => { await libsodium.ready; - let salt = new Salter({raw: b('0123456789abcdef')}).qb64 - let hby = new Habery({name: "signify", salt: salt, passcode: "0123456789abcdefghijk"}) - - assert.equal(hby.mgr.aeid, "BMbZTXzB7LmWPT2TXLGV88PQz5vDEM2L2flUs2yxn3U9") - - let hab = hby.makeHab("test", {}) - - assert.deepStrictEqual(hab.serder.ked["k"], ["DAQVURvW74OJH1Q0C6YLim_tdBYoXABwg6GsAlPaUJXE"]) - assert.deepStrictEqual(hab.serder.ked["n"], ["ENBWnU8wNHqq9oqJIimWhxUtNDHReUXtiCwwtjg9zKY0"]) - }) + let salt = new Salter({ raw: b('0123456789abcdef') }).qb64; + let hby = new Habery({ + name: 'signify', + salt: salt, + passcode: '0123456789abcdefghijk', + }); + + assert.equal( + hby.mgr.aeid, + 'BMbZTXzB7LmWPT2TXLGV88PQz5vDEM2L2flUs2yxn3U9' + ); + + let hab = hby.makeHab('test', {}); + + assert.deepStrictEqual(hab.serder.ked['k'], [ + 'DAQVURvW74OJH1Q0C6YLim_tdBYoXABwg6GsAlPaUJXE', + ]); + assert.deepStrictEqual(hab.serder.ked['n'], [ + 'ENBWnU8wNHqq9oqJIimWhxUtNDHReUXtiCwwtjg9zKY0', + ]); + }); it('should use passcode as salt', async () => { - await libsodium.ready - let passcode = "0123456789abcdefghijk" + await libsodium.ready; + let passcode = '0123456789abcdefghijk'; if (passcode.length < 21) { - throw new Error("Bran (passcode seed material) too short.") + throw new Error('Bran (passcode seed material) too short.'); } - let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21) // qb64 salt for seed - let salter = new Salter({qb64: bran}) - let signer = salter.signer(MtrDex.Ed25519_Seed, true) - assert.equal(signer.qb64, "AKeXgiAUIN7OHGXO6rbw_IzWeaQTr1LF7jWD6YEdrpa6") - assert.equal(signer.verfer.qb64, "DMbZTXzB7LmWPT2TXLGV88PQz5vDEM2L2flUs2yxn3U9") - - let hby = new Habery({name: "test", salt: salter.qb64}) - let hab = hby.makeHab("test", {transferable: true}) - - assert.equal(hab.pre, "EMRbh7mWJTijcWiQKT3uxozncpa9_gEX1IU0fM1wnKxi") - - }) -}) \ No newline at end of file + let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21); // qb64 salt for seed + let salter = new Salter({ qb64: bran }); + let signer = salter.signer(MtrDex.Ed25519_Seed, true); + assert.equal( + signer.qb64, + 'AKeXgiAUIN7OHGXO6rbw_IzWeaQTr1LF7jWD6YEdrpa6' + ); + assert.equal( + signer.verfer.qb64, + 'DMbZTXzB7LmWPT2TXLGV88PQz5vDEM2L2flUs2yxn3U9' + ); + + let hby = new Habery({ name: 'test', salt: salter.qb64 }); + let hab = hby.makeHab('test', { transferable: true }); + + assert.equal(hab.pre, 'EMRbh7mWJTijcWiQKT3uxozncpa9_gEX1IU0fM1wnKxi'); + }); +}); diff --git a/test/app/notifying.test.ts b/test/app/notifying.test.ts index 44be8f71..ba265cb6 100644 --- a/test/app/notifying.test.ts +++ b/test/app/notifying.test.ts @@ -1,143 +1,186 @@ -import {strict as assert} from "assert" -import { Authenticater } from "../../src/keri/core/authing" -import { Salter, Tier } from "../../src/keri/core/salter" -import { SignifyClient } from "../../src/keri/app/clienting" -import libsodium from "libsodium-wrappers-sumo" -import fetchMock from "jest-fetch-mock" -import 'whatwg-fetch' +import { strict as assert } from 'assert'; +import { Authenticater } from '../../src/keri/core/authing'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import { SignifyClient } from '../../src/keri/app/clienting'; +import libsodium from 'libsodium-wrappers-sumo'; +import fetchMock from 'jest-fetch-mock'; +import 'whatwg-fetch'; fetchMock.enableMocks(); -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" - -const mockConnect = '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",'+ - '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",'+ - '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",'+ - '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",'+ - '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],'+ - '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},'+ - '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",'+ - '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",'+ - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},'+ - '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",'+ - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",'+ - '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",'+ - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,'+ - '"pidx":0}' -const mockGetAID ={ - "name": "aid1", - "prefix": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "salty": { - "sxlt": "1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A", - "pidx": 0, - "kidx": 0, - "stem": "signify:aid", - "tier": "low", - "dcode": "E", - "icodes": [ - "A" - ], - "ncodes": [ - "A" - ], - "transferable": true +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; + +const mockConnect = + '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + + '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + + '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + + '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + + '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],' + + '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},' + + '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",' + + '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",' + + '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},' + + '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + + '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + + '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + + '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + + '"pidx":0}'; +const mockGetAID = { + name: 'aid1', + prefix: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + salty: { + sxlt: '1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A', + pidx: 0, + kidx: 0, + stem: 'signify:aid', + tier: 'low', + dcode: 'E', + icodes: ['A'], + ncodes: ['A'], + transferable: true, }, - "transferable": true, - "state": { - "vn": [ - 1, - 0 - ], - "i": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "s": "0", - "p": "", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "f": "0", - "dt": "2023-08-21T22:30:46.473545+00:00", - "et": "icp", - "kt": "1", - "k": [ - "DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9" - ], - "nt": "1", - "n": [ - "EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc" - ], - "bt": "0", - "b": [], - "c": [], - "ee": { - "s": "0", - "d": "ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK", - "br": [], - "ba": [] + transferable: true, + state: { + vn: [1, 0], + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + s: '0', + p: '', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + f: '0', + dt: '2023-08-21T22:30:46.473545+00:00', + et: 'icp', + kt: '1', + k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], + nt: '1', + n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], + bt: '0', + b: [], + c: [], + ee: { + s: '0', + d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + br: [], + ba: [], }, - "di": "" + di: '', }, - "windexes": [] -} - -const mockCredential = {"sad":{"v":"ACDC10JSON000197_","d":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","i":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","s":"EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao","a":{"d":"EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P","i":"EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby","dt":"2023-08-23T15:16:07.553000+00:00","LEI":"5493001KJTIIGC8Y1R17"}},"pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sadsigers":[{"path":"-","pre":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1","sn":0,"d":"EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1"}],"sadcigars":[],"chains":[],"status":{"v":"KERI10JSON000135_","i":"EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo","s":"0","d":"ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW","ri":"EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df","ra":{},"a":{"s":2,"d":"EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt"},"dt":"2023-08-23T15:16:07.553000+00:00","et":"iss"}} - + windexes: [], +}; + +const mockCredential = { + sad: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17', + }, + }, + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sadsigers: [ + { + path: '-', + pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + sn: 0, + d: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + }, + ], + sadcigars: [], + chains: [], + status: { + v: 'KERI10JSON000135_', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + ra: {}, + a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, + dt: '2023-08-23T15:16:07.553000+00:00', + et: 'iss', + }, +}; -fetchMock.mockResponse(req => { - if (req.url.startsWith(url+'/agent')) { - return Promise.resolve({body: mockConnect, init:{ status: 202 }}) - } else if (req.url == boot_url+'/boot') { - return Promise.resolve({body: "", init:{ status: 202 }}) +fetchMock.mockResponse((req) => { + if (req.url.startsWith(url + '/agent')) { + return Promise.resolve({ body: mockConnect, init: { status: 202 } }); + } else if (req.url == boot_url + '/boot') { + return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers() - let signed_headers = new Headers() - - headers.set('Signify-Resource', "EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei") - headers.set('Signify-Timestamp', new Date().toISOString().replace('Z', '000+00:00')) - headers.set('Content-Type', 'application/json') - - const requrl = new URL(req.url) - let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}) - let signer = salter.signer("A",true,"agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00",Tier.low) - - let authn = new Authenticater(signer!,signer!.verfer) - signed_headers = authn.sign(headers, req.method, requrl.pathname.split('?')[0]) - let body = req.url.startsWith(url+'/identifiers/aid1/credentials')? mockCredential: mockGetAID - - return Promise.resolve({body: JSON.stringify(body), init:{ status: 202, headers:signed_headers }}) + let headers = new Headers(); + let signed_headers = new Headers(); + + headers.set( + 'Signify-Resource', + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' + ); + headers.set( + 'Signify-Timestamp', + new Date().toISOString().replace('Z', '000+00:00') + ); + headers.set('Content-Type', 'application/json'); + + const requrl = new URL(req.url); + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + let signer = salter.signer( + 'A', + true, + 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', + Tier.low + ); + + let authn = new Authenticater(signer!, signer!.verfer); + signed_headers = authn.sign( + headers, + req.method, + requrl.pathname.split('?')[0] + ); + let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + ? mockCredential + : mockGetAID; + + return Promise.resolve({ + body: JSON.stringify(body), + init: { status: 202, headers: signed_headers }, + }); } - -}) +}); describe('SignifyClient', () => { it('Notifications', async () => { await libsodium.ready; - const bran = "0123456789abcdefghijk" - - let client = new SignifyClient(url, bran, Tier.low, boot_url) - - await client.boot() - await client.connect() - - let notifications = client.notifications() - - await notifications.list(20, 40) - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/notifications') - assert.equal(lastCall[1]!.method,'GET') - let lastHeaders = new Headers((lastCall[1]!.headers!)) - assert.equal(lastHeaders.get('Range'),'notes=20-40') - - await notifications.mark("notificationSAID") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/notifications/notificationSAID') - assert.equal(lastCall[1]!.method,'PUT') - - await notifications.delete("notificationSAID") - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length-1]! - assert.equal(lastCall[0]!,url+'/notifications/notificationSAID') - assert.equal(lastCall[1]!.method,'DELETE') - }) - -}) \ No newline at end of file + const bran = '0123456789abcdefghijk'; + + let client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.boot(); + await client.connect(); + + let notifications = client.notifications(); + + await notifications.list(20, 40); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/notifications'); + assert.equal(lastCall[1]!.method, 'GET'); + let lastHeaders = new Headers(lastCall[1]!.headers!); + assert.equal(lastHeaders.get('Range'), 'notes=20-40'); + + await notifications.mark('notificationSAID'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/notifications/notificationSAID'); + assert.equal(lastCall[1]!.method, 'PUT'); + + await notifications.delete('notificationSAID'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/notifications/notificationSAID'); + assert.equal(lastCall[1]!.method, 'DELETE'); + }); +}); diff --git a/test/app/registry.test.ts b/test/app/registry.test.ts index c430e12d..c4ee638b 100644 --- a/test/app/registry.test.ts +++ b/test/app/registry.test.ts @@ -1,10 +1,10 @@ -import { SignifyClient } from "../../src/keri/app/clienting"; +import { SignifyClient } from '../../src/keri/app/clienting'; import { anyOfClass, anything, instance, mock, when } from 'ts-mockito'; -import libsodium from "libsodium-wrappers-sumo"; +import libsodium from 'libsodium-wrappers-sumo'; import 'whatwg-fetch'; -import { Registries } from "../../src/keri/app/credentialing"; -import { Identifier, KeyManager, SaltyKeeper } from "../../src"; -import { strict as assert } from "assert"; +import { Registries } from '../../src/keri/app/credentialing'; +import { Identifier, KeyManager, SaltyKeeper } from '../../src'; +import { strict as assert } from 'assert'; describe('registry', () => { it('should create a registry', async () => { @@ -14,25 +14,45 @@ describe('registry', () => { let mockedKeyManager = mock(KeyManager); let mockedKeeper = mock(SaltyKeeper); - let hab = { prefix: "hab prefix", state: { s: 0, d: 'a digest' } }; + let hab = { prefix: 'hab prefix', state: { s: 0, d: 'a digest' } }; when(mockedClient.manager).thenReturn(instance(mockedKeyManager)); when(mockedKeyManager.get(hab)).thenReturn(instance(mockedKeeper)); - when(mockedKeeper.sign(anyOfClass(Uint8Array))).thenReturn(["a signature"]); + when(mockedKeeper.sign(anyOfClass(Uint8Array))).thenReturn([ + 'a signature', + ]); - when(mockedIdentifiers.get("a name")).thenResolve(hab); - when(mockedClient.identifiers()).thenReturn(instance(mockedIdentifiers)); + when(mockedIdentifiers.get('a name')).thenResolve(hab); + when(mockedClient.identifiers()).thenReturn( + instance(mockedIdentifiers) + ); - let mockedResponse = mock(Response) - when(mockedClient.fetch("/identifiers/a name/registries", "POST", anything())).thenResolve(instance(mockedResponse)) + let mockedResponse = mock(Response); + when( + mockedClient.fetch( + '/identifiers/a name/registries', + 'POST', + anything() + ) + ).thenResolve(instance(mockedResponse)); let registries = new Registries(instance(mockedClient)); - let actual = await registries.create({ name: "a name", registryName: "a registry name", nonce: "" }); + let actual = await registries.create({ + name: 'a name', + registryName: 'a registry name', + nonce: '', + }); - assert.equal(actual.regser.raw, '{"v":"KERI10JSON0000c5_","t":"vcp","d":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX","i":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX","ii":"hab prefix","s":"0","c":["NB"],"bt":"0","b":[],"n":""}'); - assert.equal(actual.serder.raw, '{"v":"KERI10JSON0000f4_","t":"ixn","d":"EE5R61289Xnpxc2M-euPtsAkp849tUdNJ7DuyBeSiRtm","i":"hab prefix","s":"1","p":"a digest","a":[{"i":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX","s":"0","d":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX"}]}'); + assert.equal( + actual.regser.raw, + '{"v":"KERI10JSON0000c5_","t":"vcp","d":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX","i":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX","ii":"hab prefix","s":"0","c":["NB"],"bt":"0","b":[],"n":""}' + ); + assert.equal( + actual.serder.raw, + '{"v":"KERI10JSON0000f4_","t":"ixn","d":"EE5R61289Xnpxc2M-euPtsAkp849tUdNJ7DuyBeSiRtm","i":"hab prefix","s":"1","p":"a digest","a":[{"i":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX","s":"0","d":"EMppKX_JxXBuL_xE3A_a6lOcseYwaB7jAvZ0YFdgecXX"}]}' + ); }); it('should fail on estanblishmnet only for now', async () => { @@ -40,19 +60,30 @@ describe('registry', () => { let mockedClient = mock(SignifyClient); let mockedIdentifiers = mock(Identifier); - let hab = { prefix: "hab prefix", state: { s: 0, d: 'a digest', c: ['EO'] } }; + let hab = { + prefix: 'hab prefix', + state: { s: 0, d: 'a digest', c: ['EO'] }, + }; - when(mockedIdentifiers.get("a name")).thenResolve(hab); - when(mockedClient.identifiers()).thenReturn(instance(mockedIdentifiers)); + when(mockedIdentifiers.get('a name')).thenResolve(hab); + when(mockedClient.identifiers()).thenReturn( + instance(mockedIdentifiers) + ); let registries = new Registries(instance(mockedClient)); - assert.rejects(async () => { - await registries.create({ name: "a name", registryName: "a registry name", nonce: "" }) - }, + assert.rejects( + async () => { + await registries.create({ + name: 'a name', + registryName: 'a registry name', + nonce: '', + }); + }, { name: 'Error', message: 'establishment only not implemented', - }); + } + ); }); }); diff --git a/test/core/authing.test.ts b/test/core/authing.test.ts index 9652a41b..68984d36 100644 --- a/test/core/authing.test.ts +++ b/test/core/authing.test.ts @@ -1,61 +1,83 @@ -import {strict as assert} from "assert"; -import libsodium from "libsodium-wrappers-sumo"; -import {Salter} from "../../src/keri/core/salter"; -import {b} from "../../src/keri/core/core"; -import {Authenticater} from "../../src/keri/core/authing"; -import * as utilApi from "../../src/keri/core/utils"; -import { Verfer } from "../../src/keri/core/verfer"; - +import { strict as assert } from 'assert'; +import libsodium from 'libsodium-wrappers-sumo'; +import { Salter } from '../../src/keri/core/salter'; +import { b } from '../../src/keri/core/core'; +import { Authenticater } from '../../src/keri/core/authing'; +import * as utilApi from '../../src/keri/core/utils'; +import { Verfer } from '../../src/keri/core/verfer'; describe('Authenticater.verify', () => { it('verify signature on Response', async () => { await libsodium.ready; - let salt = '0123456789abcdef' - let salter = new Salter({raw: b(salt)}) - let signer = salter.signer() - let aaid = "DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a" - let verfer = new Verfer({qb64: aaid}) + let salt = '0123456789abcdef'; + let salter = new Salter({ raw: b(salt) }); + let signer = salter.signer(); + let aaid = 'DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a'; + let verfer = new Verfer({ qb64: aaid }); let headers = new Headers([ ['Content-Length', '898'], ['Content-Type', 'application/json'], - ['Signature', ('indexed="?0";signify="0BDLh8QCytVBx1YMam4Vt8s4b9HAW1dwfE4yU5H_w1V6gUvPBoVGWQlIMdC16T3WFWHDHCbMcuceQzrr6n9OULsK"')], - ['Signature-Input', ('signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1684715820;keyid="EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei";alg="ed25519"')], - ['Signify-Resource', 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei'], + [ + 'Signature', + 'indexed="?0";signify="0BDLh8QCytVBx1YMam4Vt8s4b9HAW1dwfE4yU5H_w1V6gUvPBoVGWQlIMdC16T3WFWHDHCbMcuceQzrr6n9OULsK"', + ], + [ + 'Signature-Input', + 'signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1684715820;keyid="EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei";alg="ed25519"', + ], + [ + 'Signify-Resource', + 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei', + ], ['Signify-Timestamp', '2023-05-22T00:37:00.248708+00:00'], - ]) + ]); - let authn = new Authenticater(signer, verfer) - assert.notEqual(authn, undefined) + let authn = new Authenticater(signer, verfer); + assert.notEqual(authn, undefined); - assert.equal(authn.verify(new Headers(headers), "GET", "/identifiers/aid1"), true) - }) -}) + assert.equal( + authn.verify(new Headers(headers), 'GET', '/identifiers/aid1'), + true + ); + }); +}); -describe("Authenticater.sign", () => { +describe('Authenticater.sign', () => { it('Create signed headers for a request', async () => { await libsodium.ready; - let salt = '0123456789abcdef' - let salter = new Salter({raw: b(salt)}) - let signer = salter.signer() - let aaid = "DDK2N5_fVCWIEO9d8JLhk7hKrkft6MbtkUhaHQsmABHY" - let verfer = new Verfer({qb64: aaid}) + let salt = '0123456789abcdef'; + let salter = new Salter({ raw: b(salt) }); + let signer = salter.signer(); + let aaid = 'DDK2N5_fVCWIEO9d8JLhk7hKrkft6MbtkUhaHQsmABHY'; + let verfer = new Verfer({ qb64: aaid }); let headers = new Headers([ - ["Content-Type", "application/json"], - ["Content-Length", "256"], - ["Connection", "close"], - ["Signify-Resource", "EWJkQCFvKuyxZi582yJPb0wcwuW3VXmFNuvbQuBpgmIs"], - ["Signify-Timestamp", "2022-09-24T00:05:48.196795+00:00"], - ]) - jest.spyOn(utilApi, "nowUTC").mockReturnValue(new Date("2021-01-01T00:00:00.000000+00:00")) - - let authn = new Authenticater(signer, verfer) - headers = authn.sign(headers, "POST", "/boot") - - assert.equal(headers.has("Signature-Input"), true) - assert.equal(headers.has("Signature"), true) - assert.equal(headers.get("Signature-Input"), 'signify=("@method" "@path" "signify-resource" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"') - assert.equal(headers.get("Signature"), 'indexed="?0";signify="0BChvN_BWAf-mgEuTnWfNnktgHdWOuOh9cWc4o0GFWuZOwra3DyJT5dJ_6BX7AANDOTnIlAKh5Sg_9qGQXHjj5oJ"') - }) -}) \ No newline at end of file + ['Content-Type', 'application/json'], + ['Content-Length', '256'], + ['Connection', 'close'], + [ + 'Signify-Resource', + 'EWJkQCFvKuyxZi582yJPb0wcwuW3VXmFNuvbQuBpgmIs', + ], + ['Signify-Timestamp', '2022-09-24T00:05:48.196795+00:00'], + ]); + jest.spyOn(utilApi, 'nowUTC').mockReturnValue( + new Date('2021-01-01T00:00:00.000000+00:00') + ); + + let authn = new Authenticater(signer, verfer); + headers = authn.sign(headers, 'POST', '/boot'); + + assert.equal(headers.has('Signature-Input'), true); + assert.equal(headers.has('Signature'), true); + assert.equal( + headers.get('Signature-Input'), + 'signify=("@method" "@path" "signify-resource" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"' + ); + assert.equal( + headers.get('Signature'), + 'indexed="?0";signify="0BChvN_BWAf-mgEuTnWfNnktgHdWOuOh9cWc4o0GFWuZOwra3DyJT5dJ_6BX7AANDOTnIlAKh5Sg_9qGQXHjj5oJ"' + ); + }); +}); diff --git a/test/core/bexter.test.ts b/test/core/bexter.test.ts index 90130030..5b6954f9 100644 --- a/test/core/bexter.test.ts +++ b/test/core/bexter.test.ts @@ -1,115 +1,114 @@ -import {strict as assert} from "assert"; -import {Bexter} from "../../src/keri/core/bexter"; -import {b, MtrDex} from "../../src"; +import { strict as assert } from 'assert'; +import { Bexter } from '../../src/keri/core/bexter'; +import { b, MtrDex } from '../../src'; - -describe("Bexter", () => { - it("should bext-ify stuff (and back again)", () => { +describe('Bexter', () => { + it('should bext-ify stuff (and back again)', () => { assert.throws(() => { - new Bexter({}) - }) + new Bexter({}); + }); - let bext = "@!" + let bext = '@!'; assert.throws(() => { - new Bexter({}, bext) - }) + new Bexter({}, bext); + }); - bext = "" - let bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L0) - assert.equal(bexter.both, '4AAA') - assert.deepStrictEqual(bexter.raw, b('')) - assert.equal(bexter.qb64, '4AAA') - assert.equal(bexter.bext, bext) + bext = ''; + let bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L0); + assert.equal(bexter.both, '4AAA'); + assert.deepStrictEqual(bexter.raw, b('')); + assert.equal(bexter.qb64, '4AAA'); + assert.equal(bexter.bext, bext); - bext = "-" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L2) - assert.equal(bexter.both, '6AAB') - assert.deepStrictEqual(bexter.raw, b('>')) - assert.equal(bexter.qb64, '6AABAAA-') - assert.equal(bexter.bext, bext) + bext = '-'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L2); + assert.equal(bexter.both, '6AAB'); + assert.deepStrictEqual(bexter.raw, b('>')); + assert.equal(bexter.qb64, '6AABAAA-'); + assert.equal(bexter.bext, bext); - bext = "-A" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L1) - assert.equal(bexter.both, '5AAB') - assert.deepStrictEqual(bexter.raw, Uint8Array.from([15, 128])) - assert.equal(bexter.qb64, '5AABAA-A') - assert.equal(bexter.bext, bext) + bext = '-A'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L1); + assert.equal(bexter.both, '5AAB'); + assert.deepStrictEqual(bexter.raw, Uint8Array.from([15, 128])); + assert.equal(bexter.qb64, '5AABAA-A'); + assert.equal(bexter.bext, bext); - bext = "-A-" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L0) - assert.equal(bexter.both, '4AAB') - assert.deepStrictEqual(bexter.raw, Uint8Array.from([3, 224, 62])) - assert.equal(bexter.qb64, '4AABA-A-') - assert.equal(bexter.bext, bext) + bext = '-A-'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L0); + assert.equal(bexter.both, '4AAB'); + assert.deepStrictEqual(bexter.raw, Uint8Array.from([3, 224, 62])); + assert.equal(bexter.qb64, '4AABA-A-'); + assert.equal(bexter.bext, bext); - bext = "-A-B" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L0) - assert.equal(bexter.both, '4AAB') - assert.deepStrictEqual(bexter.raw, Uint8Array.from([248, 15, 129])) - assert.equal(bexter.qb64, '4AAB-A-B') - assert.equal(bexter.bext, bext) + bext = '-A-B'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L0); + assert.equal(bexter.both, '4AAB'); + assert.deepStrictEqual(bexter.raw, Uint8Array.from([248, 15, 129])); + assert.equal(bexter.qb64, '4AAB-A-B'); + assert.equal(bexter.bext, bext); - bext = "A" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L2) - assert.equal(bexter.both, '6AAB') - assert.deepStrictEqual(bexter.raw, Uint8Array.from([0])) - assert.equal(bexter.qb64, '6AABAAAA') - assert.equal(bexter.bext, bext) + bext = 'A'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L2); + assert.equal(bexter.both, '6AAB'); + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0])); + assert.equal(bexter.qb64, '6AABAAAA'); + assert.equal(bexter.bext, bext); - bext = "AA" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L1) - assert.equal(bexter.both, '5AAB') - assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0])) - assert.equal(bexter.qb64, '5AABAAAA') - assert.equal(bexter.bext, bext) + bext = 'AA'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L1); + assert.equal(bexter.both, '5AAB'); + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0])); + assert.equal(bexter.qb64, '5AABAAAA'); + assert.equal(bexter.bext, bext); - bext = "AAA" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L0) - assert.equal(bexter.both, '4AAB') - assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0, 0])) - assert.equal(bexter.qb64, '4AABAAAA') - assert.equal(bexter.bext, bext) + bext = 'AAA'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L0); + assert.equal(bexter.both, '4AAB'); + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0, 0])); + assert.equal(bexter.qb64, '4AABAAAA'); + assert.equal(bexter.bext, bext); - bext = "AAAA" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L0) - assert.equal(bexter.both, '4AAB') - assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0, 0])) - assert.equal(bexter.qb64, '4AABAAAA') - assert.equal(bexter.bext, "AAA") - assert.notEqual(bexter.bext, bext) + bext = 'AAAA'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L0); + assert.equal(bexter.both, '4AAB'); + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0, 0])); + assert.equal(bexter.qb64, '4AABAAAA'); + assert.equal(bexter.bext, 'AAA'); + assert.notEqual(bexter.bext, bext); - bext = "ABB" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L0) - assert.equal(bexter.both, '4AAB') - assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0, 65])) - assert.equal(bexter.qb64, '4AABAABB') - assert.equal(bexter.bext, bext) + bext = 'ABB'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L0); + assert.equal(bexter.both, '4AAB'); + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 0, 65])); + assert.equal(bexter.qb64, '4AABAABB'); + assert.equal(bexter.bext, bext); - bext = "BBB" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L0) - assert.equal(bexter.both, '4AAB') - assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 16, 65])) - assert.equal(bexter.qb64, '4AABABBB') - assert.equal(bexter.bext, bext) + bext = 'BBB'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L0); + assert.equal(bexter.both, '4AAB'); + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 16, 65])); + assert.equal(bexter.qb64, '4AABABBB'); + assert.equal(bexter.bext, bext); - bext = "ABBB" - bexter = new Bexter({}, bext) - assert.equal(bexter.code, MtrDex.StrB64_L0) - assert.equal(bexter.both, '4AAB') - assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 16, 65])) - assert.equal(bexter.qb64, '4AABABBB') - assert.equal(bexter.bext, 'BBB') - assert.notEqual(bexter.bext, bext) - }) -}) \ No newline at end of file + bext = 'ABBB'; + bexter = new Bexter({}, bext); + assert.equal(bexter.code, MtrDex.StrB64_L0); + assert.equal(bexter.both, '4AAB'); + assert.deepStrictEqual(bexter.raw, Uint8Array.from([0, 16, 65])); + assert.equal(bexter.qb64, '4AABABBB'); + assert.equal(bexter.bext, 'BBB'); + assert.notEqual(bexter.bext, bext); + }); +}); diff --git a/test/core/coring.test.ts b/test/core/coring.test.ts index f71024be..c162a2f3 100644 --- a/test/core/coring.test.ts +++ b/test/core/coring.test.ts @@ -1,116 +1,115 @@ -import libsodium from "libsodium-wrappers-sumo"; -import {b, d, b64ToInt, intToB64, intToB64b} from "../../src/keri/core/core"; -import {strict as assert} from "assert"; -import {bytesToInt, intToBytes} from "../../src/keri/core/utils"; - +import libsodium from 'libsodium-wrappers-sumo'; +import { b, d, b64ToInt, intToB64, intToB64b } from '../../src/keri/core/core'; +import { strict as assert } from 'assert'; +import { bytesToInt, intToBytes } from '../../src/keri/core/utils'; describe('int to b64 and back', () => { it('should encode and decode stuff', async () => { await libsodium.ready; - - let cs = intToB64(0) - assert.equal(cs, "A") - let i = b64ToInt(cs) - assert.equal(i, 0) - - cs = intToB64(0, 0) - assert.equal(cs, "") + + let cs = intToB64(0); + assert.equal(cs, 'A'); + let i = b64ToInt(cs); + assert.equal(i, 0); + + cs = intToB64(0, 0); + assert.equal(cs, ''); assert.throws(() => { - i = b64ToInt(cs) - }) + i = b64ToInt(cs); + }); assert.throws(() => { - i = b64ToInt(cs) - }) - - let csb = intToB64b(0) - assert.deepStrictEqual(csb, b("A")) - i = b64ToInt(d(csb)) - assert.equal(i, 0) - - cs = intToB64(27) - assert.equal(cs, "b") - i = b64ToInt(cs) - assert.equal(i, 27) - - csb = intToB64b(27) - assert.deepStrictEqual(csb, b("b")) - i = b64ToInt(d(csb)) - assert.equal(i, 27) - - cs = intToB64(27, 2) - assert.equal(cs, "Ab") - i = b64ToInt(cs) - assert.equal(i, 27) - - csb = intToB64b(27, 2) - assert.deepStrictEqual(csb, b("Ab")) - i = b64ToInt(d(csb)) - assert.equal(i, 27) - - cs = intToB64(80) - assert.equal(cs, "BQ") - i = b64ToInt(cs) - assert.equal(i, 80) - - csb = intToB64b(80) - assert.deepStrictEqual(csb, b("BQ")) - i = b64ToInt(d(csb)) - assert.equal(i, 80) - - cs = intToB64(4095) - assert.equal(cs, '__') - i = b64ToInt(cs) - assert.equal(i, 4095) - - csb = intToB64b(4095) - assert.deepStrictEqual(csb, b('__')) - i = b64ToInt(d(csb)) - assert.equal(i, 4095) - - cs = intToB64(4096) - assert.equal(cs, 'BAA') - i = b64ToInt(cs) - assert.equal(i, 4096) - - csb = intToB64b(4096) - assert.deepStrictEqual(csb, b('BAA')) - i = b64ToInt(d(csb)) - assert.equal(i, 4096) - - cs = intToB64(6011) - assert.equal(cs, "Bd7") - i = b64ToInt(cs) - assert.equal(i, 6011) - - csb = intToB64b(6011) - assert.deepStrictEqual(csb, b("Bd7")) - i = b64ToInt(d(csb)) - assert.equal(i, 6011) - }) -}) + i = b64ToInt(cs); + }); + + let csb = intToB64b(0); + assert.deepStrictEqual(csb, b('A')); + i = b64ToInt(d(csb)); + assert.equal(i, 0); + + cs = intToB64(27); + assert.equal(cs, 'b'); + i = b64ToInt(cs); + assert.equal(i, 27); + + csb = intToB64b(27); + assert.deepStrictEqual(csb, b('b')); + i = b64ToInt(d(csb)); + assert.equal(i, 27); + + cs = intToB64(27, 2); + assert.equal(cs, 'Ab'); + i = b64ToInt(cs); + assert.equal(i, 27); + + csb = intToB64b(27, 2); + assert.deepStrictEqual(csb, b('Ab')); + i = b64ToInt(d(csb)); + assert.equal(i, 27); + + cs = intToB64(80); + assert.equal(cs, 'BQ'); + i = b64ToInt(cs); + assert.equal(i, 80); + + csb = intToB64b(80); + assert.deepStrictEqual(csb, b('BQ')); + i = b64ToInt(d(csb)); + assert.equal(i, 80); + + cs = intToB64(4095); + assert.equal(cs, '__'); + i = b64ToInt(cs); + assert.equal(i, 4095); + + csb = intToB64b(4095); + assert.deepStrictEqual(csb, b('__')); + i = b64ToInt(d(csb)); + assert.equal(i, 4095); + + cs = intToB64(4096); + assert.equal(cs, 'BAA'); + i = b64ToInt(cs); + assert.equal(i, 4096); + + csb = intToB64b(4096); + assert.deepStrictEqual(csb, b('BAA')); + i = b64ToInt(d(csb)); + assert.equal(i, 4096); + + cs = intToB64(6011); + assert.equal(cs, 'Bd7'); + i = b64ToInt(cs); + assert.equal(i, 6011); + + csb = intToB64b(6011); + assert.deepStrictEqual(csb, b('Bd7')); + i = b64ToInt(d(csb)); + assert.equal(i, 6011); + }); +}); describe('int to bytes and back', () => { it('should encode and decode stuff', async () => { - let b = intToBytes(0, 8) - let n = bytesToInt(b) - assert.equal(n, 0) - b = intToBytes(1, 8) - n = bytesToInt(b) - assert.equal(n, 1) - - b = intToBytes(0, 16) - n = bytesToInt(b) - assert.equal(n, 0) - b = intToBytes(1, 16) - n = bytesToInt(b) - assert.equal(n, 1) - - b = intToBytes(0, 2) - n = bytesToInt(b) - assert.equal(n, 0) - b = intToBytes(1, 2) - n = bytesToInt(b) - assert.equal(n, 1) - }) -}) \ No newline at end of file + let b = intToBytes(0, 8); + let n = bytesToInt(b); + assert.equal(n, 0); + b = intToBytes(1, 8); + n = bytesToInt(b); + assert.equal(n, 1); + + b = intToBytes(0, 16); + n = bytesToInt(b); + assert.equal(n, 0); + b = intToBytes(1, 16); + n = bytesToInt(b); + assert.equal(n, 1); + + b = intToBytes(0, 2); + n = bytesToInt(b); + assert.equal(n, 0); + b = intToBytes(1, 2); + n = bytesToInt(b); + assert.equal(n, 1); + }); +}); diff --git a/test/core/counter.test.ts b/test/core/counter.test.ts index 2aece2bb..4934a296 100644 --- a/test/core/counter.test.ts +++ b/test/core/counter.test.ts @@ -1,25 +1,30 @@ -import {Counter, CtrDex} from "../../src/keri/core/counter"; -import {strict as assert} from "assert"; -import {b, b64ToInt, intToB64} from "../../src/keri/core/core"; +import { Counter, CtrDex } from '../../src/keri/core/counter'; +import { strict as assert } from 'assert'; +import { b, b64ToInt, intToB64 } from '../../src/keri/core/core'; describe('int to b64 and back', () => { it('should encode and decode stuff', async () => { - - assert.equal(Counter.Sizes.get('-A')!.hs, 2) // hard size - assert.equal(Counter.Sizes.get('-A')!.ss, 2) // soft size - assert.equal(Counter.Sizes.get('-A')!.fs, 4) // full size - assert.equal(Counter.Sizes.get('-A')!.ls, 0) // lead size + assert.equal(Counter.Sizes.get('-A')!.hs, 2); // hard size + assert.equal(Counter.Sizes.get('-A')!.ss, 2); // soft size + assert.equal(Counter.Sizes.get('-A')!.fs, 4); // full size + assert.equal(Counter.Sizes.get('-A')!.ls, 0); // lead size // verify first hs Sizes matches hs in Codes for same first char Counter.Sizes.forEach((_, ckey) => { - let key = ckey.slice(0, 2) - assert.equal(Counter.Hards.get(key), Counter.Sizes.get(ckey)!.hs) - }) + let key = ckey.slice(0, 2); + assert.equal(Counter.Hards.get(key), Counter.Sizes.get(ckey)!.hs); + }); // verify all Codes have hs > 0 and ss > 0 and fs = hs + ss and not fs % 4 Counter.Sizes.forEach((val, _) => { - assert.equal((val.hs > 0 && val.ss > 0 && val.hs + val.ss == val.fs && !(val.fs % 4)), true) - }) + assert.equal( + val.hs > 0 && + val.ss > 0 && + val.hs + val.ss == val.fs && + !(val.fs % 4), + true + ); + }); // Bizes maps bytes of sextet of decoded first character of code with hard size of code // verify equivalents of items for Sizes and Bizes // Counter.Hards.forEach((sval, skey) => { @@ -28,117 +33,123 @@ describe('int to b64 and back', () => { // }) assert.throws(() => { - new Counter({}) - }) - - let count = 1 - let qsc = CtrDex.ControllerIdxSigs + intToB64(count, 2) - assert.equal(qsc, '-AAB') - let qscb = b(qsc) - - let counter = new Counter({code: CtrDex.ControllerIdxSigs}) // default count = 1 - assert.equal(counter.code, CtrDex.ControllerIdxSigs) - assert.equal(counter.count, count) - assert.deepStrictEqual(counter.qb64b, qscb) - assert.equal(counter.qb64, qsc) - - counter = new Counter({qb64: qsc}) // default count = 1 - assert.equal(counter.code, CtrDex.ControllerIdxSigs) - assert.equal(counter.count, count) - assert.deepStrictEqual(counter.qb64b, qscb) - assert.equal(counter.qb64, qsc) - - counter = new Counter({qb64b: qscb}) // default count = 1 - assert.equal(counter.code, CtrDex.ControllerIdxSigs) - assert.equal(counter.count, count) - assert.deepStrictEqual(counter.qb64b, qscb) - assert.equal(counter.qb64, qsc) - - let longqs64 = `${qsc}ABCD` - counter = new Counter({qb64: longqs64}) - assert.equal(counter.qb64.length, Counter.Sizes.get(counter.code)!.fs) - - let shortqcs = qsc.slice(0, -1) + new Counter({}); + }); + + let count = 1; + let qsc = CtrDex.ControllerIdxSigs + intToB64(count, 2); + assert.equal(qsc, '-AAB'); + let qscb = b(qsc); + + let counter = new Counter({ code: CtrDex.ControllerIdxSigs }); // default count = 1 + assert.equal(counter.code, CtrDex.ControllerIdxSigs); + assert.equal(counter.count, count); + assert.deepStrictEqual(counter.qb64b, qscb); + assert.equal(counter.qb64, qsc); + + counter = new Counter({ qb64: qsc }); // default count = 1 + assert.equal(counter.code, CtrDex.ControllerIdxSigs); + assert.equal(counter.count, count); + assert.deepStrictEqual(counter.qb64b, qscb); + assert.equal(counter.qb64, qsc); + + counter = new Counter({ qb64b: qscb }); // default count = 1 + assert.equal(counter.code, CtrDex.ControllerIdxSigs); + assert.equal(counter.count, count); + assert.deepStrictEqual(counter.qb64b, qscb); + assert.equal(counter.qb64, qsc); + + let longqs64 = `${qsc}ABCD`; + counter = new Counter({ qb64: longqs64 }); + assert.equal(counter.qb64.length, Counter.Sizes.get(counter.code)!.fs); + + let shortqcs = qsc.slice(0, -1); assert.throws(() => { - new Counter({qb64: shortqcs}) - }) - - count = 5 - qsc = CtrDex.ControllerIdxSigs + intToB64(count, 2) - assert.equal(qsc, '-AAF') - qscb = b(qsc) - - counter = new Counter({code: CtrDex.ControllerIdxSigs, count: count}) - assert.equal(counter.code, CtrDex.ControllerIdxSigs) - assert.equal(counter.count, count) - assert.deepStrictEqual(counter.qb64b, qscb) - assert.equal(counter.qb64, qsc) - - counter = new Counter({qb64: qsc}) // default count = 1 - assert.equal(counter.code, CtrDex.ControllerIdxSigs) - assert.equal(counter.count, count) - assert.deepStrictEqual(counter.qb64b, qscb) - assert.equal(counter.qb64, qsc) - - counter = new Counter({qb64b: qscb}) // default count = 1 - assert.equal(counter.code, CtrDex.ControllerIdxSigs) - assert.equal(counter.count, count) - assert.deepStrictEqual(counter.qb64b, qscb) - assert.equal(counter.qb64, qsc) + new Counter({ qb64: shortqcs }); + }); + + count = 5; + qsc = CtrDex.ControllerIdxSigs + intToB64(count, 2); + assert.equal(qsc, '-AAF'); + qscb = b(qsc); + + counter = new Counter({ code: CtrDex.ControllerIdxSigs, count: count }); + assert.equal(counter.code, CtrDex.ControllerIdxSigs); + assert.equal(counter.count, count); + assert.deepStrictEqual(counter.qb64b, qscb); + assert.equal(counter.qb64, qsc); + + counter = new Counter({ qb64: qsc }); // default count = 1 + assert.equal(counter.code, CtrDex.ControllerIdxSigs); + assert.equal(counter.count, count); + assert.deepStrictEqual(counter.qb64b, qscb); + assert.equal(counter.qb64, qsc); + + counter = new Counter({ qb64b: qscb }); // default count = 1 + assert.equal(counter.code, CtrDex.ControllerIdxSigs); + assert.equal(counter.count, count); + assert.deepStrictEqual(counter.qb64b, qscb); + assert.equal(counter.qb64, qsc); // test with big codes index=1024 - count = 1024 - qsc = CtrDex.BigAttachedMaterialQuadlets + intToB64(count, 5) - assert.equal(qsc, '-0VAAAQA') - qscb = b(qsc) - - counter = new Counter({code: CtrDex.BigAttachedMaterialQuadlets, count: count}) - assert.equal(counter.code, CtrDex.BigAttachedMaterialQuadlets) - assert.equal(counter.count, count) - assert.deepStrictEqual(counter.qb64b, qscb) - assert.equal(counter.qb64, qsc) - - counter = new Counter({qb64: qsc}) // default count = 1 - assert.equal(counter.code, CtrDex.BigAttachedMaterialQuadlets) - assert.equal(counter.count, count) - assert.deepStrictEqual(counter.qb64b, qscb) - assert.equal(counter.qb64, qsc) - - counter = new Counter({qb64b: qscb}) // default count = 1 - assert.equal(counter.code, CtrDex.BigAttachedMaterialQuadlets) - assert.equal(counter.count, count) - assert.deepStrictEqual(counter.qb64b, qscb) - assert.equal(counter.qb64, qsc) - - let verint = 0 - let version = intToB64(verint, 3) - assert.equal(version, 'AAA') - assert.equal(verint, b64ToInt(version)) - qsc = CtrDex.KERIProtocolStack + version - assert.equal(qsc, '--AAAAAA') // keri Cesr version 0.0.0 - qscb = b(qsc) - - counter = new Counter({code: CtrDex.KERIProtocolStack, count: verint}) - assert.equal(counter.code, CtrDex.KERIProtocolStack) - assert.equal(counter.count, verint) - assert.equal(counter.countToB64(3), version) - assert.equal(counter.countToB64(), version) // default length - assert.deepStrictEqual(counter.qb64b, qscb) - assert.equal(counter.qb64, qsc) - - assert.equal(Counter.semVerToB64("1.2.3"), "BCD") - assert.equal(Counter.semVerToB64(), "AAA") - assert.equal(Counter.semVerToB64("", 1), "BAA") - assert.equal(Counter.semVerToB64("",0, 1), "ABA") - assert.equal(Counter.semVerToB64("", 0, 0, 1), "AAB") - assert.equal(Counter.semVerToB64("", 3, 4, 5), "DEF") - - assert.equal(Counter.semVerToB64("1.1"), "BBA") - assert.equal(Counter.semVerToB64("1."), "BAA") - assert.equal(Counter.semVerToB64("1"), "BAA") - assert.equal(Counter.semVerToB64("1.2."), "BCA") - assert.equal(Counter.semVerToB64(".."), "AAA") - assert.equal(Counter.semVerToB64("1..3"), "BAD") - assert.equal(Counter.semVerToB64("4", 1, 2, 3), "ECD") - }) -}) \ No newline at end of file + count = 1024; + qsc = CtrDex.BigAttachedMaterialQuadlets + intToB64(count, 5); + assert.equal(qsc, '-0VAAAQA'); + qscb = b(qsc); + + counter = new Counter({ + code: CtrDex.BigAttachedMaterialQuadlets, + count: count, + }); + assert.equal(counter.code, CtrDex.BigAttachedMaterialQuadlets); + assert.equal(counter.count, count); + assert.deepStrictEqual(counter.qb64b, qscb); + assert.equal(counter.qb64, qsc); + + counter = new Counter({ qb64: qsc }); // default count = 1 + assert.equal(counter.code, CtrDex.BigAttachedMaterialQuadlets); + assert.equal(counter.count, count); + assert.deepStrictEqual(counter.qb64b, qscb); + assert.equal(counter.qb64, qsc); + + counter = new Counter({ qb64b: qscb }); // default count = 1 + assert.equal(counter.code, CtrDex.BigAttachedMaterialQuadlets); + assert.equal(counter.count, count); + assert.deepStrictEqual(counter.qb64b, qscb); + assert.equal(counter.qb64, qsc); + + let verint = 0; + let version = intToB64(verint, 3); + assert.equal(version, 'AAA'); + assert.equal(verint, b64ToInt(version)); + qsc = CtrDex.KERIProtocolStack + version; + assert.equal(qsc, '--AAAAAA'); // keri Cesr version 0.0.0 + qscb = b(qsc); + + counter = new Counter({ + code: CtrDex.KERIProtocolStack, + count: verint, + }); + assert.equal(counter.code, CtrDex.KERIProtocolStack); + assert.equal(counter.count, verint); + assert.equal(counter.countToB64(3), version); + assert.equal(counter.countToB64(), version); // default length + assert.deepStrictEqual(counter.qb64b, qscb); + assert.equal(counter.qb64, qsc); + + assert.equal(Counter.semVerToB64('1.2.3'), 'BCD'); + assert.equal(Counter.semVerToB64(), 'AAA'); + assert.equal(Counter.semVerToB64('', 1), 'BAA'); + assert.equal(Counter.semVerToB64('', 0, 1), 'ABA'); + assert.equal(Counter.semVerToB64('', 0, 0, 1), 'AAB'); + assert.equal(Counter.semVerToB64('', 3, 4, 5), 'DEF'); + + assert.equal(Counter.semVerToB64('1.1'), 'BBA'); + assert.equal(Counter.semVerToB64('1.'), 'BAA'); + assert.equal(Counter.semVerToB64('1'), 'BAA'); + assert.equal(Counter.semVerToB64('1.2.'), 'BCA'); + assert.equal(Counter.semVerToB64('..'), 'AAA'); + assert.equal(Counter.semVerToB64('1..3'), 'BAD'); + assert.equal(Counter.semVerToB64('4', 1, 2, 3), 'ECD'); + }); +}); diff --git a/test/core/decrypter.test.ts b/test/core/decrypter.test.ts index f22b96b0..f840c950 100644 --- a/test/core/decrypter.test.ts +++ b/test/core/decrypter.test.ts @@ -1,122 +1,169 @@ -import libsodium from "libsodium-wrappers-sumo"; -import {Signer} from "../../src/keri/core/signer"; -import {Matter, MtrDex} from "../../src/keri/core/matter"; -import {strict as assert} from "assert"; -import {Salter} from "../../src/keri/core/salter"; -import {Decrypter} from "../../src/keri/core/decrypter"; -import {Encrypter} from "../../src/keri/core/encrypter"; -import {b} from "../../src/keri/core/core"; - +import libsodium from 'libsodium-wrappers-sumo'; +import { Signer } from '../../src/keri/core/signer'; +import { Matter, MtrDex } from '../../src/keri/core/matter'; +import { strict as assert } from 'assert'; +import { Salter } from '../../src/keri/core/salter'; +import { Decrypter } from '../../src/keri/core/decrypter'; +import { Encrypter } from '../../src/keri/core/encrypter'; +import { b } from '../../src/keri/core/core'; describe('Decrypter', () => { it('should decrypt stuff', async () => { await libsodium.ready; // (b'\x18;0\xc4\x0f*vF\xfa\xe3\xa2Eee\x1f\x96o\xce)G\x85\xe3X\x86\xda\x04\xf0\xdc\xde\x06\xc0+') - let seed = new Uint8Array([24, 59, 48, 196, 15, 42, 118, 70, 250, 227, 162, 69, 101, 101, 31, 150, 111, 206, 41, 71, 133, 227, 88, 134, 218, 4, 240, 220, 222, 6, 192, 43]) - - let signer = new Signer({raw: seed, code: MtrDex.Ed25519_Seed}) - assert.equal(signer.verfer.code, MtrDex.Ed25519) - assert.equal(signer.verfer.transferable, true) // default - let seedqb64 = signer.qb64 - let seedqb64b = signer.qb64b - assert.equal(seedqb64, 'ABg7MMQPKnZG-uOiRWVlH5ZvzilHheNYhtoE8NzeBsAr') + let seed = new Uint8Array([ + 24, 59, 48, 196, 15, 42, 118, 70, 250, 227, 162, 69, 101, 101, 31, + 150, 111, 206, 41, 71, 133, 227, 88, 134, 218, 4, 240, 220, 222, 6, + 192, 43, + ]); + + let signer = new Signer({ raw: seed, code: MtrDex.Ed25519_Seed }); + assert.equal(signer.verfer.code, MtrDex.Ed25519); + assert.equal(signer.verfer.transferable, true); // default + let seedqb64 = signer.qb64; + let seedqb64b = signer.qb64b; + assert.equal(seedqb64, 'ABg7MMQPKnZG-uOiRWVlH5ZvzilHheNYhtoE8NzeBsAr'); // also works for Matter - assert.deepStrictEqual(seedqb64b, new Matter({raw: seed, code: MtrDex.Ed25519_Seed}).qb64b) + assert.deepStrictEqual( + seedqb64b, + new Matter({ raw: seed, code: MtrDex.Ed25519_Seed }).qb64b + ); // raw = b'6\x08d\r\xa1\xbb9\x8dp\x8d\xa0\xc0\x13J\x87r' - let raw = new Uint8Array([54, 8, 100, 13, 161, 187, 57, 141, 112, 141, 160, 192, 19, 74, 135, 114]) - let salter = new Salter({raw: raw, code: MtrDex.Salt_128}) - assert.equal(salter.code, MtrDex.Salt_128) - let saltqb64 = salter.qb64 - let saltqb64b = salter.qb64b - assert.deepStrictEqual(saltqb64, '0AA2CGQNobs5jXCNoMATSody') + let raw = new Uint8Array([ + 54, 8, 100, 13, 161, 187, 57, 141, 112, 141, 160, 192, 19, 74, 135, + 114, + ]); + let salter = new Salter({ raw: raw, code: MtrDex.Salt_128 }); + assert.equal(salter.code, MtrDex.Salt_128); + let saltqb64 = salter.qb64; + let saltqb64b = salter.qb64b; + assert.deepStrictEqual(saltqb64, '0AA2CGQNobs5jXCNoMATSody'); // also works for Matter - assert.deepStrictEqual(saltqb64b, new Matter({raw: raw, code: MtrDex.Salt_128}).qb64b) + assert.deepStrictEqual( + saltqb64b, + new Matter({ raw: raw, code: MtrDex.Salt_128 }).qb64b + ); // cryptseed = b'h,#|\x8ap"\x12\xc43t2\xa6\xe1\x18\x19\xf0f2,y\xc4\xc21@\xf5@\x15.\xa2\x1a\xcf' - let cryptseed = new Uint8Array([104, 44, 35, 124, 138, 112, 34, 18, 196, 51, 116, 50, 166, 225, 24, 25, 240, 102, 50, 44, 121, 196, 194, 49, 64, 245, 64, 21, 46, 162, 26, 207]) - let cryptsigner = new Signer({raw: cryptseed, code: MtrDex.Ed25519_Seed, transferable: true}) - let keypair = libsodium.crypto_sign_seed_keypair(cryptseed) // raw - let pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519(keypair.publicKey) - let prikey = libsodium.crypto_sign_ed25519_sk_to_curve25519(keypair.privateKey) - - assert.throws(function() { - new Decrypter({}) + let cryptseed = new Uint8Array([ + 104, 44, 35, 124, 138, 112, 34, 18, 196, 51, 116, 50, 166, 225, 24, + 25, 240, 102, 50, 44, 121, 196, 194, 49, 64, 245, 64, 21, 46, 162, + 26, 207, + ]); + let cryptsigner = new Signer({ + raw: cryptseed, + code: MtrDex.Ed25519_Seed, + transferable: true, + }); + let keypair = libsodium.crypto_sign_seed_keypair(cryptseed); // raw + let pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519( + keypair.publicKey + ); + let prikey = libsodium.crypto_sign_ed25519_sk_to_curve25519( + keypair.privateKey + ); + + assert.throws(function () { + new Decrypter({}); }); // create encrypter - let encrypter = new Encrypter({raw: pubkey}) - assert.equal(encrypter.code, MtrDex.X25519) - assert.equal(encrypter.qb64, 'CAF7Wr3XNq5hArcOuBJzaY6Nd23jgtUVI6KDfb3VngkR') - assert.deepStrictEqual(encrypter.raw, pubkey) + let encrypter = new Encrypter({ raw: pubkey }); + assert.equal(encrypter.code, MtrDex.X25519); + assert.equal( + encrypter.qb64, + 'CAF7Wr3XNq5hArcOuBJzaY6Nd23jgtUVI6KDfb3VngkR' + ); + assert.deepStrictEqual(encrypter.raw, pubkey); // create cipher of seed - let seedcipher = encrypter.encrypt(seedqb64b) - assert.equal(seedcipher.code, MtrDex.X25519_Cipher_Seed) + let seedcipher = encrypter.encrypt(seedqb64b); + assert.equal(seedcipher.code, MtrDex.X25519_Cipher_Seed); // each encryption uses a nonce so not a stable representation for testing // create decrypter from prikey - let decrypter = new Decrypter({raw: prikey}) - assert.equal(decrypter.code, MtrDex.X25519_Private) - assert.equal(decrypter.qb64, 'OLCFxqMz1z1UUS0TEJnvZP_zXHcuYdQsSGBWdOZeY5VQ') - assert.deepStrictEqual(decrypter.raw, prikey) - - // decrypt seed cipher using ser - let designer = decrypter.decrypt(seedcipher.qb64b, null, signer.verfer.transferable) - assert.deepStrictEqual(designer.qb64b, seedqb64b) - assert.equal(designer.code, MtrDex.Ed25519_Seed) - assert.equal(designer.verfer.code, MtrDex.Ed25519) - assert.equal(signer.verfer.transferable, true) + let decrypter = new Decrypter({ raw: prikey }); + assert.equal(decrypter.code, MtrDex.X25519_Private); + assert.equal( + decrypter.qb64, + 'OLCFxqMz1z1UUS0TEJnvZP_zXHcuYdQsSGBWdOZeY5VQ' + ); + assert.deepStrictEqual(decrypter.raw, prikey); + + // decrypt seed cipher using ser + let designer = decrypter.decrypt( + seedcipher.qb64b, + null, + signer.verfer.transferable + ); + assert.deepStrictEqual(designer.qb64b, seedqb64b); + assert.equal(designer.code, MtrDex.Ed25519_Seed); + assert.equal(designer.verfer.code, MtrDex.Ed25519); + assert.equal(signer.verfer.transferable, true); // decrypt seed cipher using cipher - designer = decrypter.decrypt(null, seedcipher, signer.verfer.transferable) - assert.deepStrictEqual(designer.qb64b, seedqb64b) - assert.equal(designer.code, MtrDex.Ed25519_Seed) - assert.equal(designer.verfer.code, MtrDex.Ed25519) - assert.equal(signer.verfer.transferable, true) + designer = decrypter.decrypt( + null, + seedcipher, + signer.verfer.transferable + ); + assert.deepStrictEqual(designer.qb64b, seedqb64b); + assert.equal(designer.code, MtrDex.Ed25519_Seed); + assert.equal(designer.verfer.code, MtrDex.Ed25519); + assert.equal(signer.verfer.transferable, true); // create cipher of salt - let saltcipher = encrypter.encrypt(saltqb64b) - assert.equal(saltcipher.code, MtrDex.X25519_Cipher_Salt) + let saltcipher = encrypter.encrypt(saltqb64b); + assert.equal(saltcipher.code, MtrDex.X25519_Cipher_Salt); // each encryption uses a nonce so not a stable representation for testing // decrypt salt cipher using ser - let desalter = decrypter.decrypt(saltcipher.qb64b) - assert.deepStrictEqual(desalter.qb64b, saltqb64b) - assert.equal(desalter.code, MtrDex.Salt_128) + let desalter = decrypter.decrypt(saltcipher.qb64b); + assert.deepStrictEqual(desalter.qb64b, saltqb64b); + assert.equal(desalter.code, MtrDex.Salt_128); // decrypt salt cipher using cipher - desalter = decrypter.decrypt(null, saltcipher) - assert.deepStrictEqual(desalter.qb64b, saltqb64b) - assert.equal(desalter.code, MtrDex.Salt_128) + desalter = decrypter.decrypt(null, saltcipher); + assert.deepStrictEqual(desalter.qb64b, saltqb64b); + assert.equal(desalter.code, MtrDex.Salt_128); // use previously stored fully qualified seed cipher with different nonce // get from seedcipher above - let cipherseed = 'PM9jOGWNYfjM_oLXJNaQ8UlFSAV5ACjsUY7J16xfzrlpc9Ve3A5WYrZ4o_NHtP5lhp78Usspl9fyFdnCdItNd5JyqZ6dt8SXOt6TOqOCs-gy0obrwFkPPqBvVkEw' - designer = decrypter.decrypt(b(cipherseed), null, signer.verfer.transferable) - assert.deepStrictEqual(designer.qb64b, seedqb64b) - assert.equal(designer.code, MtrDex.Ed25519_Seed) - assert.equal(designer.verfer.code, MtrDex.Ed25519) + let cipherseed = + 'PM9jOGWNYfjM_oLXJNaQ8UlFSAV5ACjsUY7J16xfzrlpc9Ve3A5WYrZ4o_NHtP5lhp78Usspl9fyFdnCdItNd5JyqZ6dt8SXOt6TOqOCs-gy0obrwFkPPqBvVkEw'; + designer = decrypter.decrypt( + b(cipherseed), + null, + signer.verfer.transferable + ); + assert.deepStrictEqual(designer.qb64b, seedqb64b); + assert.equal(designer.code, MtrDex.Ed25519_Seed); + assert.equal(designer.verfer.code, MtrDex.Ed25519); // use previously stored fully qualified salt cipher with different nonce // get from saltcipher above - let ciphersalt = '1AAHjlR2QR9J5Et67Wy-ZaVdTryN6T6ohg44r73GLRPnHw-5S3ABFkhWyIwLOI6TXUB_5CT13S8JvknxLxBaF8ANPK9FSOPD8tYu' - desalter = decrypter.decrypt(b(ciphersalt)) - assert.deepStrictEqual(desalter.qb64b, saltqb64b) - assert.equal(desalter.code, MtrDex.Salt_128) + let ciphersalt = + '1AAHjlR2QR9J5Et67Wy-ZaVdTryN6T6ohg44r73GLRPnHw-5S3ABFkhWyIwLOI6TXUB_5CT13S8JvknxLxBaF8ANPK9FSOPD8tYu'; + desalter = decrypter.decrypt(b(ciphersalt)); + assert.deepStrictEqual(desalter.qb64b, saltqb64b); + assert.equal(desalter.code, MtrDex.Salt_128); // Create new decrypter but use seed parameter to init prikey - decrypter = new Decrypter({}, cryptsigner.qb64b) - assert.equal(decrypter.code, MtrDex.X25519_Private) - assert.equal(decrypter.qb64, 'OLCFxqMz1z1UUS0TEJnvZP_zXHcuYdQsSGBWdOZeY5VQ') - assert.deepStrictEqual(decrypter.raw, prikey) + decrypter = new Decrypter({}, cryptsigner.qb64b); + assert.equal(decrypter.code, MtrDex.X25519_Private); + assert.equal( + decrypter.qb64, + 'OLCFxqMz1z1UUS0TEJnvZP_zXHcuYdQsSGBWdOZeY5VQ' + ); + assert.deepStrictEqual(decrypter.raw, prikey); // decrypt ciphersalt - desalter = decrypter.decrypt(saltcipher.qb64b) - assert.deepStrictEqual(desalter.qb64b, saltqb64b) - assert.equal(desalter.code, MtrDex.Salt_128) + desalter = decrypter.decrypt(saltcipher.qb64b); + assert.deepStrictEqual(desalter.qb64b, saltqb64b); + assert.equal(desalter.code, MtrDex.Salt_128); }); -}); \ No newline at end of file +}); diff --git a/test/core/diger.test.ts b/test/core/diger.test.ts index 76ce18fb..7e083c12 100644 --- a/test/core/diger.test.ts +++ b/test/core/diger.test.ts @@ -1,55 +1,55 @@ -import {Matter} from "../../src/keri/core/matter"; +import { Matter } from '../../src/keri/core/matter'; -import {createHash} from "blake3" -import {strict as assert} from "assert"; +import { createHash } from 'blake3'; +import { strict as assert } from 'assert'; import { Diger } from '../../src/keri/core/diger'; import { MtrDex } from '../../src/keri/core/matter'; import { Buffer } from 'buffer'; describe('Diger', () => { - it('should generate digests', () => { - // Create something to digest and verify - const ser = Buffer.from('abcdefghijklmnopqrstuvwxyz0123456789', 'binary'); - const hasher = createHash(); - const digest = hasher.update(ser).digest(''); - - let diger = new Diger({raw: digest}); - assert.deepStrictEqual(diger.code, MtrDex.Blake3_256); - - let sizage = Matter.Sizes.get(diger.code) - assert.deepStrictEqual( - diger.qb64.length, - sizage!.fs, - ); - let result = diger.verify(ser); - assert.equal(result, true); - - result = diger.verify( - Buffer.concat([ser, Buffer.from('2j2idjpwjfepjtgi', 'binary')]), - ); - assert.equal(result, false); - diger = new Diger({raw: digest, code: MtrDex.Blake3_256}); - assert.deepStrictEqual(diger.code, MtrDex.Blake3_256); - - assert.equal(diger.qb64, "ELC5L3iBVD77d_MYbYGGCUQgqQBju1o4x1Ud-z2sL-ux"); - sizage = Matter.Sizes.get(diger.code) - assert.deepStrictEqual( - diger.qb64.length, - sizage!.fs, - ); - - result = diger.verify(ser); - assert.equal(result, true); - - diger = new Diger({}, ser); - assert.equal(diger.qb64, "ELC5L3iBVD77d_MYbYGGCUQgqQBju1o4x1Ud-z2sL-ux"); - sizage = Matter.Sizes.get(diger.code) - assert.deepStrictEqual( - diger.qb64.length, - sizage!.fs, - ); - result = diger.verify(ser); - assert.equal(result, true); + it('should generate digests', () => { + // Create something to digest and verify + const ser = Buffer.from( + 'abcdefghijklmnopqrstuvwxyz0123456789', + 'binary' + ); + const hasher = createHash(); + const digest = hasher.update(ser).digest(''); + + let diger = new Diger({ raw: digest }); + assert.deepStrictEqual(diger.code, MtrDex.Blake3_256); + + let sizage = Matter.Sizes.get(diger.code); + assert.deepStrictEqual(diger.qb64.length, sizage!.fs); + let result = diger.verify(ser); + assert.equal(result, true); + + result = diger.verify( + Buffer.concat([ser, Buffer.from('2j2idjpwjfepjtgi', 'binary')]) + ); + assert.equal(result, false); + diger = new Diger({ raw: digest, code: MtrDex.Blake3_256 }); + assert.deepStrictEqual(diger.code, MtrDex.Blake3_256); + + assert.equal( + diger.qb64, + 'ELC5L3iBVD77d_MYbYGGCUQgqQBju1o4x1Ud-z2sL-ux' + ); + sizage = Matter.Sizes.get(diger.code); + assert.deepStrictEqual(diger.qb64.length, sizage!.fs); + + result = diger.verify(ser); + assert.equal(result, true); + + diger = new Diger({}, ser); + assert.equal( + diger.qb64, + 'ELC5L3iBVD77d_MYbYGGCUQgqQBju1o4x1Ud-z2sL-ux' + ); + sizage = Matter.Sizes.get(diger.code); + assert.deepStrictEqual(diger.qb64.length, sizage!.fs); + result = diger.verify(ser); + assert.equal(result, true); }); }); diff --git a/test/core/encrypter.test.ts b/test/core/encrypter.test.ts index 7517a895..445be03a 100644 --- a/test/core/encrypter.test.ts +++ b/test/core/encrypter.test.ts @@ -1,64 +1,101 @@ -import {Matter} from "../../src/keri/core/matter"; - -import {strict as assert} from "assert"; -import { MtrDex } from'../../src/keri/core/matter'; -import libsodium from "libsodium-wrappers-sumo"; -import {Signer} from "../../src/keri/core/signer"; -import {Encrypter} from "../../src/keri/core/encrypter"; -import {Verfer} from "../../src/keri/core/verfer"; -import {d} from "../../src/keri/core/core"; +import { Matter } from '../../src/keri/core/matter'; +import { strict as assert } from 'assert'; +import { MtrDex } from '../../src/keri/core/matter'; +import libsodium from 'libsodium-wrappers-sumo'; +import { Signer } from '../../src/keri/core/signer'; +import { Encrypter } from '../../src/keri/core/encrypter'; +import { Verfer } from '../../src/keri/core/verfer'; +import { d } from '../../src/keri/core/core'; describe('Encrypter', () => { it('should encrypt stuff', async () => { await libsodium.ready; // (b'\x18;0\xc4\x0f*vF\xfa\xe3\xa2Eee\x1f\x96o\xce)G\x85\xe3X\x86\xda\x04\xf0\xdc\xde\x06\xc0+') - let seed = new Uint8Array([24, 59, 48, 196, 15, 42, 118, 70, 250, 227, 162, 69, 101, 101, 31, 150, 111, 206, 41, 71, 133, 227, 88, 134, 218, 4, 240, 220, 222, 6, 192, 43]) - let seedqb64b = new Matter({raw: seed, code: MtrDex.Ed25519_Seed}).qb64b + let seed = new Uint8Array([ + 24, 59, 48, 196, 15, 42, 118, 70, 250, 227, 162, 69, 101, 101, 31, + 150, 111, 206, 41, 71, 133, 227, 88, 134, 218, 4, 240, 220, 222, 6, + 192, 43, + ]); + let seedqb64b = new Matter({ raw: seed, code: MtrDex.Ed25519_Seed }) + .qb64b; - assert.equal(d(seedqb64b), 'ABg7MMQPKnZG-uOiRWVlH5ZvzilHheNYhtoE8NzeBsAr') + assert.equal( + d(seedqb64b), + 'ABg7MMQPKnZG-uOiRWVlH5ZvzilHheNYhtoE8NzeBsAr' + ); // b'6\x08d\r\xa1\xbb9\x8dp\x8d\xa0\xc0\x13J\x87r' - let salt = new Uint8Array([54, 8, 100, 13, 161, 187, 57, 141, 112, 141, 160, 192, 19, 74, 135, 114]) - let saltqb64 = new Matter({raw: salt, code: MtrDex.Salt_128}).qb64 - let saltqb64b = new Matter({raw: salt, code: MtrDex.Salt_128}).qb64b + let salt = new Uint8Array([ + 54, 8, 100, 13, 161, 187, 57, 141, 112, 141, 160, 192, 19, 74, 135, + 114, + ]); + let saltqb64 = new Matter({ raw: salt, code: MtrDex.Salt_128 }).qb64; + let saltqb64b = new Matter({ raw: salt, code: MtrDex.Salt_128 }).qb64b; assert.equal(saltqb64, '0AA2CGQNobs5jXCNoMATSody'); // b'h,#|\x8ap"\x12\xc43t2\xa6\xe1\x18\x19\xf0f2,y\xc4\xc21@\xf5@\x15.\xa2\x1a\xcf' - let cryptseed = new Uint8Array([104, 44, 35, 124, 138, 112, 34, 18, 196, 51, 116, 50, 166, 225, 24, 25, 240, 102, 50, 44, 121, 196, 194, 49, 64, 245, 64, 21, 46, 162, 26, 207]) - let cryptsigner = new Signer({raw: cryptseed, code: MtrDex.Ed25519_Seed, transferable: true}) - let keypair = libsodium.crypto_sign_seed_keypair(cryptseed) // raw - let pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519(keypair.publicKey) - let prikey = libsodium.crypto_sign_ed25519_sk_to_curve25519(keypair.privateKey) - - assert.throws(function() { - new Encrypter({}) - }) - - let encrypter = new Encrypter({raw: pubkey}) - assert.equal(encrypter.code,MtrDex.X25519) - assert.equal(encrypter.qb64, 'CAF7Wr3XNq5hArcOuBJzaY6Nd23jgtUVI6KDfb3VngkR') - assert.deepStrictEqual(encrypter.raw, pubkey) - assert.equal(encrypter.verifySeed(cryptsigner.qb64b), true) + let cryptseed = new Uint8Array([ + 104, 44, 35, 124, 138, 112, 34, 18, 196, 51, 116, 50, 166, 225, 24, + 25, 240, 102, 50, 44, 121, 196, 194, 49, 64, 245, 64, 21, 46, 162, + 26, 207, + ]); + let cryptsigner = new Signer({ + raw: cryptseed, + code: MtrDex.Ed25519_Seed, + transferable: true, + }); + let keypair = libsodium.crypto_sign_seed_keypair(cryptseed); // raw + let pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519( + keypair.publicKey + ); + let prikey = libsodium.crypto_sign_ed25519_sk_to_curve25519( + keypair.privateKey + ); - let cipher = encrypter.encrypt(seedqb64b) - assert.equal( cipher.code, MtrDex.X25519_Cipher_Seed) - let uncb = libsodium.crypto_box_seal_open(cipher.raw, encrypter.raw, prikey) - assert.deepStrictEqual(uncb, seedqb64b) + assert.throws(function () { + new Encrypter({}); + }); - cipher = encrypter.encrypt(saltqb64b) - assert.equal(cipher.code, MtrDex.X25519_Cipher_Salt) - uncb = libsodium.crypto_box_seal_open(cipher.raw, encrypter.raw, prikey) - assert.deepStrictEqual(uncb, saltqb64b) + let encrypter = new Encrypter({ raw: pubkey }); + assert.equal(encrypter.code, MtrDex.X25519); + assert.equal( + encrypter.qb64, + 'CAF7Wr3XNq5hArcOuBJzaY6Nd23jgtUVI6KDfb3VngkR' + ); + assert.deepStrictEqual(encrypter.raw, pubkey); + assert.equal(encrypter.verifySeed(cryptsigner.qb64b), true); - let verfer = new Verfer({raw: keypair.publicKey, code: MtrDex.Ed25519}) + let cipher = encrypter.encrypt(seedqb64b); + assert.equal(cipher.code, MtrDex.X25519_Cipher_Seed); + let uncb = libsodium.crypto_box_seal_open( + cipher.raw, + encrypter.raw, + prikey + ); + assert.deepStrictEqual(uncb, seedqb64b); - encrypter = new Encrypter({}, verfer.qb64b) - assert.equal(encrypter.code, MtrDex.X25519) - assert.equal(encrypter.qb64, 'CAF7Wr3XNq5hArcOuBJzaY6Nd23jgtUVI6KDfb3VngkR') - assert.deepStrictEqual(encrypter.raw, pubkey) + cipher = encrypter.encrypt(saltqb64b); + assert.equal(cipher.code, MtrDex.X25519_Cipher_Salt); + uncb = libsodium.crypto_box_seal_open( + cipher.raw, + encrypter.raw, + prikey + ); + assert.deepStrictEqual(uncb, saltqb64b); + let verfer = new Verfer({ + raw: keypair.publicKey, + code: MtrDex.Ed25519, + }); + encrypter = new Encrypter({}, verfer.qb64b); + assert.equal(encrypter.code, MtrDex.X25519); + assert.equal( + encrypter.qb64, + 'CAF7Wr3XNq5hArcOuBJzaY6Nd23jgtUVI6KDfb3VngkR' + ); + assert.deepStrictEqual(encrypter.raw, pubkey); }); }); diff --git a/test/core/eventing.test.ts b/test/core/eventing.test.ts index 52900d54..6f3664dd 100644 --- a/test/core/eventing.test.ts +++ b/test/core/eventing.test.ts @@ -1,116 +1,176 @@ -import libsodium from "libsodium-wrappers-sumo"; -import {Signer} from "../../src/keri/core/signer"; -import {strict as assert} from "assert"; -import {MtrDex} from "../../src/keri/core/matter"; -import {incept, messagize} from "../../src/keri/core/eventing"; -import {Saider} from "../../src/keri/core/saider"; -import {Diger} from "../../src/keri/core/diger"; -import {b, d, Ilks} from "../../src/keri/core/core"; -import {Siger} from "../../src/keri/core/siger"; - +import libsodium from 'libsodium-wrappers-sumo'; +import { Signer } from '../../src/keri/core/signer'; +import { strict as assert } from 'assert'; +import { MtrDex } from '../../src/keri/core/matter'; +import { incept, messagize } from '../../src/keri/core/eventing'; +import { Saider } from '../../src/keri/core/saider'; +import { Diger } from '../../src/keri/core/diger'; +import { b, d, Ilks } from '../../src/keri/core/core'; +import { Siger } from '../../src/keri/core/siger'; describe('key event function', () => { - it("incept should create inception events", async () => { + it('incept should create inception events', async () => { await libsodium.ready; - let seed = new Uint8Array([159, 123, 168, 167, 168, 67, 57, 150, 38, 250, 177, 153, 235, 170, 32, 196, 27, 71, 17, 196, 174, 83, 65, 82, 201, 189, 4, 157, 133, 41, 126, 147]) - let signer0 = new Signer({raw: seed, transferable: false}) // original signing keypair non transferable - assert.equal(signer0.code, MtrDex.Ed25519_Seed) - assert.equal(signer0.verfer.code, MtrDex.Ed25519N) - let keys0 = [signer0.verfer.qb64] - let serder = incept({keys: keys0}) // default nxt is empty so abandoned - assert.equal(serder.ked["i"], 'BFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH') - assert.deepStrictEqual(serder.ked["n"], []) - assert.equal(serder.raw, + let seed = new Uint8Array([ + 159, 123, 168, 167, 168, 67, 57, 150, 38, 250, 177, 153, 235, 170, + 32, 196, 27, 71, 17, 196, 174, 83, 65, 82, 201, 189, 4, 157, 133, + 41, 126, 147, + ]); + let signer0 = new Signer({ raw: seed, transferable: false }); // original signing keypair non transferable + assert.equal(signer0.code, MtrDex.Ed25519_Seed); + assert.equal(signer0.verfer.code, MtrDex.Ed25519N); + let keys0 = [signer0.verfer.qb64]; + let serder = incept({ keys: keys0 }); // default nxt is empty so abandoned + assert.equal( + serder.ked['i'], + 'BFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH' + ); + assert.deepStrictEqual(serder.ked['n'], []); + assert.equal( + serder.raw, '{"v":"KERI10JSON0000fd_","t":"icp","d":"EMW0zK3bagYPO6gx3w7Ua90f-I7x5kGIaI4X' + - 'eq9W8_As","i":"BFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH","s":"0","kt":"1' + - '","k":["BFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"],"nt":"0","n":[],"bt":' + - '"0","b":[],"c":[],"a":[]}' - ) - let saider = new Saider({code: MtrDex.Blake3_256}, serder.ked) - assert.equal(saider.verify(serder.ked), true) + 'eq9W8_As","i":"BFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH","s":"0","kt":"1' + + '","k":["BFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"],"nt":"0","n":[],"bt":' + + '"0","b":[],"c":[],"a":[]}' + ); + let saider = new Saider({ code: MtrDex.Blake3_256 }, serder.ked); + assert.equal(saider.verify(serder.ked), true); assert.throws(() => { - serder = incept({keys: keys0, code: MtrDex.Ed25519N, ndigs: ["ABCDE"]}) - }) + serder = incept({ + keys: keys0, + code: MtrDex.Ed25519N, + ndigs: ['ABCDE'], + }); + }); assert.throws(() => { - serder = incept({keys: keys0, code: MtrDex.Ed25519N, wits: ["ABCDE"]}) - }) + serder = incept({ + keys: keys0, + code: MtrDex.Ed25519N, + wits: ['ABCDE'], + }); + }); assert.throws(() => { - serder = incept({keys: keys0, code: MtrDex.Ed25519N, data: [{"i": "ABCDE"}]}) - }) + serder = incept({ + keys: keys0, + code: MtrDex.Ed25519N, + data: [{ i: 'ABCDE' }], + }); + }); - signer0 = new Signer({raw: seed}) // original signing keypair transferable default - assert.equal(signer0.code, MtrDex.Ed25519_Seed) - assert.equal(signer0.verfer.code, MtrDex.Ed25519) - keys0 = [signer0.verfer.qb64] - serder = incept({keys: keys0}) // default nxt is empty so abandoned - assert.equal(serder.ked["i"], 'DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH') - assert.deepStrictEqual(serder.ked["n"], []) - assert.equal(serder.raw, + signer0 = new Signer({ raw: seed }); // original signing keypair transferable default + assert.equal(signer0.code, MtrDex.Ed25519_Seed); + assert.equal(signer0.verfer.code, MtrDex.Ed25519); + keys0 = [signer0.verfer.qb64]; + serder = incept({ keys: keys0 }); // default nxt is empty so abandoned + assert.equal( + serder.ked['i'], + 'DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH' + ); + assert.deepStrictEqual(serder.ked['n'], []); + assert.equal( + serder.raw, '{"v":"KERI10JSON0000fd_","t":"icp","d":"EPLRRJFe2FHdXKVTkSEX4xb4x-YaPFJ2Xds1' + - 'vhtNTd4n","i":"DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH","s":"0","kt":"1' + - '","k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"],"nt":"0","n":[],"bt":' + - '"0","b":[],"c":[],"a":[]}') - saider = new Saider({code: MtrDex.Blake3_256}, serder.ked) - assert.equal(saider.verify(serder.ked), true) + 'vhtNTd4n","i":"DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH","s":"0","kt":"1' + + '","k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"],"nt":"0","n":[],"bt":' + + '"0","b":[],"c":[],"a":[]}' + ); + saider = new Saider({ code: MtrDex.Blake3_256 }, serder.ked); + assert.equal(saider.verify(serder.ked), true); // (b'\x83B~\x04\x94\xe3\xceUQy\x11f\x0c\x93]\x1e\xbf\xacQ\xb5\xd6Y^\xa2E\xfa\x015\x98Y\xdd\xe8') - let seed1 = new Uint8Array([131, 66, 126, 4, 148, 227, 206, 85, 81, 121, 17, 102, 12, 147, 93, 30, 191, 172, 81, 181, 214, 89, 94, 162, 69, 250, 1, 53, 152, 89, 221, 232]) - let signer1 = new Signer({raw: seed1}) // next signing keypair transferable is default - assert.equal(signer1.code, MtrDex.Ed25519_Seed) - assert.equal(signer1.verfer.code, MtrDex.Ed25519) + let seed1 = new Uint8Array([ + 131, 66, 126, 4, 148, 227, 206, 85, 81, 121, 17, 102, 12, 147, 93, + 30, 191, 172, 81, 181, 214, 89, 94, 162, 69, 250, 1, 53, 152, 89, + 221, 232, + ]); + let signer1 = new Signer({ raw: seed1 }); // next signing keypair transferable is default + assert.equal(signer1.code, MtrDex.Ed25519_Seed); + assert.equal(signer1.verfer.code, MtrDex.Ed25519); // compute nxt digest - let nxt1 = [new Diger({}, signer1.verfer.qb64b).qb64] // dfault sith is 1 - assert.deepStrictEqual(nxt1, ['EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W']) - let serder0 = incept({keys: keys0, ndigs: nxt1, code: MtrDex.Blake3_256}) // intive false - assert.equal(serder0.ked["t"], Ilks.icp) - assert.equal(serder0.ked['d'], 'EAKCxMOuoRzREVHsHCkLilBrUXTvyenBiuM2QtV8BB0C') - assert.equal(serder0.ked['d'], serder0.ked["i"]) - assert.equal(serder0.ked["s"], '0') - assert.equal(serder0.ked["kt"], "1") - assert.equal(serder0.ked["nt"], "1") - assert.deepStrictEqual(serder0.ked["n"], nxt1) - assert.equal(serder0.ked["bt"], '0') // hex str - assert.equal(serder0.raw, + let nxt1 = [new Diger({}, signer1.verfer.qb64b).qb64]; // dfault sith is 1 + assert.deepStrictEqual(nxt1, [ + 'EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W', + ]); + let serder0 = incept({ + keys: keys0, + ndigs: nxt1, + code: MtrDex.Blake3_256, + }); // intive false + assert.equal(serder0.ked['t'], Ilks.icp); + assert.equal( + serder0.ked['d'], + 'EAKCxMOuoRzREVHsHCkLilBrUXTvyenBiuM2QtV8BB0C' + ); + assert.equal(serder0.ked['d'], serder0.ked['i']); + assert.equal(serder0.ked['s'], '0'); + assert.equal(serder0.ked['kt'], '1'); + assert.equal(serder0.ked['nt'], '1'); + assert.deepStrictEqual(serder0.ked['n'], nxt1); + assert.equal(serder0.ked['bt'], '0'); // hex str + assert.equal( + serder0.raw, '{"v":"KERI10JSON00012b_","t":"icp","d":"EAKCxMOuoRzREVHsHCkLilBrUXTvyenBiuM2' + - 'QtV8BB0C","i":"EAKCxMOuoRzREVHsHCkLilBrUXTvyenBiuM2QtV8BB0C","s":"0","kt":"1' + - '","k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"],"nt":"1","n":["EIf-EN' + - 'w7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":"0","b":[],"c":[],"a":[]}') + 'QtV8BB0C","i":"EAKCxMOuoRzREVHsHCkLilBrUXTvyenBiuM2QtV8BB0C","s":"0","kt":"1' + + '","k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"],"nt":"1","n":["EIf-EN' + + 'w7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":"0","b":[],"c":[],"a":[]}' + ); // (b'\x83B~\x04\x94\xe3\xceUQy\x11f\x0c\x93]\x1e\xbf\xacQ\xb5\xd6Y^\xa2E\xfa\x015\x98Y\xdd\xe8') - seed1 = new Uint8Array([131, 66, 126, 4, 148, 227, 206, 85, 81, 121, 17, 102, 12, 147, 93, 30, 191, 172, 81, 181, 214, 89, 94, 162, 69, 250, 1, 53, 152, 89, 221, 232]) - signer1 = new Signer({raw: seed1}) // next signing keypair transferable is default - assert.equal(signer1.code, MtrDex.Ed25519_Seed) - assert.equal(signer1.verfer.code, MtrDex.Ed25519) + seed1 = new Uint8Array([ + 131, 66, 126, 4, 148, 227, 206, 85, 81, 121, 17, 102, 12, 147, 93, + 30, 191, 172, 81, 181, 214, 89, 94, 162, 69, 250, 1, 53, 152, 89, + 221, 232, + ]); + signer1 = new Signer({ raw: seed1 }); // next signing keypair transferable is default + assert.equal(signer1.code, MtrDex.Ed25519_Seed); + assert.equal(signer1.verfer.code, MtrDex.Ed25519); // compute nxt digest - nxt1 = [new Diger({}, signer1.verfer.qb64b).qb64] // dfault sith is 1 - assert.deepStrictEqual(nxt1, ['EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W']) - serder0 = incept({keys: keys0, ndigs: nxt1, code: MtrDex.Blake3_256, intive: true}) // intive true - assert.equal(serder0.ked["t"], Ilks.icp) - assert.equal(serder0.ked['d'], 'EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL') - assert.equal(serder0.ked['d'], serder0.ked["i"]) - assert.equal(serder0.ked["s"], '0') - assert.equal(serder0.ked["kt"], 1) - assert.equal(serder0.ked["nt"], 1) - assert.deepStrictEqual(serder0.ked["n"], nxt1) - assert.equal(serder0.ked["bt"], 0) - assert.equal(serder0.raw, + nxt1 = [new Diger({}, signer1.verfer.qb64b).qb64]; // dfault sith is 1 + assert.deepStrictEqual(nxt1, [ + 'EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W', + ]); + serder0 = incept({ + keys: keys0, + ndigs: nxt1, + code: MtrDex.Blake3_256, + intive: true, + }); // intive true + assert.equal(serder0.ked['t'], Ilks.icp); + assert.equal( + serder0.ked['d'], + 'EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL' + ); + assert.equal(serder0.ked['d'], serder0.ked['i']); + assert.equal(serder0.ked['s'], '0'); + assert.equal(serder0.ked['kt'], 1); + assert.equal(serder0.ked['nt'], 1); + assert.deepStrictEqual(serder0.ked['n'], nxt1); + assert.equal(serder0.ked['bt'], 0); + assert.equal( + serder0.raw, '{"v":"KERI10JSON000125_","t":"icp","d":"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5u' + - 'k-WxvhsL","i":"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","s":"0","kt":1,' + - '"k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"],"nt":1,"n":["EIf-ENw7Pr' + - 'M52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":0,"b":[],"c":[],"a":[]}') - - let siger = signer0.sign(b(serder0.raw), 0) as Siger - assert.equal(siger.qb64, "AABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I") + 'k-WxvhsL","i":"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","s":"0","kt":1,' + + '"k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"],"nt":1,"n":["EIf-ENw7Pr' + + 'M52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":0,"b":[],"c":[],"a":[]}' + ); - let msg = messagize(serder0, [siger]) - assert.equal(d(msg), '{"v":"KERI10JSON000125_","t":"icp","d":"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","i"' + - ':"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","s":"0","kt":1,"k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"],' + - '"nt":1,"n":["EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":0,"b":[],"c":[],"a":[]}' + - '-AABAABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I') + let siger = signer0.sign(b(serder0.raw), 0) as Siger; + assert.equal( + siger.qb64, + 'AABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I' + ); - }) -}) \ No newline at end of file + let msg = messagize(serder0, [siger]); + assert.equal( + d(msg), + '{"v":"KERI10JSON000125_","t":"icp","d":"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","i"' + + ':"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","s":"0","kt":1,"k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"],' + + '"nt":1,"n":["EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":0,"b":[],"c":[],"a":[]}' + + '-AABAABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I' + ); + }); +}); diff --git a/test/core/httping.test.ts b/test/core/httping.test.ts index d2b1556c..a1851f76 100644 --- a/test/core/httping.test.ts +++ b/test/core/httping.test.ts @@ -1,60 +1,87 @@ -import {strict as assert} from "assert"; -import libsodium from "libsodium-wrappers-sumo"; -import {Salter} from "../../src/keri/core/salter"; -import {b} from "../../src/keri/core/core"; -import {siginput, desiginput, SiginputArgs} from "../../src/keri/core/httping"; -import * as utilApi from "../../src/keri/core/utils"; - +import { strict as assert } from 'assert'; +import libsodium from 'libsodium-wrappers-sumo'; +import { Salter } from '../../src/keri/core/salter'; +import { b } from '../../src/keri/core/core'; +import { + siginput, + desiginput, + SiginputArgs, +} from '../../src/keri/core/httping'; +import * as utilApi from '../../src/keri/core/utils'; describe('siginput', () => { it('create valid Signature-Input header with signature', async () => { await libsodium.ready; - let salt = '0123456789abcdef' - let salter = new Salter({raw: b(salt)}) - let signer = salter.signer() + let salt = '0123456789abcdef'; + let salter = new Salter({ raw: b(salt) }); + let signer = salter.signer(); let headers: Headers = new Headers([ - ["Content-Type", "application/json"], - ["Content-Length", "256"], - ["Connection", "close"], - ["Signify-Resource", "EWJkQCFvKuyxZi582yJPb0wcwuW3VXmFNuvbQuBpgmIs"], - ["Signify-Timestamp", "2022-09-24T00:05:48.196795+00:00"], - ]) - jest.spyOn(utilApi, "nowUTC").mockReturnValue(new Date("2021-01-01T00:00:00.000000+00:00")) - + ['Content-Type', 'application/json'], + ['Content-Length', '256'], + ['Connection', 'close'], + [ + 'Signify-Resource', + 'EWJkQCFvKuyxZi582yJPb0wcwuW3VXmFNuvbQuBpgmIs', + ], + ['Signify-Timestamp', '2022-09-24T00:05:48.196795+00:00'], + ]); + jest.spyOn(utilApi, 'nowUTC').mockReturnValue( + new Date('2021-01-01T00:00:00.000000+00:00') + ); let [header, sig] = siginput(signer, { - name: "sig0", - method: "POST", - path: "/signify", + name: 'sig0', + method: 'POST', + path: '/signify', headers, - fields: ["Signify-Resource", "@method", "@path", "Signify-Timestamp"], - alg: "ed25519", - keyid: signer.verfer.qb64 - } as SiginputArgs) + fields: [ + 'Signify-Resource', + '@method', + '@path', + 'Signify-Timestamp', + ], + alg: 'ed25519', + keyid: signer.verfer.qb64, + } as SiginputArgs); - assert.equal(header.size, 1) - assert.equal(header.has("Signature-Input"), true) - let sigipt = header.get("Signature-Input") - assert.equal(sigipt, 'sig0=("Signify-Resource" "@method" "@path" "Signify-Timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"') - assert.equal(sig.qb64, "0BAJWoDvZXYKnq_9rFTy_mucctxk3rVK6szopNi1rq5WQcJSNIw-_PocSQNoQGD1Ow_s2mDI5-Qqm34Y56gUKQcF") - }) -}) + assert.equal(header.size, 1); + assert.equal(header.has('Signature-Input'), true); + let sigipt = header.get('Signature-Input'); + assert.equal( + sigipt, + 'sig0=("Signify-Resource" "@method" "@path" "Signify-Timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"' + ); + assert.equal( + sig.qb64, + '0BAJWoDvZXYKnq_9rFTy_mucctxk3rVK6szopNi1rq5WQcJSNIw-_PocSQNoQGD1Ow_s2mDI5-Qqm34Y56gUKQcF' + ); + }); +}); -describe("desiginput", () => { +describe('desiginput', () => { it('create valid Signature-Input header with signature', async () => { await libsodium.ready; - let siginput = 'sig0=("signify-resource" "@method" "@path" "signify-timestamp");created=1609459200;keyid="EIaGMMWJFPmtXznY1IIiKDIrg-vIyge6mBl2QV8dDjI3";alg="ed25519"' + let siginput = + 'sig0=("signify-resource" "@method" "@path" "signify-timestamp");created=1609459200;keyid="EIaGMMWJFPmtXznY1IIiKDIrg-vIyge6mBl2QV8dDjI3";alg="ed25519"'; - let inputs = desiginput(siginput) - assert.equal(inputs.length, 1) - let input = inputs[0] - assert.deepStrictEqual(input.fields, ["signify-resource","@method", "@path", "signify-timestamp",]) - assert.equal(input.created, 1609459200) - assert.equal(input.alg, "ed25519") - assert.equal(input.keyid, "EIaGMMWJFPmtXznY1IIiKDIrg-vIyge6mBl2QV8dDjI3") - assert.equal(input.expires, undefined) - assert.equal(input.nonce, undefined) - assert.equal(input.context, undefined) - }) -}) \ No newline at end of file + let inputs = desiginput(siginput); + assert.equal(inputs.length, 1); + let input = inputs[0]; + assert.deepStrictEqual(input.fields, [ + 'signify-resource', + '@method', + '@path', + 'signify-timestamp', + ]); + assert.equal(input.created, 1609459200); + assert.equal(input.alg, 'ed25519'); + assert.equal( + input.keyid, + 'EIaGMMWJFPmtXznY1IIiKDIrg-vIyge6mBl2QV8dDjI3' + ); + assert.equal(input.expires, undefined); + assert.equal(input.nonce, undefined); + assert.equal(input.context, undefined); + }); +}); diff --git a/test/core/indexer.test.ts b/test/core/indexer.test.ts index 6a258db8..bff64dcc 100644 --- a/test/core/indexer.test.ts +++ b/test/core/indexer.test.ts @@ -1,310 +1,384 @@ -import libsodium from "libsodium-wrappers-sumo"; -import {strict as assert} from "assert"; -import {IdrDex, Indexer} from "../../src/keri/core/indexer"; -import {b, intToB64} from "../../src/keri/core/core"; -import Base64 from "urlsafe-base64" +import libsodium from 'libsodium-wrappers-sumo'; +import { strict as assert } from 'assert'; +import { IdrDex, Indexer } from '../../src/keri/core/indexer'; +import { b, intToB64 } from '../../src/keri/core/core'; +import Base64 from 'urlsafe-base64'; import { Buffer } from 'buffer'; describe('Indexer', () => { it('should encode and decode dual indexed signatures', async () => { await libsodium.ready; - assert.equal(Indexer.Sizes.get('A')!.hs, 1) // hard size - assert.equal(Indexer.Sizes.get('A')!.ss, 1) // soft size - assert.equal(Indexer.Sizes.get('A')!.os, 0) // other size - assert.equal(Indexer.Sizes.get('A')!.fs, 88) // full size - assert.equal(Indexer.Sizes.get('A')!.ls, 0) // lead size + assert.equal(Indexer.Sizes.get('A')!.hs, 1); // hard size + assert.equal(Indexer.Sizes.get('A')!.ss, 1); // soft size + assert.equal(Indexer.Sizes.get('A')!.os, 0); // other size + assert.equal(Indexer.Sizes.get('A')!.fs, 88); // full size + assert.equal(Indexer.Sizes.get('A')!.ls, 0); // lead size Indexer.Sizes.forEach((_, key) => { - assert.equal(Indexer.Hards.get(key[0]), Indexer.Sizes.get(key)!.hs, `${key} hs not set`) - }) + assert.equal( + Indexer.Hards.get(key[0]), + Indexer.Sizes.get(key)!.hs, + `${key} hs not set` + ); + }); Indexer.Sizes.forEach((val, key) => { - assert.equal(val.hs > 0, true, `${key} hs incorrect`) - assert.equal(val.ss > 0, true) - assert.equal(val.os >= 0, true) + assert.equal(val.hs > 0, true, `${key} hs incorrect`); + assert.equal(val.ss > 0, true); + assert.equal(val.os >= 0, true); if (val.os > 0) { - assert.equal(val.os == Math.floor(val.ss / 2), true, `${key} os/ss incorrect`) + assert.equal( + val.os == Math.floor(val.ss / 2), + true, + `${key} os/ss incorrect` + ); } if (val.fs != undefined) { - assert.equal(val.fs >= val.hs + val.ss, true, `${key} fs incorrect`) - assert.equal(val.fs % 4 == 0, true, `${key} fs mod incorrect`) + assert.equal( + val.fs >= val.hs + val.ss, + true, + `${key} fs incorrect` + ); + assert.equal(val.fs % 4 == 0, true, `${key} fs mod incorrect`); } - }) + }); assert.throws(() => { - new Indexer({}) - }) + new Indexer({}); + }); // sig = (b"\x99\xd2<9$$0\x9fk\xfb\x18\xa0\x8c@r\x122.k\xb2\xc7\x1fp\x0e'm\x8f@" // b'\xaa\xa5\x8c\xc8n\x85\xc8!\xf6q\x91p\xa9\xec\xcf\x92\xaf)\xde\xca' // b'\xfc\x7f~\xd7o|\x17\x82\x1d\xd4 { - new Indexer({raw: shortsig}) - }) - - indexer = new Indexer({qb64b: qsig64b}) - assert.equal(indexer.code, IdrDex.Ed25519_Sig) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.index, 0) - assert.equal(indexer.ondex, 0) - assert.deepStrictEqual(indexer.qb64b, qsig64b) - assert.deepStrictEqual(indexer.qb64, qsig64) - - indexer = new Indexer({qb64: qsig64}) - assert.equal(indexer.code, IdrDex.Ed25519_Sig) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.index, 0) - assert.equal(indexer.ondex, 0) - assert.deepStrictEqual(indexer.qb64b, qsig64b) - assert.deepStrictEqual(indexer.qb64, qsig64) - - let badq64sig2= 'AA_Z0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ' + new Indexer({ raw: shortsig }); + }); + + indexer = new Indexer({ qb64b: qsig64b }); + assert.equal(indexer.code, IdrDex.Ed25519_Sig); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.index, 0); + assert.equal(indexer.ondex, 0); + assert.deepStrictEqual(indexer.qb64b, qsig64b); + assert.deepStrictEqual(indexer.qb64, qsig64); + + indexer = new Indexer({ qb64: qsig64 }); + assert.equal(indexer.code, IdrDex.Ed25519_Sig); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.index, 0); + assert.equal(indexer.ondex, 0); + assert.deepStrictEqual(indexer.qb64b, qsig64b); + assert.deepStrictEqual(indexer.qb64, qsig64); + + let badq64sig2 = + 'AA_Z0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ'; assert.throws(() => { - new Indexer({qb64: badq64sig2}) - }) + new Indexer({ qb64: badq64sig2 }); + }); - let longqsig64 = qsig64 + "ABCD" - indexer = new Indexer({qb64: longqsig64}) - assert.equal(indexer.qb64.length, Indexer.Sizes.get(indexer.code)!.fs) + let longqsig64 = qsig64 + 'ABCD'; + indexer = new Indexer({ qb64: longqsig64 }); + assert.equal(indexer.qb64.length, Indexer.Sizes.get(indexer.code)!.fs); - let shortqsig64 = qsig64.slice(0, -4) + let shortqsig64 = qsig64.slice(0, -4); assert.throws(() => { - new Indexer({qb64: shortqsig64}) - }) - - qsig64 = 'AFCZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ' - qsig64b = b(qsig64) - qsig2b = Base64.decode(qsig64) - assert.equal(qsig2b.length, 66) - - indexer = new Indexer({raw: sig, code: IdrDex.Ed25519_Sig, index: 5}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, IdrDex.Ed25519_Sig) - assert.equal(indexer.index, 5) - assert.equal(indexer.ondex, 5) - assert.equal(indexer.qb64, qsig64) - assert.deepStrictEqual(indexer.qb64b, qsig64b) - indexer._exfil(qsig64) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, IdrDex.Ed25519_Sig) - assert.equal(indexer.qb64, qsig64) - assert.deepStrictEqual(indexer.qb64b, qsig64b) - - indexer = new Indexer({raw: sig, code: IdrDex.Ed25519_Sig, index: 5, ondex: 5}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, IdrDex.Ed25519_Sig) - assert.equal(indexer.index, 5) - assert.equal(indexer.ondex, 5) - assert.equal(indexer.qb64, qsig64) - assert.deepStrictEqual(indexer.qb64b, qsig64b) + new Indexer({ qb64: shortqsig64 }); + }); + + qsig64 = + 'AFCZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ'; + qsig64b = b(qsig64); + qsig2b = Base64.decode(qsig64); + assert.equal(qsig2b.length, 66); + + indexer = new Indexer({ raw: sig, code: IdrDex.Ed25519_Sig, index: 5 }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, IdrDex.Ed25519_Sig); + assert.equal(indexer.index, 5); + assert.equal(indexer.ondex, 5); + assert.equal(indexer.qb64, qsig64); + assert.deepStrictEqual(indexer.qb64b, qsig64b); + indexer._exfil(qsig64); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, IdrDex.Ed25519_Sig); + assert.equal(indexer.qb64, qsig64); + assert.deepStrictEqual(indexer.qb64b, qsig64b); + + indexer = new Indexer({ + raw: sig, + code: IdrDex.Ed25519_Sig, + index: 5, + ondex: 5, + }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, IdrDex.Ed25519_Sig); + assert.equal(indexer.index, 5); + assert.equal(indexer.ondex, 5); + assert.equal(indexer.qb64, qsig64); + assert.deepStrictEqual(indexer.qb64b, qsig64b); assert.throws(() => { - new Indexer({raw: sig, code: IdrDex.Ed25519_Sig, index: 5, ondex: 0}) - }) + new Indexer({ + raw: sig, + code: IdrDex.Ed25519_Sig, + index: 5, + ondex: 0, + }); + }); assert.throws(() => { - new Indexer({raw: sig, code: IdrDex.Ed25519_Sig, index: 5, ondex: 64}) - }) - - indexer = new Indexer({raw: sig}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, IdrDex.Ed25519_Sig) - assert.equal(indexer.index, 0) - assert.equal(indexer.ondex, 0) - assert.notEqual(indexer.qb64, qsig64) - assert.notDeepStrictEqual(indexer.qb64b, qsig64b) - - indexer = new Indexer({qb64: qsig64}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, IdrDex.Ed25519_Sig) - assert.equal(indexer.index, 5) - assert.equal(indexer.ondex, 5) - assert.equal(indexer.qb64, qsig64) - assert.deepStrictEqual(indexer.qb64b, qsig64b) + new Indexer({ + raw: sig, + code: IdrDex.Ed25519_Sig, + index: 5, + ondex: 64, + }); + }); + + indexer = new Indexer({ raw: sig }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, IdrDex.Ed25519_Sig); + assert.equal(indexer.index, 0); + assert.equal(indexer.ondex, 0); + assert.notEqual(indexer.qb64, qsig64); + assert.notDeepStrictEqual(indexer.qb64b, qsig64b); + + indexer = new Indexer({ qb64: qsig64 }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, IdrDex.Ed25519_Sig); + assert.equal(indexer.index, 5); + assert.equal(indexer.ondex, 5); + assert.equal(indexer.qb64, qsig64); + assert.deepStrictEqual(indexer.qb64b, qsig64b); // test index too big assert.throws(() => { - new Indexer({raw: sig, code: IdrDex.Ed25519_Sig, index: 65}) - }) + new Indexer({ raw: sig, code: IdrDex.Ed25519_Sig, index: 65 }); + }); // test negative index assert.throws(() => { - new Indexer({raw: sig, code: IdrDex.Ed25519_Sig, index: -1}) - }) + new Indexer({ raw: sig, code: IdrDex.Ed25519_Sig, index: -1 }); + }); // test non integer index assert.throws(() => { - new Indexer({raw: sig, code: IdrDex.Ed25519_Sig, index: 3.5}) - }) - - let index = 67 - let qb64 = '2ABDBDCZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ' - let qb64b = b(qb64) - - indexer = new Indexer({raw: sig, code: IdrDex.Ed25519_Big_Sig, index: index}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, IdrDex.Ed25519_Big_Sig) - assert.equal(indexer.index, index) - assert.equal(indexer.ondex, index) - assert.equal(indexer.qb64, qb64) - assert.deepStrictEqual(indexer.qb64b, qb64b) - - indexer = new Indexer({raw: sig, code: IdrDex.Ed25519_Big_Sig, index: index, ondex: index}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, IdrDex.Ed25519_Big_Sig) - assert.equal(indexer.index, index) - assert.equal(indexer.ondex, index) - assert.equal(indexer.qb64, qb64) - assert.deepStrictEqual(indexer.qb64b, qb64b) - - indexer = new Indexer({qb64: qb64}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, IdrDex.Ed25519_Big_Sig) - assert.equal(indexer.index, index) - assert.equal(indexer.ondex, index) - assert.equal(indexer.qb64, qb64) - assert.deepStrictEqual(indexer.qb64b, qb64b) - - index = 90 - let ondex = 65 - qb64 = '2ABaBBCZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ' - qb64b = b(qb64) - - indexer = new Indexer({raw: sig, code: IdrDex.Ed25519_Big_Sig, index: index, ondex: ondex}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, IdrDex.Ed25519_Big_Sig) - assert.equal(indexer.index, index) - assert.equal(indexer.ondex, ondex) - assert.equal(indexer.qb64, qb64) - assert.deepStrictEqual(indexer.qb64b, qb64b) - - indexer = new Indexer({qb64: qb64}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, IdrDex.Ed25519_Big_Sig) - assert.equal(indexer.index, index) - assert.equal(indexer.ondex, ondex) - assert.equal(indexer.qb64, qb64) - assert.deepStrictEqual(indexer.qb64b, qb64b) - - index = 3 - let code = IdrDex.Ed25519_Crt_Sig - qb64 = 'BDCZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ' - qb64b = b(qb64) - - indexer = new Indexer({raw: sig, code: code, index: index}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, code) - assert.equal(indexer.index, index) - assert.equal(indexer.ondex, undefined) - assert.equal(indexer.qb64, qb64) - assert.deepStrictEqual(indexer.qb64b, qb64b) - - indexer = new Indexer({qb64: qb64}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, code) - assert.equal(indexer.index, index) - assert.equal(indexer.ondex, undefined) - assert.equal(indexer.qb64, qb64) - assert.deepStrictEqual(indexer.qb64b, qb64b) + new Indexer({ raw: sig, code: IdrDex.Ed25519_Sig, index: 3.5 }); + }); + + let index = 67; + let qb64 = + '2ABDBDCZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ'; + let qb64b = b(qb64); + + indexer = new Indexer({ + raw: sig, + code: IdrDex.Ed25519_Big_Sig, + index: index, + }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, IdrDex.Ed25519_Big_Sig); + assert.equal(indexer.index, index); + assert.equal(indexer.ondex, index); + assert.equal(indexer.qb64, qb64); + assert.deepStrictEqual(indexer.qb64b, qb64b); + + indexer = new Indexer({ + raw: sig, + code: IdrDex.Ed25519_Big_Sig, + index: index, + ondex: index, + }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, IdrDex.Ed25519_Big_Sig); + assert.equal(indexer.index, index); + assert.equal(indexer.ondex, index); + assert.equal(indexer.qb64, qb64); + assert.deepStrictEqual(indexer.qb64b, qb64b); + + indexer = new Indexer({ qb64: qb64 }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, IdrDex.Ed25519_Big_Sig); + assert.equal(indexer.index, index); + assert.equal(indexer.ondex, index); + assert.equal(indexer.qb64, qb64); + assert.deepStrictEqual(indexer.qb64b, qb64b); + + index = 90; + let ondex = 65; + qb64 = + '2ABaBBCZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ'; + qb64b = b(qb64); + + indexer = new Indexer({ + raw: sig, + code: IdrDex.Ed25519_Big_Sig, + index: index, + ondex: ondex, + }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, IdrDex.Ed25519_Big_Sig); + assert.equal(indexer.index, index); + assert.equal(indexer.ondex, ondex); + assert.equal(indexer.qb64, qb64); + assert.deepStrictEqual(indexer.qb64b, qb64b); + + indexer = new Indexer({ qb64: qb64 }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, IdrDex.Ed25519_Big_Sig); + assert.equal(indexer.index, index); + assert.equal(indexer.ondex, ondex); + assert.equal(indexer.qb64, qb64); + assert.deepStrictEqual(indexer.qb64b, qb64b); + + index = 3; + let code = IdrDex.Ed25519_Crt_Sig; + qb64 = + 'BDCZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ'; + qb64b = b(qb64); + + indexer = new Indexer({ raw: sig, code: code, index: index }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, code); + assert.equal(indexer.index, index); + assert.equal(indexer.ondex, undefined); + assert.equal(indexer.qb64, qb64); + assert.deepStrictEqual(indexer.qb64b, qb64b); + + indexer = new Indexer({ qb64: qb64 }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, code); + assert.equal(indexer.index, index); + assert.equal(indexer.ondex, undefined); + assert.equal(indexer.qb64, qb64); + assert.deepStrictEqual(indexer.qb64b, qb64b); assert.throws(() => { - new Indexer({raw: sig, code: code, index: index, ondex: index}) - }) + new Indexer({ raw: sig, code: code, index: index, ondex: index }); + }); // test negative index assert.throws(() => { - new Indexer({raw: sig, code: code, index: index, ondex: index+2}) - }) - - index = 68 - code = IdrDex.Ed25519_Big_Crt_Sig - qb64 = '2BBEAACZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ' - qb64b = b(qb64) - - indexer = new Indexer({raw: sig, code: code, index: index}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, code) - assert.equal(indexer.index, index) - assert.equal(indexer.ondex, undefined) - assert.equal(indexer.qb64, qb64) - assert.deepStrictEqual(indexer.qb64b, qb64b) - - indexer = new Indexer({qb64: qb64}) - assert.deepStrictEqual(indexer.raw, sig) - assert.equal(indexer.code, code) - assert.equal(indexer.index, index) - assert.equal(indexer.ondex, undefined) - assert.equal(indexer.qb64, qb64) - assert.deepStrictEqual(indexer.qb64b, qb64b) + new Indexer({ + raw: sig, + code: code, + index: index, + ondex: index + 2, + }); + }); + + index = 68; + code = IdrDex.Ed25519_Big_Crt_Sig; + qb64 = + '2BBEAACZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ'; + qb64b = b(qb64); + + indexer = new Indexer({ raw: sig, code: code, index: index }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, code); + assert.equal(indexer.index, index); + assert.equal(indexer.ondex, undefined); + assert.equal(indexer.qb64, qb64); + assert.deepStrictEqual(indexer.qb64b, qb64b); + + indexer = new Indexer({ qb64: qb64 }); + assert.deepStrictEqual(indexer.raw, sig); + assert.equal(indexer.code, code); + assert.equal(indexer.index, index); + assert.equal(indexer.ondex, undefined); + assert.equal(indexer.qb64, qb64); + assert.deepStrictEqual(indexer.qb64b, qb64b); assert.throws(() => { - new Indexer({raw: sig, code: code, index: index, ondex: index}) - }) + new Indexer({ raw: sig, code: code, index: index, ondex: index }); + }); // test negative index assert.throws(() => { - new Indexer({raw: sig, code: code, index: index, ondex: index+2}) - }) - - - }) -}) + new Indexer({ + raw: sig, + code: code, + index: index, + ondex: index + 2, + }); + }); + }); +}); diff --git a/test/core/manager.test.ts b/test/core/manager.test.ts index 0158aaa7..4879fce9 100644 --- a/test/core/manager.test.ts +++ b/test/core/manager.test.ts @@ -1,555 +1,694 @@ -import libsodium from "libsodium-wrappers-sumo"; -import {Algos, Creatory, Manager, RandyCreator, riKey, SaltyCreator} from "../../src/keri/core/manager"; -import {strict as assert} from "assert"; -import {MtrDex} from "../../src/keri/core/matter"; -import {Salter, Tier} from "../../src/keri/core/salter"; -import {Signer} from "../../src/keri/core/signer"; -import {Encrypter} from "../../src/keri/core/encrypter"; -import {Decrypter} from "../../src/keri/core/decrypter"; -import {Cipher} from "../../src/keri/core/cipher"; -import {Verfer} from "../../src/keri/core/verfer"; -import {Diger} from "../../src/keri/core/diger"; -import {Siger} from "../../src/keri/core/siger"; -import {b} from "../../src/keri/core/core"; -import {Cigar} from "../../src/keri/core/cigar"; - +import libsodium from 'libsodium-wrappers-sumo'; +import { + Algos, + Creatory, + Manager, + RandyCreator, + riKey, + SaltyCreator, +} from '../../src/keri/core/manager'; +import { strict as assert } from 'assert'; +import { MtrDex } from '../../src/keri/core/matter'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import { Signer } from '../../src/keri/core/signer'; +import { Encrypter } from '../../src/keri/core/encrypter'; +import { Decrypter } from '../../src/keri/core/decrypter'; +import { Cipher } from '../../src/keri/core/cipher'; +import { Verfer } from '../../src/keri/core/verfer'; +import { Diger } from '../../src/keri/core/diger'; +import { Siger } from '../../src/keri/core/siger'; +import { b } from '../../src/keri/core/core'; +import { Cigar } from '../../src/keri/core/cigar'; describe('RandyCreator', () => { it('should create sets of random signers', async () => { await libsodium.ready; - let randy = new RandyCreator() + let randy = new RandyCreator(); // test default arguments - let keys = randy.create() - assert.equal(keys.signers.length, 1) - assert.equal(keys.signers[0].qb64.length, 44) - assert.equal(keys.signers[0].code, MtrDex.Ed25519_Seed) - assert.equal(keys.signers[0].transferable, true) + let keys = randy.create(); + assert.equal(keys.signers.length, 1); + assert.equal(keys.signers[0].qb64.length, 44); + assert.equal(keys.signers[0].code, MtrDex.Ed25519_Seed); + assert.equal(keys.signers[0].transferable, true); // Create 5 with default code - keys = randy.create(undefined, 5) - assert.equal(keys.signers.length, 5) + keys = randy.create(undefined, 5); + assert.equal(keys.signers.length, 5); keys.signers.forEach((signer) => { - assert.equal(signer.qb64.length, 44) - assert.equal(signer.code, MtrDex.Ed25519_Seed) - assert.equal(signer.transferable, true) - }) + assert.equal(signer.qb64.length, 44); + assert.equal(signer.code, MtrDex.Ed25519_Seed); + assert.equal(signer.transferable, true); + }); // Create 3 with specified codes (the only one we support) - keys = randy.create([MtrDex.Ed25519_Seed, MtrDex.Ed25519_Seed, MtrDex.Ed25519_Seed]) - assert.equal(keys.signers.length, 3) + keys = randy.create([ + MtrDex.Ed25519_Seed, + MtrDex.Ed25519_Seed, + MtrDex.Ed25519_Seed, + ]); + assert.equal(keys.signers.length, 3); keys.signers.forEach((signer) => { - assert.equal(signer.qb64.length, 44) - assert.equal(signer.code, MtrDex.Ed25519_Seed) - assert.equal(signer.transferable, true) - }) - }) -}) - + assert.equal(signer.qb64.length, 44); + assert.equal(signer.code, MtrDex.Ed25519_Seed); + assert.equal(signer.transferable, true); + }); + }); +}); describe('SaltyCreator', () => { it('should create sets of salty signers', async () => { await libsodium.ready; // Test default arguments - let salty = new SaltyCreator() - assert.equal(salty.salter.code, MtrDex.Salt_128) - assert.equal(salty.salt, salty.salter.qb64) - assert.equal(salty.stem, "") - assert.equal(salty.tier, salty.salter.tier) - - let keys = salty.create() - assert.equal(keys.signers.length, 1) - assert.equal(keys.signers[0].qb64.length, 44) - assert.equal(keys.signers[0].code, MtrDex.Ed25519_Seed) - assert.equal(keys.signers[0].transferable, true) - - keys = salty.create(undefined, 2, MtrDex.Ed25519_Seed, false) - assert.equal(keys.signers.length, 2) + let salty = new SaltyCreator(); + assert.equal(salty.salter.code, MtrDex.Salt_128); + assert.equal(salty.salt, salty.salter.qb64); + assert.equal(salty.stem, ''); + assert.equal(salty.tier, salty.salter.tier); + + let keys = salty.create(); + assert.equal(keys.signers.length, 1); + assert.equal(keys.signers[0].qb64.length, 44); + assert.equal(keys.signers[0].code, MtrDex.Ed25519_Seed); + assert.equal(keys.signers[0].transferable, true); + + keys = salty.create(undefined, 2, MtrDex.Ed25519_Seed, false); + assert.equal(keys.signers.length, 2); keys.signers.forEach((signer) => { - assert.equal(signer.code, MtrDex.Ed25519_Seed) - assert.equal(signer.verfer.code, MtrDex.Ed25519N) - assert.equal(signer.qb64.length, 44) - }) - - let raw = "0123456789abcdef" - let salter = new Salter({raw: b(raw)}) - let salt = salter.qb64 - assert.equal(salter.qb64, "0AAwMTIzNDU2Nzg5YWJjZGVm") - salty = new SaltyCreator(salter.qb64) - assert.equal(salty.salter.code, MtrDex.Salt_128) - assert.deepStrictEqual(salty.salter.raw, b(raw)) - assert.equal(salty.salter.qb64, salt) - assert.equal(salty.salt, salty.salter.qb64) - assert.equal(salty.stem, "") - assert.equal(salty.tier, salty.salter.tier) - keys = salty.create() - assert.equal(keys.signers.length, 1) - assert.equal(keys.signers[0].code, MtrDex.Ed25519_Seed) - assert.equal(keys.signers[0].qb64, "AO0hmkIVsjCoJY1oUe3-QqHlMBVIhFX1tQfN_8SPKiNF") - assert.equal(keys.signers[0].verfer.code, MtrDex.Ed25519) - assert.equal(keys.signers[0].verfer.qb64, "DHHneREQ1eZyQNc5nEsQYx1FqFVL1OTXmvmatTE77Cfe") - - keys = salty.create(undefined, 1, MtrDex.Ed25519_Seed, false, 0, 0, 0, true) - assert.equal(keys.signers.length, 1) - assert.equal(keys.signers[0].code, MtrDex.Ed25519_Seed) - assert.equal(keys.signers[0].qb64, "AOVkNmL_dZ5pjvp-_nS5EJbs0xe32MODcOUOym-0aCBL") - assert.equal(keys.signers[0].verfer.code, MtrDex.Ed25519N) - assert.equal(keys.signers[0].verfer.qb64, "BB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI") - - }) -}) + assert.equal(signer.code, MtrDex.Ed25519_Seed); + assert.equal(signer.verfer.code, MtrDex.Ed25519N); + assert.equal(signer.qb64.length, 44); + }); + + let raw = '0123456789abcdef'; + let salter = new Salter({ raw: b(raw) }); + let salt = salter.qb64; + assert.equal(salter.qb64, '0AAwMTIzNDU2Nzg5YWJjZGVm'); + salty = new SaltyCreator(salter.qb64); + assert.equal(salty.salter.code, MtrDex.Salt_128); + assert.deepStrictEqual(salty.salter.raw, b(raw)); + assert.equal(salty.salter.qb64, salt); + assert.equal(salty.salt, salty.salter.qb64); + assert.equal(salty.stem, ''); + assert.equal(salty.tier, salty.salter.tier); + keys = salty.create(); + assert.equal(keys.signers.length, 1); + assert.equal(keys.signers[0].code, MtrDex.Ed25519_Seed); + assert.equal( + keys.signers[0].qb64, + 'AO0hmkIVsjCoJY1oUe3-QqHlMBVIhFX1tQfN_8SPKiNF' + ); + assert.equal(keys.signers[0].verfer.code, MtrDex.Ed25519); + assert.equal( + keys.signers[0].verfer.qb64, + 'DHHneREQ1eZyQNc5nEsQYx1FqFVL1OTXmvmatTE77Cfe' + ); + + keys = salty.create( + undefined, + 1, + MtrDex.Ed25519_Seed, + false, + 0, + 0, + 0, + true + ); + assert.equal(keys.signers.length, 1); + assert.equal(keys.signers[0].code, MtrDex.Ed25519_Seed); + assert.equal( + keys.signers[0].qb64, + 'AOVkNmL_dZ5pjvp-_nS5EJbs0xe32MODcOUOym-0aCBL' + ); + assert.equal(keys.signers[0].verfer.code, MtrDex.Ed25519N); + assert.equal( + keys.signers[0].verfer.qb64, + 'BB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI' + ); + }); +}); describe('Creator', () => { it('should create Randy or Salty creator', async () => { await libsodium.ready; - let raw = "0123456789abcdef" - let salter = new Salter({raw: b(raw)}) - let salt = salter.qb64 + let raw = '0123456789abcdef'; + let salter = new Salter({ raw: b(raw) }); + let salt = salter.qb64; - let creator = new Creatory(Algos.salty).make(salt) as SaltyCreator - assert.equal(creator instanceof SaltyCreator, true) - assert.equal(creator.salter.qb64, salt) + let creator = new Creatory(Algos.salty).make(salt) as SaltyCreator; + assert.equal(creator instanceof SaltyCreator, true); + assert.equal(creator.salter.qb64, salt); - creator = new Creatory().make(salt) as SaltyCreator - assert.equal(creator instanceof SaltyCreator, true) - assert.equal(creator.salter.qb64, salt) + creator = new Creatory().make(salt) as SaltyCreator; + assert.equal(creator instanceof SaltyCreator, true); + assert.equal(creator.salter.qb64, salt); - let rcreator = new Creatory(Algos.randy).make(salt) as RandyCreator - assert.equal(rcreator instanceof RandyCreator, true) - }) -}) + let rcreator = new Creatory(Algos.randy).make(salt) as RandyCreator; + assert.equal(rcreator instanceof RandyCreator, true); + }); +}); -const ser = '{"vs":"KERI10JSON0000fb_","pre":"EvEnZMhz52iTrJU8qKwtDxzmypyosgG' + +const ser = + '{"vs":"KERI10JSON0000fb_","pre":"EvEnZMhz52iTrJU8qKwtDxzmypyosgG' + '70m6LIjkiCdoI","sn":"0","ilk":"icp","sith":"1","keys":["DSuhyBcP' + 'ZEZLK-fcw5tzHn2N46wRCG_ZOoeKtWTOunRA"],"nxt":"EPYuj8mq_PYYsoBKkz' + 'X1kxSPGYBWaIya3slgCOyOtlqU","toad":"0","wits":[],"cnfg":[]}-AABA' + 'ApYcYd1cppVg7Inh2YCslWKhUwh59TrPpIoqWxN2A38NCbTljvmBPBjSGIFDBNOv' + - 'VjHpdZlty3Hgk6ilF8pVpAQ' - + 'VjHpdZlty3Hgk6ilF8pVpAQ'; describe('Manager', () => { it('should manage key pairs for identifiers', async () => { await libsodium.ready; - let raw = "0123456789abcdef" - let salter = new Salter({raw: b(raw)}) - let salt = salter.qb64 - assert.equal(salt, "0AAwMTIzNDU2Nzg5YWJjZGVm") - let stem = "red" - + let raw = '0123456789abcdef'; + let salter = new Salter({ raw: b(raw) }); + let salt = salter.qb64; + assert.equal(salt, '0AAwMTIzNDU2Nzg5YWJjZGVm'); + let stem = 'red'; // Create a randy Manager without encryption should raise an exception assert.throws(() => { - new Manager({algo: Algos.randy}) - }) + new Manager({ algo: Algos.randy }); + }); // cryptseed0 = b('h,#|\x8ap"\x12\xc43t2\xa6\xe1\x18\x19\xf0f2,y\xc4\xc21@\xf5@\x15.\xa2\x1a\xcf') - let cryptseed0 = new Uint8Array([104, 44, 35, 124, 138, 112, 34, 18, 196, 51, 116, 50, 166, 225, 24, 25, 240, 102, 50, 44, 121, 196, 194, 49, 64, 245, 64, 21, 46, 162, 26, 207]) - let cryptsigner0 = new Signer({raw: cryptseed0, code: MtrDex.Ed25519_Seed, transferable: false}) - let seed0 = cryptsigner0.qb64 - let seed0b = cryptsigner0.qb64b - let aeid0 = cryptsigner0.verfer.qb64 - assert.equal(aeid0, "BCa7mK96FwxkU0TdF54Yqg3qBDXUWpOhQ_Mtr7E77yZB") - let decrypter0 = new Decrypter({}, seed0b) - let encrypter0 = new Encrypter({}, b(aeid0)) - assert.equal(encrypter0.verifySeed(seed0b), true) + let cryptseed0 = new Uint8Array([ + 104, 44, 35, 124, 138, 112, 34, 18, 196, 51, 116, 50, 166, 225, 24, + 25, 240, 102, 50, 44, 121, 196, 194, 49, 64, 245, 64, 21, 46, 162, + 26, 207, + ]); + let cryptsigner0 = new Signer({ + raw: cryptseed0, + code: MtrDex.Ed25519_Seed, + transferable: false, + }); + let seed0 = cryptsigner0.qb64; + let seed0b = cryptsigner0.qb64b; + let aeid0 = cryptsigner0.verfer.qb64; + assert.equal(aeid0, 'BCa7mK96FwxkU0TdF54Yqg3qBDXUWpOhQ_Mtr7E77yZB'); + let decrypter0 = new Decrypter({}, seed0b); + let encrypter0 = new Encrypter({}, b(aeid0)); + assert.equal(encrypter0.verifySeed(seed0b), true); // cryptseed1 = (b"\x89\xfe{\xd9'\xa7\xb3\x89#\x19\xbec\xee\xed\xc0\xf9\x97\xd0\x8f9\x1dyNI" // b'I\x98\xbd\xa4\xf6\xfe\xbb\x03') - let cryptseed1 = new Uint8Array([137, 254, 123, 217, 39, 167, 179, 137, 35, 25, 190, 99, 238, 237, 192, 249, 151, 208, 143, 57, 29, 121, 78, 73, 73, 152, 189, 164, 246, 254, 187, 3]) - let cryptsigner1 = new Signer({raw: cryptseed1, code: MtrDex.Ed25519_Seed, transferable: false}) - let seed1 = cryptsigner1.qb64b - let aeid1 = cryptsigner1.verfer.qb64 - assert.equal(aeid1, "BEcOrMrG_7r_NWaLl6h8UJapwIfQWIkjrIPXkCZm2fFM") + let cryptseed1 = new Uint8Array([ + 137, 254, 123, 217, 39, 167, 179, 137, 35, 25, 190, 99, 238, 237, + 192, 249, 151, 208, 143, 57, 29, 121, 78, 73, 73, 152, 189, 164, + 246, 254, 187, 3, + ]); + let cryptsigner1 = new Signer({ + raw: cryptseed1, + code: MtrDex.Ed25519_Seed, + transferable: false, + }); + let seed1 = cryptsigner1.qb64b; + let aeid1 = cryptsigner1.verfer.qb64; + assert.equal(aeid1, 'BEcOrMrG_7r_NWaLl6h8UJapwIfQWIkjrIPXkCZm2fFM'); // let decrypter1 = new Decrypter({}, seed1) - let encrypter1 = new Encrypter({}, b(aeid1)) - assert.equal(encrypter1.verifySeed(seed1), true) - - let manager = new Manager({seed: seed0, salter: salter, aeid: aeid0}) - assert.equal(manager.encrypter!.qb64, encrypter0.qb64) - assert.equal(manager.decrypter!.qb64, decrypter0.qb64) - assert.equal(manager.seed, seed0) - assert.equal(manager.aeid, aeid0) - - assert.equal(manager.algo, Algos.salty) - assert.equal(manager.salt, salt) - assert.equal(manager.pidx, 0) - assert.equal(manager.tier, Tier.low) - let saltCipher0 = new Cipher({qb64: manager.ks.getGbls("salt")}) - assert.equal(saltCipher0.decrypt(undefined, seed0b).qb64, salt) - - let [verfers, digers] = manager.incept({salt: salt, temp: true}) - assert.equal(verfers.length, 1) - assert.equal(digers.length, 1) - assert.equal(manager.pidx, 1) - - let spre = verfers[0].qb64 - assert.equal(spre, "DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI") - - let pp = manager.ks.getPrms(spre)! - assert.equal(pp.pidx, 0) - assert.equal(pp.algo, Algos.salty) - assert.equal(manager.decrypter!.decrypt(b(pp.salt)).qb64, salt) - assert.equal(pp.stem, "") - assert.equal(pp.tier, Tier.low) - - let ps = manager.ks.getSits(spre)! - assert.deepStrictEqual(ps.old.pubs, []) - assert.equal(ps.new.pubs.length, 1) - assert.deepStrictEqual(ps.new.pubs, ['DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI']) - assert.equal(ps.new.ridx, 0) - assert.equal(ps.new.kidx, 0) - assert.equal(ps.nxt.pubs.length, 1) - assert.deepStrictEqual(ps.nxt.pubs, ['DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI']) - assert.equal(ps.nxt.ridx, 1) - assert.equal(ps.nxt.kidx, 1) - - let keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64) - assert.deepStrictEqual(keys, ps.new.pubs) - - let pl = manager.ks.getPubs(riKey(spre, ps.new.ridx))! - assert.deepStrictEqual(pl.pubs, ps.new.pubs) - pl = manager.ks.getPubs(riKey(spre, ps.nxt.ridx))! - assert.deepStrictEqual(pl.pubs, ps.nxt.pubs) - - let digs = Array.from(digers, (diger: Diger) => diger.qb64) - assert.deepStrictEqual(digs, ['ENmcKrctbztF36MttN7seUYJqH2IMnkavBgGLR6Mj2-B']) - - let oldspre = spre - spre = "DCu5o5cxzv1lgMqxMVG3IcCNK4lpFfpMM-9rfkY3XVUc" - manager.move(oldspre, spre) - - pl = manager.ks.getPubs(riKey(spre, ps.new.ridx))! - assert.deepStrictEqual(pl.pubs, ps.new.pubs) - pl = manager.ks.getPubs(riKey(spre, ps.nxt.ridx))! - assert.deepStrictEqual(pl.pubs, ps.nxt.pubs) - - let serb = b(ser) - let psigers = manager.sign({ser: serb, pubs: ps.new.pubs}) - assert.equal(psigers.length, 1) - assert.equal(psigers[0] instanceof Siger, true) - let vsigers = manager.sign({ser: serb, verfers: verfers}) - let psigs = Array.from(psigers as Array, (psiger) => psiger.qb64) - let vsigs = Array.from(vsigers as Array, (vsiger) => vsiger.qb64) - assert.deepStrictEqual(psigs, vsigs) - assert.equal(psigs[0], 'AACRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI') + let encrypter1 = new Encrypter({}, b(aeid1)); + assert.equal(encrypter1.verifySeed(seed1), true); + + let manager = new Manager({ seed: seed0, salter: salter, aeid: aeid0 }); + assert.equal(manager.encrypter!.qb64, encrypter0.qb64); + assert.equal(manager.decrypter!.qb64, decrypter0.qb64); + assert.equal(manager.seed, seed0); + assert.equal(manager.aeid, aeid0); + + assert.equal(manager.algo, Algos.salty); + assert.equal(manager.salt, salt); + assert.equal(manager.pidx, 0); + assert.equal(manager.tier, Tier.low); + let saltCipher0 = new Cipher({ qb64: manager.ks.getGbls('salt') }); + assert.equal(saltCipher0.decrypt(undefined, seed0b).qb64, salt); + + let [verfers, digers] = manager.incept({ salt: salt, temp: true }); + assert.equal(verfers.length, 1); + assert.equal(digers.length, 1); + assert.equal(manager.pidx, 1); + + let spre = verfers[0].qb64; + assert.equal(spre, 'DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI'); + + let pp = manager.ks.getPrms(spre)!; + assert.equal(pp.pidx, 0); + assert.equal(pp.algo, Algos.salty); + assert.equal(manager.decrypter!.decrypt(b(pp.salt)).qb64, salt); + assert.equal(pp.stem, ''); + assert.equal(pp.tier, Tier.low); + + let ps = manager.ks.getSits(spre)!; + assert.deepStrictEqual(ps.old.pubs, []); + assert.equal(ps.new.pubs.length, 1); + assert.deepStrictEqual(ps.new.pubs, [ + 'DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI', + ]); + assert.equal(ps.new.ridx, 0); + assert.equal(ps.new.kidx, 0); + assert.equal(ps.nxt.pubs.length, 1); + assert.deepStrictEqual(ps.nxt.pubs, [ + 'DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI', + ]); + assert.equal(ps.nxt.ridx, 1); + assert.equal(ps.nxt.kidx, 1); + + let keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64); + assert.deepStrictEqual(keys, ps.new.pubs); + + let pl = manager.ks.getPubs(riKey(spre, ps.new.ridx))!; + assert.deepStrictEqual(pl.pubs, ps.new.pubs); + pl = manager.ks.getPubs(riKey(spre, ps.nxt.ridx))!; + assert.deepStrictEqual(pl.pubs, ps.nxt.pubs); + + let digs = Array.from(digers, (diger: Diger) => diger.qb64); + assert.deepStrictEqual(digs, [ + 'ENmcKrctbztF36MttN7seUYJqH2IMnkavBgGLR6Mj2-B', + ]); + + let oldspre = spre; + spre = 'DCu5o5cxzv1lgMqxMVG3IcCNK4lpFfpMM-9rfkY3XVUc'; + manager.move(oldspre, spre); + + pl = manager.ks.getPubs(riKey(spre, ps.new.ridx))!; + assert.deepStrictEqual(pl.pubs, ps.new.pubs); + pl = manager.ks.getPubs(riKey(spre, ps.nxt.ridx))!; + assert.deepStrictEqual(pl.pubs, ps.nxt.pubs); + + let serb = b(ser); + let psigers = manager.sign({ ser: serb, pubs: ps.new.pubs }); + assert.equal(psigers.length, 1); + assert.equal(psigers[0] instanceof Siger, true); + let vsigers = manager.sign({ ser: serb, verfers: verfers }); + let psigs = Array.from( + psigers as Array, + (psiger) => psiger.qb64 + ); + let vsigs = Array.from( + vsigers as Array, + (vsiger) => vsiger.qb64 + ); + assert.deepStrictEqual(psigs, vsigs); + assert.equal( + psigs[0], + 'AACRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI' + ); // Test sign with indices - let indices = [3] - psigers = manager.sign({ser: serb, pubs: ps.new.pubs, indices: indices}) as Array - assert.equal(psigers.length, 1) - assert.equal(psigers[0] instanceof Siger, true) - assert.equal(psigers[0].index, indices[0]) - psigs = Array.from(psigers as Array, (psiger) => psiger.qb64) - assert.equal(psigs[0], 'ADCRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI') - - vsigers = manager.sign({ser: serb, verfers: verfers, indices: indices}) as Array - assert.equal(vsigers.length, 1) - assert.equal(vsigers[0] instanceof Siger, true) - assert.equal(vsigers[0].index, indices[0]) - vsigs = Array.from(vsigers as Array, (vsiger) => vsiger.qb64) - assert.deepStrictEqual(psigs, vsigs) - - let pcigars = manager.sign({ser: serb, pubs: ps.new.pubs, indexed: false}) - assert.equal(pcigars.length, 1) - assert.equal(pcigars[0] instanceof Cigar, true) - let vcigars = manager.sign({ser: serb, verfers: verfers, indexed: false}) - assert.equal(vcigars.length, 1) - let pcigs = Array.from(pcigars as Array, (psiger) => psiger.qb64) - let vcigs = Array.from(vcigars as Array, (vsiger) => vsiger.qb64) - assert.deepStrictEqual(vcigs, pcigs) - assert.equal(pcigs[0], '0BCRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI') - - let oldpubs = Array.from(verfers, (verfer) => verfer.qb64) - let hashes = manager.rotate({pre: spre}) - verfers = hashes[0] - digers = hashes[1] - - assert.equal(verfers.length, 1) - assert.equal(digers.length, 1) - pp = manager.ks.getPrms(spre)! - assert.equal(pp.pidx, 0) - assert.equal(pp.algo, Algos.salty) - assert.equal(manager.decrypter!.decrypt(b(pp.salt)).qb64, salt) - assert.equal(pp.stem, '') - assert.equal(pp.tier, Tier.low) - - ps = manager.ks.getSits(spre)! - assert.deepStrictEqual(ps.old.pubs, ['DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI']) - assert.equal(ps.new.pubs.length, 1) - assert.deepStrictEqual(ps.new.pubs, ['DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI']) - assert.equal(ps.new.ridx, 1) - assert.equal(ps.new.kidx, 1) - assert.equal(ps.nxt.pubs.length, 1) - assert.deepStrictEqual(ps.nxt.pubs, ['DHHneREQ1eZyQNc5nEsQYx1FqFVL1OTXmvmatTE77Cfe']) - assert.equal(ps.nxt.ridx, 2) - assert.equal(ps.nxt.kidx, 2) - - keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64) - assert.deepStrictEqual(keys, ps.new.pubs) - - digs = Array.from(digers, (diger: Diger) => diger.qb64) - assert.deepStrictEqual(digs, ['ECl1Env_5PQHqVMpHgoqg9H9mT7ENtk0Q499cmMT6Fvz']) - - assert.deepStrictEqual(oldpubs, ps.old.pubs) - - oldpubs = Array.from(verfers, (verfer: Verfer) => verfer.qb64) - let deadpubs = ps.old.pubs - - manager.rotate({pre: spre}) - - pp = manager.ks.getPrms(spre)! - assert.equal(pp.pidx, 0) - - ps = manager.ks.getSits(spre)! - assert.deepStrictEqual(oldpubs, ps.old.pubs) + let indices = [3]; + psigers = manager.sign({ + ser: serb, + pubs: ps.new.pubs, + indices: indices, + }) as Array; + assert.equal(psigers.length, 1); + assert.equal(psigers[0] instanceof Siger, true); + assert.equal(psigers[0].index, indices[0]); + psigs = Array.from(psigers as Array, (psiger) => psiger.qb64); + assert.equal( + psigs[0], + 'ADCRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI' + ); + + vsigers = manager.sign({ + ser: serb, + verfers: verfers, + indices: indices, + }) as Array; + assert.equal(vsigers.length, 1); + assert.equal(vsigers[0] instanceof Siger, true); + assert.equal(vsigers[0].index, indices[0]); + vsigs = Array.from(vsigers as Array, (vsiger) => vsiger.qb64); + assert.deepStrictEqual(psigs, vsigs); + + let pcigars = manager.sign({ + ser: serb, + pubs: ps.new.pubs, + indexed: false, + }); + assert.equal(pcigars.length, 1); + assert.equal(pcigars[0] instanceof Cigar, true); + let vcigars = manager.sign({ + ser: serb, + verfers: verfers, + indexed: false, + }); + assert.equal(vcigars.length, 1); + let pcigs = Array.from( + pcigars as Array, + (psiger) => psiger.qb64 + ); + let vcigs = Array.from( + vcigars as Array, + (vsiger) => vsiger.qb64 + ); + assert.deepStrictEqual(vcigs, pcigs); + assert.equal( + pcigs[0], + '0BCRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI' + ); + + let oldpubs = Array.from(verfers, (verfer) => verfer.qb64); + let hashes = manager.rotate({ pre: spre }); + verfers = hashes[0]; + digers = hashes[1]; + + assert.equal(verfers.length, 1); + assert.equal(digers.length, 1); + pp = manager.ks.getPrms(spre)!; + assert.equal(pp.pidx, 0); + assert.equal(pp.algo, Algos.salty); + assert.equal(manager.decrypter!.decrypt(b(pp.salt)).qb64, salt); + assert.equal(pp.stem, ''); + assert.equal(pp.tier, Tier.low); + + ps = manager.ks.getSits(spre)!; + assert.deepStrictEqual(ps.old.pubs, [ + 'DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI', + ]); + assert.equal(ps.new.pubs.length, 1); + assert.deepStrictEqual(ps.new.pubs, [ + 'DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI', + ]); + assert.equal(ps.new.ridx, 1); + assert.equal(ps.new.kidx, 1); + assert.equal(ps.nxt.pubs.length, 1); + assert.deepStrictEqual(ps.nxt.pubs, [ + 'DHHneREQ1eZyQNc5nEsQYx1FqFVL1OTXmvmatTE77Cfe', + ]); + assert.equal(ps.nxt.ridx, 2); + assert.equal(ps.nxt.kidx, 2); + + keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64); + assert.deepStrictEqual(keys, ps.new.pubs); + + digs = Array.from(digers, (diger: Diger) => diger.qb64); + assert.deepStrictEqual(digs, [ + 'ECl1Env_5PQHqVMpHgoqg9H9mT7ENtk0Q499cmMT6Fvz', + ]); + + assert.deepStrictEqual(oldpubs, ps.old.pubs); + + oldpubs = Array.from(verfers, (verfer: Verfer) => verfer.qb64); + let deadpubs = ps.old.pubs; + + manager.rotate({ pre: spre }); + + pp = manager.ks.getPrms(spre)!; + assert.equal(pp.pidx, 0); + + ps = manager.ks.getSits(spre)!; + assert.deepStrictEqual(oldpubs, ps.old.pubs); deadpubs.forEach((pub: string) => { - assert.equal(manager.ks.getPris(pub, decrypter0), undefined) - }) + assert.equal(manager.ks.getPris(pub, decrypter0), undefined); + }); - pl = manager.ks.getPubs(riKey(spre, ps.new.ridx))! - assert.deepStrictEqual(pl.pubs, ps.new.pubs) + pl = manager.ks.getPubs(riKey(spre, ps.new.ridx))!; + assert.deepStrictEqual(pl.pubs, ps.new.pubs); - pl = manager.ks.getPubs(riKey(spre, ps.nxt.ridx))! - assert.deepStrictEqual(pl.pubs, ps.nxt.pubs) + pl = manager.ks.getPubs(riKey(spre, ps.nxt.ridx))!; + assert.deepStrictEqual(pl.pubs, ps.nxt.pubs); - hashes = manager.rotate({pre: spre, ncount: 0}) - digers = hashes[1] - pp = manager.ks.getPrms(spre)! - assert.equal(pp.pidx, 0) + hashes = manager.rotate({ pre: spre, ncount: 0 }); + digers = hashes[1]; + pp = manager.ks.getPrms(spre)!; + assert.equal(pp.pidx, 0); - ps = manager.ks.getSits(spre)! - assert.equal(ps.nxt.pubs.length, 0) - assert.equal(digers.length, 0) + ps = manager.ks.getSits(spre)!; + assert.equal(ps.nxt.pubs.length, 0); + assert.equal(digers.length, 0); assert.throws(() => { - manager.rotate({pre: spre}) - }) + manager.rotate({ pre: spre }); + }); // randy algo support - hashes = manager.incept({algo: Algos.randy}) - verfers = hashes[0] - digers = hashes[1] - - assert.equal(verfers.length, 1) - assert.equal(digers.length, 1) - assert.equal(manager.pidx, 2) - let rpre = verfers[0].qb64 - - pp = manager.ks.getPrms(rpre)! - assert.equal(pp.pidx, 1) - assert.equal(pp.algo, Algos.randy) - assert.equal(pp.salt, '') - assert.equal(pp.stem, '') - assert.equal(pp.tier, '') - - ps = manager.ks.getSits(rpre)! - assert.deepStrictEqual(ps.old.pubs, []) - assert.equal(ps.new.pubs.length, 1) - assert.deepStrictEqual(ps.new.pubs.length, 1) - assert.equal(ps.new.ridx, 0) - assert.equal(ps.new.kidx, 0) - assert.equal(ps.nxt.pubs.length, 1) - assert.equal(ps.nxt.ridx, 1) - assert.equal(ps.nxt.kidx, 1) - - keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64) + hashes = manager.incept({ algo: Algos.randy }); + verfers = hashes[0]; + digers = hashes[1]; + + assert.equal(verfers.length, 1); + assert.equal(digers.length, 1); + assert.equal(manager.pidx, 2); + let rpre = verfers[0].qb64; + + pp = manager.ks.getPrms(rpre)!; + assert.equal(pp.pidx, 1); + assert.equal(pp.algo, Algos.randy); + assert.equal(pp.salt, ''); + assert.equal(pp.stem, ''); + assert.equal(pp.tier, ''); + + ps = manager.ks.getSits(rpre)!; + assert.deepStrictEqual(ps.old.pubs, []); + assert.equal(ps.new.pubs.length, 1); + assert.deepStrictEqual(ps.new.pubs.length, 1); + assert.equal(ps.new.ridx, 0); + assert.equal(ps.new.kidx, 0); + assert.equal(ps.nxt.pubs.length, 1); + assert.equal(ps.nxt.ridx, 1); + assert.equal(ps.nxt.kidx, 1); + + keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64); keys.forEach((key) => { - assert.notEqual(manager.ks.getPris(key, decrypter0), undefined) - }) + assert.notEqual(manager.ks.getPris(key, decrypter0), undefined); + }); - let oldrpre = rpre - rpre = 'DMqxMVG3IcCNK4lpFfCu5o5cxzv1lgpMM-9rfkY3XVUc' - manager.move(oldrpre, rpre) + let oldrpre = rpre; + rpre = 'DMqxMVG3IcCNK4lpFfCu5o5cxzv1lgpMM-9rfkY3XVUc'; + manager.move(oldrpre, rpre); - oldpubs = Array.from(verfers, (verfer: Verfer) => verfer.qb64) - manager.rotate({pre: rpre}) + oldpubs = Array.from(verfers, (verfer: Verfer) => verfer.qb64); + manager.rotate({ pre: rpre }); - pp = manager.ks.getPrms(rpre)! - assert.equal(pp.pidx, 1) - ps = manager.ks.getSits(rpre)! - assert.deepStrictEqual(oldpubs, ps.old.pubs) + pp = manager.ks.getPrms(rpre)!; + assert.equal(pp.pidx, 1); + ps = manager.ks.getSits(rpre)!; + assert.deepStrictEqual(oldpubs, ps.old.pubs); // randy algo incept with null nxt - hashes = manager.incept({algo: Algos.randy, ncount: 0}) - verfers = hashes[0] - digers = hashes[1] + hashes = manager.incept({ algo: Algos.randy, ncount: 0 }); + verfers = hashes[0]; + digers = hashes[1]; - assert.equal(manager.pidx, 3) - rpre = verfers[0].qb64 + assert.equal(manager.pidx, 3); + rpre = verfers[0].qb64; - pp = manager.ks.getPrms(rpre)! - assert.equal(pp.pidx, 2) + pp = manager.ks.getPrms(rpre)!; + assert.equal(pp.pidx, 2); - ps = manager.ks.getSits(rpre)! - assert.deepStrictEqual(ps.nxt.pubs, []) - assert.deepStrictEqual(digers, []) + ps = manager.ks.getSits(rpre)!; + assert.deepStrictEqual(ps.nxt.pubs, []); + assert.deepStrictEqual(digers, []); // attempt to rotate after null assert.throws(() => { - manager.rotate({pre: rpre}) - }) + manager.rotate({ pre: rpre }); + }); // salty algorithm incept with stem - hashes = manager.incept({salt: salt, stem: stem, temp: true}) - verfers = hashes[0] - digers = hashes[1] - - assert.equal(verfers.length, 1) - assert.equal(digers.length, 1) - assert.equal(manager.pidx, 4) - - spre = verfers[0].qb64 - assert.equal(spre, "DOtu4gX3oc4feusD8wWIykLhjkpiJHXEe29eJ2b_1CyM") - - pp = manager.ks.getPrms(spre)! - assert.equal(pp.pidx, 3) - assert.equal(pp.algo, Algos.salty) - assert.equal(manager.decrypter!.decrypt(b(pp.salt)).qb64, salt) - assert.equal(pp.stem, 'red') - assert.equal(pp.tier, Tier.low) - - ps = manager.ks.getSits(spre)! - assert.deepStrictEqual(ps.old.pubs, []) - assert.equal(ps.new.pubs.length, 1) - assert.deepStrictEqual(ps.new.pubs, ['DOtu4gX3oc4feusD8wWIykLhjkpiJHXEe29eJ2b_1CyM']) - assert.equal(ps.new.ridx, 0) - assert.equal(ps.new.kidx, 0) - assert.equal(ps.nxt.pubs.length, 1) - assert.deepStrictEqual(ps.nxt.pubs, ['DBzZ6vejSNAZpXv1SDRnIF_P1UqcW5d2pu2U-v-uhXvE']) - assert.equal(ps.nxt.ridx, 1) - assert.equal(ps.nxt.kidx, 1) - - keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64) - assert.deepStrictEqual(keys, ps.new.pubs) - - digs = Array.from(digers, (diger: Diger) => diger.qb64) - assert.deepStrictEqual(digs, ['EIGjhyyBRcqCkPE9bmkph7morew0wW0ak-rQ-dHCH-M2']) - - hashes = manager.incept({ncount: 0, salt: salt, stem: 'wit0', transferable: false, temp: true}) - verfers = hashes[0] - digers = hashes[1] - - let witpre0 = verfers[0].qb64 - assert.equal(verfers[0].qb64, 'BOTNI4RzN706NecNdqTlGEcMSTWiFUvesEqmxWR_op8n') - assert.equal(verfers[0].code, MtrDex.Ed25519N) - assert.notEqual(digers, undefined) - - hashes = manager.incept({ncount: 0, salt: salt, stem: 'wit1', transferable: false, temp: true}) - verfers = hashes[0] - digers = hashes[1] - - let witpre1 = verfers[0].qb64 - assert.equal(verfers[0].qb64, 'BAB_5xNXH4hoxDCtAHPFPDedZ6YwTo8mbdw_v0AOHOMt') - assert.equal(verfers[0].code, MtrDex.Ed25519N) - assert.notEqual(digers, undefined) - - assert.notEqual(witpre0, witpre1) - }) + hashes = manager.incept({ salt: salt, stem: stem, temp: true }); + verfers = hashes[0]; + digers = hashes[1]; + + assert.equal(verfers.length, 1); + assert.equal(digers.length, 1); + assert.equal(manager.pidx, 4); + + spre = verfers[0].qb64; + assert.equal(spre, 'DOtu4gX3oc4feusD8wWIykLhjkpiJHXEe29eJ2b_1CyM'); + + pp = manager.ks.getPrms(spre)!; + assert.equal(pp.pidx, 3); + assert.equal(pp.algo, Algos.salty); + assert.equal(manager.decrypter!.decrypt(b(pp.salt)).qb64, salt); + assert.equal(pp.stem, 'red'); + assert.equal(pp.tier, Tier.low); + + ps = manager.ks.getSits(spre)!; + assert.deepStrictEqual(ps.old.pubs, []); + assert.equal(ps.new.pubs.length, 1); + assert.deepStrictEqual(ps.new.pubs, [ + 'DOtu4gX3oc4feusD8wWIykLhjkpiJHXEe29eJ2b_1CyM', + ]); + assert.equal(ps.new.ridx, 0); + assert.equal(ps.new.kidx, 0); + assert.equal(ps.nxt.pubs.length, 1); + assert.deepStrictEqual(ps.nxt.pubs, [ + 'DBzZ6vejSNAZpXv1SDRnIF_P1UqcW5d2pu2U-v-uhXvE', + ]); + assert.equal(ps.nxt.ridx, 1); + assert.equal(ps.nxt.kidx, 1); + + keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64); + assert.deepStrictEqual(keys, ps.new.pubs); + + digs = Array.from(digers, (diger: Diger) => diger.qb64); + assert.deepStrictEqual(digs, [ + 'EIGjhyyBRcqCkPE9bmkph7morew0wW0ak-rQ-dHCH-M2', + ]); + + hashes = manager.incept({ + ncount: 0, + salt: salt, + stem: 'wit0', + transferable: false, + temp: true, + }); + verfers = hashes[0]; + digers = hashes[1]; + + let witpre0 = verfers[0].qb64; + assert.equal( + verfers[0].qb64, + 'BOTNI4RzN706NecNdqTlGEcMSTWiFUvesEqmxWR_op8n' + ); + assert.equal(verfers[0].code, MtrDex.Ed25519N); + assert.notEqual(digers, undefined); + + hashes = manager.incept({ + ncount: 0, + salt: salt, + stem: 'wit1', + transferable: false, + temp: true, + }); + verfers = hashes[0]; + digers = hashes[1]; + + let witpre1 = verfers[0].qb64; + assert.equal( + verfers[0].qb64, + 'BAB_5xNXH4hoxDCtAHPFPDedZ6YwTo8mbdw_v0AOHOMt' + ); + assert.equal(verfers[0].code, MtrDex.Ed25519N); + assert.notEqual(digers, undefined); + + assert.notEqual(witpre0, witpre1); + }); it('should support only Salty/Encrypted, Salty/Unencrypted and Randy/Encrypted', async () => { await libsodium.ready; // Support Salty/Unencrypted - pass only stretched passcode as Salt. - let passcode = "0123456789abcdefghijk" - let salter = new Salter({raw: b(passcode)}) - let salt = salter.qb64 - - let manager = new Manager({salter: salter}) - assert.equal(manager.encrypter, undefined) - - let [verfers, digers] = manager.incept({salt: salt, temp: true}) - assert.equal(verfers.length, 1) - assert.equal(digers.length, 1) - assert.equal(manager.pidx, 1) - - let spre = verfers[0].qb64 - assert.equal(spre, "DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI") - let ps = manager.ks.getSits(spre)! - - let keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64) - assert.deepStrictEqual(keys, ps.new.pubs) - - let pl = manager.ks.getPubs(riKey(spre, ps.new.ridx))! - assert.deepStrictEqual(pl.pubs, ps.new.pubs) - pl = manager.ks.getPubs(riKey(spre, ps.nxt.ridx))! - assert.deepStrictEqual(pl.pubs, ps.nxt.pubs) - - let ppt = manager.ks.getPths(ps.new.pubs[0]) - assert.equal(ppt!.path, "0") - assert.equal(ppt!.code, "A") - assert.equal(ppt!.tier, "low") - assert.equal(ppt!.temp, true) - - let digs = Array.from(digers, (diger: Diger) => diger.qb64) - assert.deepStrictEqual(digs, ['ENmcKrctbztF36MttN7seUYJqH2IMnkavBgGLR6Mj2-B']) - - let serb = b(ser) - let psigers = manager.sign({ser: serb, pubs: ps.new.pubs}) - assert.equal(psigers.length, 1) - assert.equal(psigers[0] instanceof Siger, true) - let vsigers = manager.sign({ser: serb, verfers: verfers}) - let psigs = Array.from(psigers as Array, (psiger) => psiger.qb64) - let vsigs = Array.from(vsigers as Array, (vsiger) => vsiger.qb64) - assert.deepStrictEqual(psigs, vsigs) - assert.equal(psigs[0], 'AACRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI') - - let oldspre = spre - spre = "DCu5o5cxzv1lgMqxMVG3IcCNK4lpFfpMM-9rfkY3XVUc" - manager.move(oldspre, spre) - - - let oldpubs = Array.from(verfers, (verfer) => verfer.qb64) - let hashes = manager.rotate({pre: spre}) - verfers = hashes[0] - digers = hashes[1] - - assert.equal(verfers.length, 1) - assert.equal(digers.length, 1) - let pp = manager.ks.getPrms(spre)! - assert.equal(pp.pidx, 0) - assert.equal(pp.algo, Algos.salty) - assert.equal(pp.salt, '') - assert.equal(pp.stem, '') - assert.equal(pp.tier, Tier.low) - - ps = manager.ks.getSits(spre)! - assert.deepStrictEqual(ps.old.pubs, ['DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI']) - assert.equal(ps.new.pubs.length, 1) - assert.deepStrictEqual(ps.new.pubs, ['DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI']) - assert.equal(ps.new.ridx, 1) - assert.equal(ps.new.kidx, 1) - assert.equal(ps.nxt.pubs.length, 1) - assert.deepStrictEqual(ps.nxt.pubs, ['DHHneREQ1eZyQNc5nEsQYx1FqFVL1OTXmvmatTE77Cfe']) - assert.equal(ps.nxt.ridx, 2) - assert.equal(ps.nxt.kidx, 2) - - keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64) - assert.deepStrictEqual(keys, ps.new.pubs) - - digs = Array.from(digers, (diger: Diger) => diger.qb64) - assert.deepStrictEqual(digs, ['ECl1Env_5PQHqVMpHgoqg9H9mT7ENtk0Q499cmMT6Fvz']) - - assert.deepStrictEqual(oldpubs, ps.old.pubs) - - ppt = manager.ks.getPths(ps.new.pubs[0]) - assert.equal(ppt!.path, "0") - assert.equal(ppt!.code, "A") - assert.equal(ppt!.tier, "low") - assert.equal(ppt!.temp, true) - - psigers = manager.sign({ser: serb, pubs: ps.new.pubs}) - assert.equal(psigers.length, 1) - assert.equal(psigers[0] instanceof Siger, true) - vsigers = manager.sign({ser: serb, verfers: verfers}) - psigs = Array.from(psigers as Array, (psiger) => psiger.qb64) - vsigs = Array.from(vsigers as Array, (vsiger) => vsiger.qb64) - assert.deepStrictEqual(psigs, vsigs) - assert.equal(psigs[0], 'AACRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI') - - }) -}) + let passcode = '0123456789abcdefghijk'; + let salter = new Salter({ raw: b(passcode) }); + let salt = salter.qb64; + + let manager = new Manager({ salter: salter }); + assert.equal(manager.encrypter, undefined); + + let [verfers, digers] = manager.incept({ salt: salt, temp: true }); + assert.equal(verfers.length, 1); + assert.equal(digers.length, 1); + assert.equal(manager.pidx, 1); + + let spre = verfers[0].qb64; + assert.equal(spre, 'DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI'); + let ps = manager.ks.getSits(spre)!; + + let keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64); + assert.deepStrictEqual(keys, ps.new.pubs); + + let pl = manager.ks.getPubs(riKey(spre, ps.new.ridx))!; + assert.deepStrictEqual(pl.pubs, ps.new.pubs); + pl = manager.ks.getPubs(riKey(spre, ps.nxt.ridx))!; + assert.deepStrictEqual(pl.pubs, ps.nxt.pubs); + + let ppt = manager.ks.getPths(ps.new.pubs[0]); + assert.equal(ppt!.path, '0'); + assert.equal(ppt!.code, 'A'); + assert.equal(ppt!.tier, 'low'); + assert.equal(ppt!.temp, true); + + let digs = Array.from(digers, (diger: Diger) => diger.qb64); + assert.deepStrictEqual(digs, [ + 'ENmcKrctbztF36MttN7seUYJqH2IMnkavBgGLR6Mj2-B', + ]); + + let serb = b(ser); + let psigers = manager.sign({ ser: serb, pubs: ps.new.pubs }); + assert.equal(psigers.length, 1); + assert.equal(psigers[0] instanceof Siger, true); + let vsigers = manager.sign({ ser: serb, verfers: verfers }); + let psigs = Array.from( + psigers as Array, + (psiger) => psiger.qb64 + ); + let vsigs = Array.from( + vsigers as Array, + (vsiger) => vsiger.qb64 + ); + assert.deepStrictEqual(psigs, vsigs); + assert.equal( + psigs[0], + 'AACRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI' + ); + + let oldspre = spre; + spre = 'DCu5o5cxzv1lgMqxMVG3IcCNK4lpFfpMM-9rfkY3XVUc'; + manager.move(oldspre, spre); + + let oldpubs = Array.from(verfers, (verfer) => verfer.qb64); + let hashes = manager.rotate({ pre: spre }); + verfers = hashes[0]; + digers = hashes[1]; + + assert.equal(verfers.length, 1); + assert.equal(digers.length, 1); + let pp = manager.ks.getPrms(spre)!; + assert.equal(pp.pidx, 0); + assert.equal(pp.algo, Algos.salty); + assert.equal(pp.salt, ''); + assert.equal(pp.stem, ''); + assert.equal(pp.tier, Tier.low); + + ps = manager.ks.getSits(spre)!; + assert.deepStrictEqual(ps.old.pubs, [ + 'DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI', + ]); + assert.equal(ps.new.pubs.length, 1); + assert.deepStrictEqual(ps.new.pubs, [ + 'DB-fH5uto5o5XHZjNN3_W3PdT4MIyTCmQWDzMxMZV2kI', + ]); + assert.equal(ps.new.ridx, 1); + assert.equal(ps.new.kidx, 1); + assert.equal(ps.nxt.pubs.length, 1); + assert.deepStrictEqual(ps.nxt.pubs, [ + 'DHHneREQ1eZyQNc5nEsQYx1FqFVL1OTXmvmatTE77Cfe', + ]); + assert.equal(ps.nxt.ridx, 2); + assert.equal(ps.nxt.kidx, 2); + + keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64); + assert.deepStrictEqual(keys, ps.new.pubs); + + digs = Array.from(digers, (diger: Diger) => diger.qb64); + assert.deepStrictEqual(digs, [ + 'ECl1Env_5PQHqVMpHgoqg9H9mT7ENtk0Q499cmMT6Fvz', + ]); + + assert.deepStrictEqual(oldpubs, ps.old.pubs); + + ppt = manager.ks.getPths(ps.new.pubs[0]); + assert.equal(ppt!.path, '0'); + assert.equal(ppt!.code, 'A'); + assert.equal(ppt!.tier, 'low'); + assert.equal(ppt!.temp, true); + + psigers = manager.sign({ ser: serb, pubs: ps.new.pubs }); + assert.equal(psigers.length, 1); + assert.equal(psigers[0] instanceof Siger, true); + vsigers = manager.sign({ ser: serb, verfers: verfers }); + psigs = Array.from(psigers as Array, (psiger) => psiger.qb64); + vsigs = Array.from(vsigers as Array, (vsiger) => vsiger.qb64); + assert.deepStrictEqual(psigs, vsigs); + assert.equal( + psigs[0], + 'AACRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI' + ); + }); +}); diff --git a/test/core/matter.test.ts b/test/core/matter.test.ts index 4e951249..741492ac 100644 --- a/test/core/matter.test.ts +++ b/test/core/matter.test.ts @@ -1,14 +1,13 @@ -import {strict as assert} from "assert"; +import { strict as assert } from 'assert'; import { Sizage } from '../../src/keri/core/matter'; describe('Sizage', () => { it('should hold size values in 4 properties', async () => { - let sizage = new Sizage(1,2,3,4) - assert.equal(sizage.hs, 1) - assert.equal(sizage.ss, 2) - assert.equal(sizage.fs, 3) - assert.equal(sizage.ls, 4) + let sizage = new Sizage(1, 2, 3, 4); + assert.equal(sizage.hs, 1); + assert.equal(sizage.ss, 2); + assert.equal(sizage.fs, 3); + assert.equal(sizage.ls, 4); }); }); - diff --git a/test/core/number.test.ts b/test/core/number.test.ts index 46929aeb..88ecf38e 100644 --- a/test/core/number.test.ts +++ b/test/core/number.test.ts @@ -1,33 +1,33 @@ -import {strict as assert} from "assert"; -import {CesrNumber} from "../../src/keri/core/number"; +import { strict as assert } from 'assert'; +import { CesrNumber } from '../../src/keri/core/number'; describe('THolder', () => { it('should hold thresholds', async () => { - let n = new CesrNumber({}, undefined, "0") - assert.equal(n.num, 0) - assert.equal(n.numh, "0") - n = new CesrNumber({}, 0) - assert.equal(n.num, 0) - assert.equal(n.numh, "0") + let n = new CesrNumber({}, undefined, '0'); + assert.equal(n.num, 0); + assert.equal(n.numh, '0'); + n = new CesrNumber({}, 0); + assert.equal(n.num, 0); + assert.equal(n.numh, '0'); - n = new CesrNumber({}, 1) - assert.equal(n.num, 1) - assert.equal(n.numh, "1") + n = new CesrNumber({}, 1); + assert.equal(n.num, 1); + assert.equal(n.numh, '1'); - n = new CesrNumber({}, 15) - assert.equal(n.num, 15) - assert.equal(n.numh, "f") + n = new CesrNumber({}, 15); + assert.equal(n.num, 15); + assert.equal(n.numh, 'f'); - n = new CesrNumber({}, undefined,"1") - assert.equal(n.num, 1) - assert.equal(n.numh, "1") + n = new CesrNumber({}, undefined, '1'); + assert.equal(n.num, 1); + assert.equal(n.numh, '1'); - n = new CesrNumber({}, undefined,"f") - assert.equal(n.num, 15) - assert.equal(n.numh, "f") + n = new CesrNumber({}, undefined, 'f'); + assert.equal(n.num, 15); + assert.equal(n.numh, 'f'); - n = new CesrNumber({}, undefined,"15") - assert.equal(n.num, 21) - assert.equal(n.numh, "15") - }) -}) \ No newline at end of file + n = new CesrNumber({}, undefined, '15'); + assert.equal(n.num, 21); + assert.equal(n.numh, '15'); + }); +}); diff --git a/test/core/pather.test.ts b/test/core/pather.test.ts index 5cc927dc..2a03d0db 100644 --- a/test/core/pather.test.ts +++ b/test/core/pather.test.ts @@ -1,46 +1,53 @@ -import {strict as assert} from "assert"; -import {Pather} from "../../src/keri/core/pather"; -import {b} from "../../src"; +import { strict as assert } from 'assert'; +import { Pather } from '../../src/keri/core/pather'; +import { b } from '../../src'; - -describe("Pather", () => { - it("should path-ify stuff (and back again)", () => { +describe('Pather', () => { + it('should path-ify stuff (and back again)', () => { assert.throws(() => { - new Pather({}) - }) - - let path: string[] = [] - let pather = new Pather({}, undefined, path) - assert.equal(pather.bext, "-") - assert.equal(pather.qb64, "6AABAAA-") - assert.deepStrictEqual(pather.raw, b('>')) - assert.deepStrictEqual(pather.path, path) - - path = ["a", "b", "c"] - pather = new Pather({}, undefined, path) - assert.equal(pather.bext, "-a-b-c") - assert.equal(pather.qb64, "5AACAA-a-b-c") - assert.deepStrictEqual(pather.raw, new Uint8Array( [15, 154, 249, 191, 156])) - assert.deepStrictEqual(pather.path, path) - - path = ["0", "1", "2"] - pather = new Pather({}, undefined, path) - assert.equal(pather.bext, "-0-1-2") - assert.equal(pather.qb64, "5AACAA-0-1-2") - assert.deepStrictEqual(pather.raw, new Uint8Array( [15, 180, 251, 95, 182])) - assert.deepStrictEqual(pather.path, path) - - path = ["field0", "1", "0"] - pather = new Pather({}, undefined, path) - assert.equal(pather.bext, "-field0-1-0") - assert.equal(pather.qb64, "4AADA-field0-1-0") - assert.deepStrictEqual(pather.raw, new Uint8Array( [3, 231, 226, 122, 87, 116, 251, 95, 180])) - assert.deepStrictEqual(pather.path, path) - - path = ["Not$Base64", "@moreso", "*again"] + new Pather({}); + }); + + let path: string[] = []; + let pather = new Pather({}, undefined, path); + assert.equal(pather.bext, '-'); + assert.equal(pather.qb64, '6AABAAA-'); + assert.deepStrictEqual(pather.raw, b('>')); + assert.deepStrictEqual(pather.path, path); + + path = ['a', 'b', 'c']; + pather = new Pather({}, undefined, path); + assert.equal(pather.bext, '-a-b-c'); + assert.equal(pather.qb64, '5AACAA-a-b-c'); + assert.deepStrictEqual( + pather.raw, + new Uint8Array([15, 154, 249, 191, 156]) + ); + assert.deepStrictEqual(pather.path, path); + + path = ['0', '1', '2']; + pather = new Pather({}, undefined, path); + assert.equal(pather.bext, '-0-1-2'); + assert.equal(pather.qb64, '5AACAA-0-1-2'); + assert.deepStrictEqual( + pather.raw, + new Uint8Array([15, 180, 251, 95, 182]) + ); + assert.deepStrictEqual(pather.path, path); + + path = ['field0', '1', '0']; + pather = new Pather({}, undefined, path); + assert.equal(pather.bext, '-field0-1-0'); + assert.equal(pather.qb64, '4AADA-field0-1-0'); + assert.deepStrictEqual( + pather.raw, + new Uint8Array([3, 231, 226, 122, 87, 116, 251, 95, 180]) + ); + assert.deepStrictEqual(pather.path, path); + + path = ['Not$Base64', '@moreso', '*again']; assert.throws(() => { - new Pather({}, undefined, path) - }) - - }) -}) \ No newline at end of file + new Pather({}, undefined, path); + }); + }); +}); diff --git a/test/core/prefixer.test.ts b/test/core/prefixer.test.ts index 719083de..98f3cbde 100644 --- a/test/core/prefixer.test.ts +++ b/test/core/prefixer.test.ts @@ -1,48 +1,61 @@ -import libsodium from "libsodium-wrappers-sumo"; -import {Dict, Ident, Ilks, Serials, versify, Versionage} from "../../src/keri/core/core"; -import {MtrDex} from "../../src/keri/core/matter"; -import {Prefixer} from "../../src/keri/core/prefixer"; -import {strict as assert} from "assert"; - +import libsodium from 'libsodium-wrappers-sumo'; +import { + Dict, + Ident, + Ilks, + Serials, + versify, + Versionage, +} from '../../src/keri/core/core'; +import { MtrDex } from '../../src/keri/core/matter'; +import { Prefixer } from '../../src/keri/core/prefixer'; +import { strict as assert } from 'assert'; describe('Prefixer', () => { it('should create autonomic identifier prefix using derivation as determined by code from ked', async () => { await libsodium.ready; // (b'\xacr\xda\xc83~\x99r\xaf\xeb`\xc0\x8cR\xd7\xd7\xf69\xc8E\x1e\xd2\xf0=`\xf7\xbf\x8a\x18\x8a`q') // from keripy - let verkey = new Uint8Array([172, 114, 218, 200, 51, 126, 153, 114, 175, 235, 96, 192, 140, 82, 215, 215, 246, 57, 200, 69, 30, 210, 240, 61, 96, 247, 191, 138, 24, 138, 96, 113]) - let prefixer = new Prefixer({raw: verkey, code: MtrDex.Ed25519}) - assert.equal(prefixer.code, MtrDex.Ed25519) - assert.equal(prefixer.qb64, "DKxy2sgzfplyr-tgwIxS19f2OchFHtLwPWD3v4oYimBx") + let verkey = new Uint8Array([ + 172, 114, 218, 200, 51, 126, 153, 114, 175, 235, 96, 192, 140, 82, + 215, 215, 246, 57, 200, 69, 30, 210, 240, 61, 96, 247, 191, 138, 24, + 138, 96, 113, + ]); + let prefixer = new Prefixer({ raw: verkey, code: MtrDex.Ed25519 }); + assert.equal(prefixer.code, MtrDex.Ed25519); + assert.equal( + prefixer.qb64, + 'DKxy2sgzfplyr-tgwIxS19f2OchFHtLwPWD3v4oYimBx' + ); // Test digest derivation from inception ked - let vs = versify(Ident.KERI, Versionage, Serials.JSON, 0) - let sn = 0 - let ilk = Ilks.icp - let sith = "1" - let keys = [new Prefixer({raw: verkey, code: MtrDex.Ed25519}).qb64] - let nxt = "" - let toad = 0 - let wits = new Array() - let cnfg = new Array() + let vs = versify(Ident.KERI, Versionage, Serials.JSON, 0); + let sn = 0; + let ilk = Ilks.icp; + let sith = '1'; + let keys = [new Prefixer({ raw: verkey, code: MtrDex.Ed25519 }).qb64]; + let nxt = ''; + let toad = 0; + let wits = new Array(); + let cnfg = new Array(); let ked = { - v: vs, // version string - i: "", // qb64 prefix - s: sn.toString(16), // hex string no leading zeros lowercase + v: vs, // version string + i: '', // qb64 prefix + s: sn.toString(16), // hex string no leading zeros lowercase t: ilk, - kt: sith, // hex string no leading zeros lowercase - k: keys, // list of qb64 - n: nxt, // hash qual Base64 - wt: toad.toString(16), // hex string no leading zeros lowercase - w: wits, // list of qb64 may be empty - c: cnfg, // list of config ordered mappings may be empty - } as Dict - - prefixer = new Prefixer({code: MtrDex.Blake3_256}, ked) - assert.equal(prefixer.qb64, 'ELEjyRTtmfyp4VpTBTkv_b6KONMS1V8-EW-aGJ5P_QMo') - - - - }) -}) \ No newline at end of file + kt: sith, // hex string no leading zeros lowercase + k: keys, // list of qb64 + n: nxt, // hash qual Base64 + wt: toad.toString(16), // hex string no leading zeros lowercase + w: wits, // list of qb64 may be empty + c: cnfg, // list of config ordered mappings may be empty + } as Dict; + + prefixer = new Prefixer({ code: MtrDex.Blake3_256 }, ked); + assert.equal( + prefixer.qb64, + 'ELEjyRTtmfyp4VpTBTkv_b6KONMS1V8-EW-aGJ5P_QMo' + ); + }); +}); diff --git a/test/core/saider.test.ts b/test/core/saider.test.ts index fea24a70..9b55325c 100644 --- a/test/core/saider.test.ts +++ b/test/core/saider.test.ts @@ -1,36 +1,42 @@ -import {Dict, Ident, Serials, versify, Versionage} from "../../src/keri/core/core"; -import {strict as assert} from "assert"; -import {MtrDex} from "../../src/keri/core/matter"; -import libsodium from "libsodium-wrappers-sumo"; -import {Saider} from "../../src/keri/core/saider"; - +import { + Dict, + Ident, + Serials, + versify, + Versionage, +} from '../../src/keri/core/core'; +import { strict as assert } from 'assert'; +import { MtrDex } from '../../src/keri/core/matter'; +import libsodium from 'libsodium-wrappers-sumo'; +import { Saider } from '../../src/keri/core/saider'; describe('Saider', () => { - it("should create Saidified dicts", async () => { + it('should create Saidified dicts', async () => { await libsodium.ready; - let kind = Serials.JSON - let code = MtrDex.Blake3_256 + let kind = Serials.JSON; + let code = MtrDex.Blake3_256; - let vs = versify(Ident.KERI, Versionage, kind, 0) // vaccuous size == 0 - assert.equal(vs, 'KERI10JSON000000_') + let vs = versify(Ident.KERI, Versionage, kind, 0); // vaccuous size == 0 + assert.equal(vs, 'KERI10JSON000000_'); let sad4 = { v: vs, - t: "rep", - d: "", // vacuous said - dt: "2020-08-22T17:50:12.988921+00:00", - r: "logs/processor", + t: 'rep', + d: '', // vacuous said + dt: '2020-08-22T17:50:12.988921+00:00', + r: 'logs/processor', a: { - d: "EBabiu_JCkE0GbiglDXNB5C4NQq-hiGgxhHKXBxkiojg", - i: "EB0_D51cTh_q6uOQ-byFiv5oNXZ-cxdqCqBAa4JmBLtb", - name: "John Jones", - role: "Founder", + d: 'EBabiu_JCkE0GbiglDXNB5C4NQq-hiGgxhHKXBxkiojg', + i: 'EB0_D51cTh_q6uOQ-byFiv5oNXZ-cxdqCqBAa4JmBLtb', + name: 'John Jones', + role: 'Founder', } as Dict, - } as Dict - let saider = new Saider({}, sad4) // default version string code, kind, and label - assert.equal(saider.code, code) - assert.equal(saider.qb64, 'ELzewBpZHSENRP-sL_G_2Ji4YDdNkns9AzFzufleJqdw') - - - }) -}) \ No newline at end of file + } as Dict; + let saider = new Saider({}, sad4); // default version string code, kind, and label + assert.equal(saider.code, code); + assert.equal( + saider.qb64, + 'ELzewBpZHSENRP-sL_G_2Ji4YDdNkns9AzFzufleJqdw' + ); + }); +}); diff --git a/test/core/salter.test.ts b/test/core/salter.test.ts index e396a8cd..e921c405 100644 --- a/test/core/salter.test.ts +++ b/test/core/salter.test.ts @@ -1,39 +1,48 @@ -import {strict as assert} from "assert"; -import libsodium from "libsodium-wrappers-sumo"; +import { strict as assert } from 'assert'; +import libsodium from 'libsodium-wrappers-sumo'; import { Salter } from '../../src/keri/core/salter'; describe('Salter', () => { it('should generate salts', async () => { await libsodium.ready; - let salter = new Salter({}) - - assert.notEqual(salter, null) - assert.equal(salter.qb64.length, 24) - - let salt = new Uint8Array([146, 78, 142, 186, 189, 77, 130, 3, 232, 248, 186, 197, 8, 0, 73, 182]) - salter = new Salter({raw: salt}) - assert.notEqual(salter, null) - assert.equal(salter.qb64, "0ACSTo66vU2CA-j4usUIAEm2") - - salter = new Salter({qb64: "0ACSTo66vU2CA-j4usUIAEm2"}) - let raw = new Uint8Array([146, 78, 142, 186, 189, 77, 130, 3, 232, 248, 186, 197, 8, 0, 73, 182]); - assert.deepStrictEqual(salter.raw, raw) - - salter = new Salter({qb64: "0ABa4cx6f0SdfwFawI0A7mOZ"}) - raw = new Uint8Array([90, 225, 204, 122, 127, 68, 157, 127, 1, 90, 192, 141, 0, 238, 99, 153]); - assert.deepStrictEqual(salter.raw, raw) - + let salter = new Salter({}); + + assert.notEqual(salter, null); + assert.equal(salter.qb64.length, 24); + + let salt = new Uint8Array([ + 146, 78, 142, 186, 189, 77, 130, 3, 232, 248, 186, 197, 8, 0, 73, + 182, + ]); + salter = new Salter({ raw: salt }); + assert.notEqual(salter, null); + assert.equal(salter.qb64, '0ACSTo66vU2CA-j4usUIAEm2'); + + salter = new Salter({ qb64: '0ACSTo66vU2CA-j4usUIAEm2' }); + let raw = new Uint8Array([ + 146, 78, 142, 186, 189, 77, 130, 3, 232, 248, 186, 197, 8, 0, 73, + 182, + ]); + assert.deepStrictEqual(salter.raw, raw); + + salter = new Salter({ qb64: '0ABa4cx6f0SdfwFawI0A7mOZ' }); + raw = new Uint8Array([ + 90, 225, 204, 122, 127, 68, 157, 127, 1, 90, 192, 141, 0, 238, 99, + 153, + ]); + assert.deepStrictEqual(salter.raw, raw); }); }); describe('Salter.signer', () => { it('should return a signer', async () => { - - let salter = new Salter({qb64: "0ACSTo66vU2CA-j4usUIAEm2"}) - let signer = salter.signer() - assert.notEqual(signer, null) - assert.equal(signer.verfer.qb64, "DD28x2a4KCZ8f6OAcA856jAD1chNOo4pT8ICxyzJUJhj") - + let salter = new Salter({ qb64: '0ACSTo66vU2CA-j4usUIAEm2' }); + let signer = salter.signer(); + assert.notEqual(signer, null); + assert.equal( + signer.verfer.qb64, + 'DD28x2a4KCZ8f6OAcA856jAD1chNOo4pT8ICxyzJUJhj' + ); }); }); diff --git a/test/core/seqner.test.ts b/test/core/seqner.test.ts index 0c188252..f856e693 100644 --- a/test/core/seqner.test.ts +++ b/test/core/seqner.test.ts @@ -1,39 +1,46 @@ -import {strict as assert} from "assert"; -import libsodium from "libsodium-wrappers-sumo"; +import { strict as assert } from 'assert'; +import libsodium from 'libsodium-wrappers-sumo'; import { Seqner } from '../../src/keri/core/seqner'; describe('Seqner', () => { it('should generate Seqner number class', async () => { await libsodium.ready; - let seqner = new Seqner({}) - assert.equal(seqner.sn, 0) - assert.equal(seqner.snh, "0") - assert.equal(seqner.qb64, "0AAAAAAAAAAAAAAAAAAAAAAA") - assert.notStrictEqual(seqner.qb64b, new Uint8Array([ 48, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65 ])) - assert.equal(seqner.raw.length, 16) - assert.notStrictEqual(seqner.raw, new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])) - - seqner = new Seqner({snh: "1"}) - assert.equal(seqner.sn, 1) - assert.equal(seqner.snh, "1") - - seqner = new Seqner({sn: 1}) - assert.equal(seqner.sn, 1) - assert.equal(seqner.snh, "1") - - - seqner = new Seqner({sn: 16}) - assert.equal(seqner.sn, 16) - assert.equal(seqner.snh, "10") - - seqner = new Seqner({sn: 15}) - assert.equal(seqner.sn, 15) - assert.equal(seqner.snh, "f") - - seqner = new Seqner({snh: "f"}) - assert.equal(seqner.sn, 15) - assert.equal(seqner.snh, "f") + let seqner = new Seqner({}); + assert.equal(seqner.sn, 0); + assert.equal(seqner.snh, '0'); + assert.equal(seqner.qb64, '0AAAAAAAAAAAAAAAAAAAAAAA'); + assert.notStrictEqual( + seqner.qb64b, + new Uint8Array([ + 48, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + ]) + ); + assert.equal(seqner.raw.length, 16); + assert.notStrictEqual( + seqner.raw, + new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) + ); + + seqner = new Seqner({ snh: '1' }); + assert.equal(seqner.sn, 1); + assert.equal(seqner.snh, '1'); + + seqner = new Seqner({ sn: 1 }); + assert.equal(seqner.sn, 1); + assert.equal(seqner.snh, '1'); + + seqner = new Seqner({ sn: 16 }); + assert.equal(seqner.sn, 16); + assert.equal(seqner.snh, '10'); + + seqner = new Seqner({ sn: 15 }); + assert.equal(seqner.sn, 15); + assert.equal(seqner.snh, 'f'); + + seqner = new Seqner({ snh: 'f' }); + assert.equal(seqner.sn, 15); + assert.equal(seqner.snh, 'f'); }); }); - diff --git a/test/core/serder.test.ts b/test/core/serder.test.ts index d0ed0a10..679b69ef 100644 --- a/test/core/serder.test.ts +++ b/test/core/serder.test.ts @@ -1,47 +1,68 @@ -import {deversify, Dict, Ilks, Serials, Version} from "../../src/keri/core/core"; -import {strict as assert} from "assert"; -import {Salter, Tier} from "../../src/keri/core/salter"; -import {MtrDex} from "../../src/keri/core/matter"; -import {Diger} from "../../src/keri/core/diger"; -import {Serder} from "../../src/keri/core/serder"; -import libsodium from "libsodium-wrappers-sumo"; -import {Prefixer} from "../../src/keri/core/prefixer"; - +import { + deversify, + Dict, + Ilks, + Serials, + Version, +} from '../../src/keri/core/core'; +import { strict as assert } from 'assert'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import { MtrDex } from '../../src/keri/core/matter'; +import { Diger } from '../../src/keri/core/diger'; +import { Serder } from '../../src/keri/core/serder'; +import libsodium from 'libsodium-wrappers-sumo'; +import { Prefixer } from '../../src/keri/core/prefixer'; describe('deversify', () => { it('should parse a KERI event version string', async () => { - let [,kind, version, size] = deversify("KERI10JSON00011c_") - assert.equal(kind, Serials.JSON) - assert.deepStrictEqual(version, new Version(1, 0)) - assert.equal(size, "00011c") - }) -}) + let [, kind, version, size] = deversify('KERI10JSON00011c_'); + assert.equal(kind, Serials.JSON); + assert.deepStrictEqual(version, new Version(1, 0)); + assert.equal(size, '00011c'); + }); +}); describe('Serder', () => { - it("should create KERI events from dicts", async () => { + it('should create KERI events from dicts', async () => { await libsodium.ready; - let sith = 1 - let nsith = 1 - let sn = 0 - let toad = 0 - - let raw = new Uint8Array([5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, 117]) - let salter = new Salter({raw: raw}) - let skp0 = salter.signer(MtrDex.Ed25519_Seed, true, "A", Tier.low, true) - let keys = [skp0.verfer.qb64] + let sith = 1; + let nsith = 1; + let sn = 0; + let toad = 0; - let skp1 = salter.signer(MtrDex.Ed25519_Seed, true, "N", Tier.low, true) - let ndiger = new Diger({}, skp1.verfer.qb64b) - let nxt = [ndiger.qb64] - assert.deepStrictEqual(nxt, ['EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj']) + let raw = new Uint8Array([ + 5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, + 117, + ]); + let salter = new Salter({ raw: raw }); + let skp0 = salter.signer( + MtrDex.Ed25519_Seed, + true, + 'A', + Tier.low, + true + ); + let keys = [skp0.verfer.qb64]; + let skp1 = salter.signer( + MtrDex.Ed25519_Seed, + true, + 'N', + Tier.low, + true + ); + let ndiger = new Diger({}, skp1.verfer.qb64b); + let nxt = [ndiger.qb64]; + assert.deepStrictEqual(nxt, [ + 'EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj', + ]); let ked0 = { - v: "KERI10JSON000000_", + v: 'KERI10JSON000000_', t: Ilks.icp, - d: "", - i: "", + d: '', + i: '', s: sn.toString(16), kt: sith.toString(16), k: keys, @@ -51,19 +72,24 @@ describe('Serder', () => { b: [], c: [], a: [], - } as Dict + } as Dict; - let serder = new Serder(ked0) - assert.equal(serder.raw, + let serder = new Serder(ked0); + assert.equal( + serder.raw, '{"v":"KERI10JSON0000d3_","t":"icp","d":"","i":"","s":"0","kt":"1","k":' + - '["DAUDqkmn-hqlQKD8W-FAEa5JUvJC2I9yarEem-AAEg3e"],"nt":"1",' + - '"n":["EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj"],"bt":"0","b":[],"c":[],"a":[]}') - let aid0 = new Prefixer({code: MtrDex.Ed25519}, ked0) - assert.equal(aid0.code, MtrDex.Ed25519) - assert.equal(aid0.qb64, skp0.verfer.qb64) - assert.equal(skp0.verfer.qb64, 'DAUDqkmn-hqlQKD8W-FAEa5JUvJC2I9yarEem-AAEg3e') + '["DAUDqkmn-hqlQKD8W-FAEa5JUvJC2I9yarEem-AAEg3e"],"nt":"1",' + + '"n":["EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj"],"bt":"0","b":[],"c":[],"a":[]}' + ); + let aid0 = new Prefixer({ code: MtrDex.Ed25519 }, ked0); + assert.equal(aid0.code, MtrDex.Ed25519); + assert.equal(aid0.qb64, skp0.verfer.qb64); + assert.equal( + skp0.verfer.qb64, + 'DAUDqkmn-hqlQKD8W-FAEa5JUvJC2I9yarEem-AAEg3e' + ); - aid0 = new Prefixer({code: MtrDex.Blake3_256}, ked0) - assert.equal(aid0.qb64, 'ECHOi6qRaswNpvytpCtpvEh2cB2aLAwVHBLFinno3YVW') - }) -}) \ No newline at end of file + aid0 = new Prefixer({ code: MtrDex.Blake3_256 }, ked0); + assert.equal(aid0.qb64, 'ECHOi6qRaswNpvytpCtpvEh2cB2aLAwVHBLFinno3YVW'); + }); +}); diff --git a/test/core/signer.test.ts b/test/core/signer.test.ts index a38b98dc..b0286add 100644 --- a/test/core/signer.test.ts +++ b/test/core/signer.test.ts @@ -1,26 +1,29 @@ -import {strict as assert} from "assert"; -import libsodium from "libsodium-wrappers-sumo"; +import { strict as assert } from 'assert'; +import libsodium from 'libsodium-wrappers-sumo'; import { Signer } from '../../src'; -import {Matter, MtrDex} from "../../src"; -import {b} from "../../src"; +import { Matter, MtrDex } from '../../src'; +import { b } from '../../src'; describe('Signer', () => { it('should sign things', async () => { await libsodium.ready; - let signer = new Signer({}) // defaults provide Ed25519 signer Ed25519 verfer - assert.equal(signer.code, MtrDex.Ed25519_Seed) - assert.equal(signer.raw.length, Matter._rawSize(signer.code)) - assert.equal(signer.verfer.code, MtrDex.Ed25519) - assert.equal(signer.verfer.raw.length, Matter._rawSize(signer.verfer.code)) + let signer = new Signer({}); // defaults provide Ed25519 signer Ed25519 verfer + assert.equal(signer.code, MtrDex.Ed25519_Seed); + assert.equal(signer.raw.length, Matter._rawSize(signer.code)); + assert.equal(signer.verfer.code, MtrDex.Ed25519); + assert.equal( + signer.verfer.raw.length, + Matter._rawSize(signer.verfer.code) + ); - let ser = b('abcdefghijklmnopqrstuvwxyz0123456789') + let ser = b('abcdefghijklmnopqrstuvwxyz0123456789'); - let cigar = signer.sign(ser) - assert.equal(cigar.code, MtrDex.Ed25519_Sig) - assert.equal(cigar.raw.length, Matter._rawSize(cigar.code)) - let result = signer.verfer.verify(cigar.raw, ser) - assert.equal(result, true) + let cigar = signer.sign(ser); + assert.equal(cigar.code, MtrDex.Ed25519_Sig); + assert.equal(cigar.raw.length, Matter._rawSize(cigar.code)); + let result = signer.verfer.verify(cigar.raw, ser); + assert.equal(result, true); }); -}); \ No newline at end of file +}); diff --git a/test/core/tholder.test.ts b/test/core/tholder.test.ts index 14c5f657..1e90c75a 100644 --- a/test/core/tholder.test.ts +++ b/test/core/tholder.test.ts @@ -1,130 +1,173 @@ -import {strict as assert} from "assert"; -import {Tholder} from "../../src/keri/core/tholder"; -import {math} from "../../src" +import { strict as assert } from 'assert'; +import { Tholder } from '../../src/keri/core/tholder'; +import { math } from '../../src'; describe('THolder', () => { it('should hold thresholds', async () => { - let tholder = new Tholder({sith: 'b'}); + let tholder = new Tholder({ sith: 'b' }); assert.equal(tholder.thold, 11); assert.equal(tholder.size, 11); assert.deepEqual(tholder.limen, new Uint8Array([77, 65, 115, 65])); - assert.equal(tholder.sith, 'b') - assert.equal(tholder.json, '"b"') + assert.equal(tholder.sith, 'b'); + assert.equal(tholder.json, '"b"'); assert.equal(tholder.num, 11); - assert.notEqual(tholder.satisfy([1, 2, 3]), true) - assert.equal(tholder.satisfy([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]), true) + assert.notEqual(tholder.satisfy([1, 2, 3]), true); + assert.equal( + tholder.satisfy([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]), + true + ); - tholder = new Tholder({sith: 11}); + tholder = new Tholder({ sith: 11 }); assert.equal(tholder.thold, 11); assert.equal(tholder.size, 11); assert.deepEqual(tholder.limen, new Uint8Array([77, 65, 115, 65])); - assert.equal(tholder.sith, 'b') - assert.equal(tholder.json, '"b"') + assert.equal(tholder.sith, 'b'); + assert.equal(tholder.json, '"b"'); assert.equal(tholder.num, 11); - assert.notEqual(tholder.satisfy([1, 2, 3]), true) - assert.equal(tholder.satisfy([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]), true) + assert.notEqual(tholder.satisfy([1, 2, 3]), true); + assert.equal( + tholder.satisfy([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]), + true + ); - tholder = new Tholder({thold: 2}); + tholder = new Tholder({ thold: 2 }); assert.equal(tholder.thold, 2); assert.equal(tholder.size, 2); assert.deepEqual(tholder.limen, new Uint8Array([77, 65, 73, 65])); - assert.equal(tholder.sith, '2') - assert.equal(tholder.json, '"2"') + assert.equal(tholder.sith, '2'); + assert.equal(tholder.json, '"2"'); assert.equal(tholder.num, 2); - assert.notEqual(tholder.satisfy([1]), true) - assert.equal(tholder.satisfy([1, 2]), true) - assert.equal(tholder.satisfy([1, 2, 3, 4]), true) + assert.notEqual(tholder.satisfy([1]), true); + assert.equal(tholder.satisfy([1, 2]), true); + assert.equal(tholder.satisfy([1, 2, 3, 4]), true); assert.throws(() => { - new Tholder({sith: -1}) - }) + new Tholder({ sith: -1 }); + }); assert.throws(() => { - tholder = new Tholder({sith: ["1/2", "1/2", ["1/3", "1/3", "1/3"]]}) - }) + tholder = new Tholder({ + sith: ['1/2', '1/2', ['1/3', '1/3', '1/3']], + }); + }); assert.throws(() => { - tholder = new Tholder({sith: [["1/2", "1/2"], ["1/4", "1/4", "1/4"]]}) - }) + tholder = new Tholder({ + sith: [ + ['1/2', '1/2'], + ['1/4', '1/4', '1/4'], + ], + }); + }); // math.fractional Weights - tholder = new Tholder({sith: ["1/2", "1/2", "1/4", "1/4", "1/4"]}) - assert.equal(tholder.weighted, true) - assert.equal(tholder.size, 5) - assert.deepStrictEqual(tholder.thold, [[ - math.fraction("1/2"), - math.fraction("1/2"), - math.fraction("1/4"), - math.fraction("1/4"), - math.fraction("1/4") - ]]) - assert.equal(tholder.satisfy([0, 1]), true) - assert.equal(tholder.satisfy([0, 2, 4]), true) - assert.equal(tholder.satisfy([1, 3, 4]), true) - assert.equal(tholder.satisfy([0, 1, 2, 3, 4]), true) - assert.equal(tholder.satisfy([0, 2, 3]), true) - assert.equal(tholder.satisfy([0, 0, 1, 2, 1]), true) - assert.notEqual(tholder.satisfy([0]), true) - assert.notEqual(tholder.satisfy([0, 2]), true) - assert.notEqual(tholder.satisfy([2, 3, 4]), true) - - tholder = new Tholder({sith: [["1/2", "1/2", "1/2"], ["1/3", "1/3", "1/3", "1/3"]]}) - assert.equal(tholder.weighted, true) - assert.equal(tholder.size, 7) - assert.deepStrictEqual(tholder.sith, [["1/2", "1/2", "1/2"], ["1/3", "1/3", "1/3", "1/3"]]) + tholder = new Tholder({ sith: ['1/2', '1/2', '1/4', '1/4', '1/4'] }); + assert.equal(tholder.weighted, true); + assert.equal(tholder.size, 5); assert.deepStrictEqual(tholder.thold, [ [ - math.fraction(1, 2), - math.fraction(1, 2), - math.fraction(1, 2) + math.fraction('1/2'), + math.fraction('1/2'), + math.fraction('1/4'), + math.fraction('1/4'), + math.fraction('1/4'), + ], + ]); + assert.equal(tholder.satisfy([0, 1]), true); + assert.equal(tholder.satisfy([0, 2, 4]), true); + assert.equal(tholder.satisfy([1, 3, 4]), true); + assert.equal(tholder.satisfy([0, 1, 2, 3, 4]), true); + assert.equal(tholder.satisfy([0, 2, 3]), true); + assert.equal(tholder.satisfy([0, 0, 1, 2, 1]), true); + assert.notEqual(tholder.satisfy([0]), true); + assert.notEqual(tholder.satisfy([0, 2]), true); + assert.notEqual(tholder.satisfy([2, 3, 4]), true); + + tholder = new Tholder({ + sith: [ + ['1/2', '1/2', '1/2'], + ['1/3', '1/3', '1/3', '1/3'], ], + }); + assert.equal(tholder.weighted, true); + assert.equal(tholder.size, 7); + assert.deepStrictEqual(tholder.sith, [ + ['1/2', '1/2', '1/2'], + ['1/3', '1/3', '1/3', '1/3'], + ]); + assert.deepStrictEqual(tholder.thold, [ + [math.fraction(1, 2), math.fraction(1, 2), math.fraction(1, 2)], [ math.fraction(1, 3), math.fraction(1, 3), math.fraction(1, 3), - math.fraction(1, 3) - ] - ]) - assert.equal(tholder.satisfy([0, 2, 3, 5, 6]), true) - assert.equal(tholder.satisfy([1, 2, 3, 4, 5]), true) - assert.notEqual(tholder.satisfy([0, 1]), true) - assert.notEqual(tholder.satisfy([0, 2]), true) - assert.notEqual(tholder.satisfy([4, 5, 6]), true) - assert.notEqual(tholder.satisfy([1, 4, 5, 6]), true) + math.fraction(1, 3), + ], + ]); + assert.equal(tholder.satisfy([0, 2, 3, 5, 6]), true); + assert.equal(tholder.satisfy([1, 2, 3, 4, 5]), true); + assert.notEqual(tholder.satisfy([0, 1]), true); + assert.notEqual(tholder.satisfy([0, 2]), true); + assert.notEqual(tholder.satisfy([4, 5, 6]), true); + assert.notEqual(tholder.satisfy([1, 4, 5, 6]), true); - tholder = new Tholder({sith: '[["1/2", "1/2", "1/4", "1/4", "1/4"], ["1/1", "1"]]'}) - assert.equal(tholder.weighted, true) - assert.equal(tholder.size, 7) - assert.deepStrictEqual(tholder.sith, [["1/2", "1/2", "1/4", "1/4", "1/4"], ["1", "1"]]) - assert.deepStrictEqual(tholder.thold, [[math.fraction(1, 2), - math.fraction(1, 2), - math.fraction(1, 4), - math.fraction(1, 4), - math.fraction(1, 4)], - [math.fraction(1, 1), math.fraction(1, 1)]]) - assert.equal(tholder.satisfy([1, 2, 3, 5]), true) - assert.equal(tholder.satisfy([0, 1, 6]), true) - assert.notEqual(tholder.satisfy([0, 1]), true) - assert.notEqual(tholder.satisfy([5, 6]), true) - assert.notEqual(tholder.satisfy([2, 3, 4]), true) - assert.notEqual(tholder.satisfy([]), true) + tholder = new Tholder({ + sith: '[["1/2", "1/2", "1/4", "1/4", "1/4"], ["1/1", "1"]]', + }); + assert.equal(tholder.weighted, true); + assert.equal(tholder.size, 7); + assert.deepStrictEqual(tholder.sith, [ + ['1/2', '1/2', '1/4', '1/4', '1/4'], + ['1', '1'], + ]); + assert.deepStrictEqual(tholder.thold, [ + [ + math.fraction(1, 2), + math.fraction(1, 2), + math.fraction(1, 4), + math.fraction(1, 4), + math.fraction(1, 4), + ], + [math.fraction(1, 1), math.fraction(1, 1)], + ]); + assert.equal(tholder.satisfy([1, 2, 3, 5]), true); + assert.equal(tholder.satisfy([0, 1, 6]), true); + assert.notEqual(tholder.satisfy([0, 1]), true); + assert.notEqual(tholder.satisfy([5, 6]), true); + assert.notEqual(tholder.satisfy([2, 3, 4]), true); + assert.notEqual(tholder.satisfy([]), true); - tholder = new Tholder({sith: [["1/2", "1/2", "1/4", "1/4", "1/4"], ["1/1", "1"]]}) - assert.equal(tholder.weighted, true) - assert.equal(tholder.size, 7) - assert.deepStrictEqual(tholder.sith, [["1/2", "1/2", "1/4", "1/4", "1/4"], ["1", "1"]]) - assert.deepStrictEqual(tholder.json, '[["1/2","1/2","1/4","1/4","1/4"],["1","1"]]') - assert.deepStrictEqual(tholder.thold, [[math.fraction(1, 2), - math.fraction(1, 2), - math.fraction(1, 4), - math.fraction(1, 4), - math.fraction(1, 4)], - [math.fraction(1, 1), math.fraction(1, 1)]]) - assert.equal(tholder.satisfy([1, 2, 3, 5]), true) - assert.equal(tholder.satisfy([0, 1, 6]), true) - assert.notEqual(tholder.satisfy([0, 1]), true) - assert.notEqual(tholder.satisfy([5, 6]), true) - assert.notEqual(tholder.satisfy([2, 3, 4]), true) - assert.notEqual(tholder.satisfy([]), true) - }) -}) \ No newline at end of file + tholder = new Tholder({ + sith: [ + ['1/2', '1/2', '1/4', '1/4', '1/4'], + ['1/1', '1'], + ], + }); + assert.equal(tholder.weighted, true); + assert.equal(tholder.size, 7); + assert.deepStrictEqual(tholder.sith, [ + ['1/2', '1/2', '1/4', '1/4', '1/4'], + ['1', '1'], + ]); + assert.deepStrictEqual( + tholder.json, + '[["1/2","1/2","1/4","1/4","1/4"],["1","1"]]' + ); + assert.deepStrictEqual(tholder.thold, [ + [ + math.fraction(1, 2), + math.fraction(1, 2), + math.fraction(1, 4), + math.fraction(1, 4), + math.fraction(1, 4), + ], + [math.fraction(1, 1), math.fraction(1, 1)], + ]); + assert.equal(tholder.satisfy([1, 2, 3, 5]), true); + assert.equal(tholder.satisfy([0, 1, 6]), true); + assert.notEqual(tholder.satisfy([0, 1]), true); + assert.notEqual(tholder.satisfy([5, 6]), true); + assert.notEqual(tholder.satisfy([2, 3, 4]), true); + assert.notEqual(tholder.satisfy([]), true); + }); +}); diff --git a/test/core/vdring.test.ts b/test/core/vdring.test.ts index 388377d9..fbee01a1 100644 --- a/test/core/vdring.test.ts +++ b/test/core/vdring.test.ts @@ -1,95 +1,142 @@ -import libsodium from "libsodium-wrappers-sumo"; -import { vdr } from "../../src/keri/core/vdring"; -import { strict as assert } from "assert"; +import libsodium from 'libsodium-wrappers-sumo'; +import { vdr } from '../../src/keri/core/vdring'; +import { strict as assert } from 'assert'; describe('vdr', () => { it('should create registry inception events ', async () => { await libsodium.ready; - let actual = vdr.incept({ pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 0 }); + let actual = vdr.incept({ + pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', + toad: 0, + }); assert.equal(actual.pre.length, 44); - actual = vdr.incept({ pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 0, nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s" }); - assert.equal(actual.pre, "EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS"); - assert.equal(actual.code, "E"); - assert.equal(actual.raw, - '{"v":"KERI10JSON00010f_","t":"vcp","d":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","i":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":[],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}'); + actual = vdr.incept({ + pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', + toad: 0, + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }); + assert.equal( + actual.pre, + 'EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS' + ); + assert.equal(actual.code, 'E'); + assert.equal( + actual.raw, + '{"v":"KERI10JSON00010f_","t":"vcp","d":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","i":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":[],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}' + ); assert.equal(actual.size, 271); }); it('should fail on NB config with backers', async () => { await libsodium.ready; - let cnfg = ["NB"]; - assert.throws(() => { - vdr.incept({ - pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 0, nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s", - cnfg: cnfg, baks: ["a backer"] - }) - }, + let cnfg = ['NB']; + assert.throws( + () => { + vdr.incept({ + pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', + toad: 0, + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + cnfg: cnfg, + baks: ['a backer'], + }); + }, { name: 'Error', message: '1 backers specified for NB vcp, 0 allowed', - }); + } + ); }); it('should fail with duplicate backers', async () => { await libsodium.ready; - assert.throws(() => { - vdr.incept({ - pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 0, nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s", - baks: ["a backer", "a backer"] - }) - }, + assert.throws( + () => { + vdr.incept({ + pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', + toad: 0, + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + baks: ['a backer', 'a backer'], + }); + }, { name: 'Error', message: 'Invalid baks a backer,a backer has duplicates', - }); + } + ); }); - it('should fail with invalid toad config for backers', async () => { await libsodium.ready; - assert.throws(() => { - vdr.incept({ - pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 0, nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s", - baks: ["a backer"] - }) - }, + assert.throws( + () => { + vdr.incept({ + pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', + toad: 0, + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + baks: ['a backer'], + }); + }, { name: 'Error', message: 'Invalid toad 0 for baks in a backer', - }); + } + ); }); it('should fail with invalid toad for no backers', async () => { await libsodium.ready; - assert.throws(() => { - vdr.incept({ pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", toad: 1, nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s" }) - }, + assert.throws( + () => { + vdr.incept({ + pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', + toad: 1, + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }); + }, { name: 'Error', message: 'Invalid toad 1 for no baks', - }); + } + ); }); it('should allow optional toad and no backers', async () => { await libsodium.ready; - let actual = vdr.incept({ pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s" }); + let actual = vdr.incept({ + pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }); - assert.equal(actual.pre, "EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS"); - assert.equal(actual.code, "E"); - assert.equal(actual.raw, - '{"v":"KERI10JSON00010f_","t":"vcp","d":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","i":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":[],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}'); + assert.equal( + actual.pre, + 'EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS' + ); + assert.equal(actual.code, 'E'); + assert.equal( + actual.raw, + '{"v":"KERI10JSON00010f_","t":"vcp","d":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","i":"EDAsrwU75uoh8sii7w-KN-Txy2d0dhHiUP34TQVBJiPS","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":[],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}' + ); assert.equal(actual.size, 271); }); it('should allow optional toad and backers', async () => { await libsodium.ready; - let actual = vdr.incept({ pre: "ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g", nonce: "AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s", baks: ["a backer"]}); + let actual = vdr.incept({ + pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + baks: ['a backer'], + }); - assert.equal(actual.pre, "ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou"); - assert.equal(actual.code, "E"); - assert.equal(actual.raw, - '{"v":"KERI10JSON000119_","t":"vcp","d":"ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou","i":"ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":["a backer"],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}'); + assert.equal( + actual.pre, + 'ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou' + ); + assert.equal(actual.code, 'E'); + assert.equal( + actual.raw, + '{"v":"KERI10JSON000119_","t":"vcp","d":"ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou","i":"ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":["a backer"],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}' + ); assert.equal(actual.size, 281); }); }); diff --git a/test/core/verfer.test.ts b/test/core/verfer.test.ts index f5fabbff..3669e69d 100644 --- a/test/core/verfer.test.ts +++ b/test/core/verfer.test.ts @@ -1,79 +1,88 @@ -import {MtrDex} from "../../src/keri/core/matter"; -import libsodium from "libsodium-wrappers-sumo" -import {strict as assert} from "assert"; +import { MtrDex } from '../../src/keri/core/matter'; +import libsodium from 'libsodium-wrappers-sumo'; +import { strict as assert } from 'assert'; import { Verfer } from '../../src/keri/core/verfer'; -import secp256r1 from "ecdsa-secp256r1" - -function base64ToUint8Array(base64:string) { - var binaryString = atob(base64); - var bytes = new Uint8Array(binaryString.length); - for (var i = 0; i < binaryString.length; i++) { - bytes[i] = binaryString.charCodeAt(i); - } - return new Uint8Array(bytes.buffer); +import secp256r1 from 'ecdsa-secp256r1'; + +function base64ToUint8Array(base64: string) { + var binaryString = atob(base64); + var bytes = new Uint8Array(binaryString.length); + for (var i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return new Uint8Array(bytes.buffer); } - describe('Verfer', () => { - it('should verify digests', async () => { - await libsodium.ready; - let seed = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); - const keypair = libsodium.crypto_sign_seed_keypair(seed); - - let verkey = keypair.publicKey; - let sigkey = keypair.privateKey; - - let verfer = new Verfer({raw: verkey, code: MtrDex.Ed25519N}) - assert.notEqual(verfer, null) - - assert.deepStrictEqual(verfer.raw, verkey); - assert.deepStrictEqual(verfer.code, MtrDex.Ed25519N); - - let ser = 'abcdefghijklmnopqrstuvwxyz0123456789' - - let sig = libsodium.crypto_sign_detached(ser, sigkey) - - assert.equal(verfer.verify(sig, ser), true) - - verfer = new Verfer({qb64: "BGgVB5Aar1pOr70nRpJmRA_RP68HErflNovoEMP7b7mJ"}) - assert.deepStrictEqual(verfer.raw, new Uint8Array([104, 21, 7, 144, 26, 175, 90, 78, 175, 189, 39, 70, 146, - 102, 68, 15, 209, 63, 175, 7, 18, 183, 229, 54, 139, 232, 16, 195, 251, 111, 185, 137])) - }); - it('should verify secp256r1', async () => { - const privateKey = secp256r1.generateKey() - const publicKey = base64ToUint8Array(privateKey.toCompressedPublicKey()) - let verfer = new Verfer({raw: publicKey, code: MtrDex.ECDSA_256r1}) - assert.notEqual(verfer, null) - - assert.deepStrictEqual(verfer.raw, publicKey); - assert.deepStrictEqual(verfer.code, MtrDex.ECDSA_256r1); - - let ser = 'abcdefghijklmnopqrstuvwxyz0123456789' - - let sig = privateKey.sign(ser) - - assert.equal(verfer.verify(sig, ser), true) - - verfer = new Verfer({qb64: "1AAJAwf0oSqmdjPud5gnK6bAPKkBLrXUMQZiOW4Vpc4XpOPf"}) - assert.deepStrictEqual(verfer.raw, new Uint8Array([ - 3, 7, 244, 161, 42, 166, 118, 51, - 238, 119, 152, 39, 43, 166, 192, 60, - 169, 1, 46, 181, 212, 49, 6, 98, - 57, 110, 21, 165, 206, 23, 164, 227, - 223 - ])) - }); - it('should not verify secp256k1', async () => { - - let publicKey = new Uint8Array([ - 2, 79, 93, 30, 107, 249, 254, 237, - 205, 87, 8, 149, 203, 214, 36, 187, - 162, 251, 58, 206, 241, 203, 27, 76, - 236, 37, 189, 148, 240, 178, 204, 133, - 31 - ]) - expect(function(){new Verfer({raw: publicKey, code: MtrDex.ECDSA_256k1})}).toThrow(new Error(`Unsupported code = 1AAB for verifier.`)) - }); + it('should verify digests', async () => { + await libsodium.ready; + let seed = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); + const keypair = libsodium.crypto_sign_seed_keypair(seed); + + let verkey = keypair.publicKey; + let sigkey = keypair.privateKey; + + let verfer = new Verfer({ raw: verkey, code: MtrDex.Ed25519N }); + assert.notEqual(verfer, null); + + assert.deepStrictEqual(verfer.raw, verkey); + assert.deepStrictEqual(verfer.code, MtrDex.Ed25519N); + + let ser = 'abcdefghijklmnopqrstuvwxyz0123456789'; + + let sig = libsodium.crypto_sign_detached(ser, sigkey); + + assert.equal(verfer.verify(sig, ser), true); + + verfer = new Verfer({ + qb64: 'BGgVB5Aar1pOr70nRpJmRA_RP68HErflNovoEMP7b7mJ', + }); + assert.deepStrictEqual( + verfer.raw, + new Uint8Array([ + 104, 21, 7, 144, 26, 175, 90, 78, 175, 189, 39, 70, 146, 102, + 68, 15, 209, 63, 175, 7, 18, 183, 229, 54, 139, 232, 16, 195, + 251, 111, 185, 137, + ]) + ); + }); + it('should verify secp256r1', async () => { + const privateKey = secp256r1.generateKey(); + const publicKey = base64ToUint8Array( + privateKey.toCompressedPublicKey() + ); + let verfer = new Verfer({ raw: publicKey, code: MtrDex.ECDSA_256r1 }); + assert.notEqual(verfer, null); + + assert.deepStrictEqual(verfer.raw, publicKey); + assert.deepStrictEqual(verfer.code, MtrDex.ECDSA_256r1); + + let ser = 'abcdefghijklmnopqrstuvwxyz0123456789'; + + let sig = privateKey.sign(ser); + + assert.equal(verfer.verify(sig, ser), true); + + verfer = new Verfer({ + qb64: '1AAJAwf0oSqmdjPud5gnK6bAPKkBLrXUMQZiOW4Vpc4XpOPf', + }); + assert.deepStrictEqual( + verfer.raw, + new Uint8Array([ + 3, 7, 244, 161, 42, 166, 118, 51, 238, 119, 152, 39, 43, 166, + 192, 60, 169, 1, 46, 181, 212, 49, 6, 98, 57, 110, 21, 165, 206, + 23, 164, 227, 223, + ]) + ); + }); + it('should not verify secp256k1', async () => { + let publicKey = new Uint8Array([ + 2, 79, 93, 30, 107, 249, 254, 237, 205, 87, 8, 149, 203, 214, 36, + 187, 162, 251, 58, 206, 241, 203, 27, 76, 236, 37, 189, 148, 240, + 178, 204, 133, 31, + ]); + expect(function () { + new Verfer({ raw: publicKey, code: MtrDex.ECDSA_256k1 }); + }).toThrow(new Error(`Unsupported code = 1AAB for verifier.`)); + }); }); - - diff --git a/test/end/ending.test.ts b/test/end/ending.test.ts index 5a1db5cc..ae7f971b 100644 --- a/test/end/ending.test.ts +++ b/test/end/ending.test.ts @@ -1,124 +1,160 @@ -import {strict as assert} from "assert"; -import libsodium from "libsodium-wrappers-sumo"; -import {Salter, Tier} from "../../src/keri/core/salter"; -import {b} from "../../src/keri/core/core"; -import {MtrDex} from "../../src/keri/core/matter"; -import {designature, Signage, signature} from "../../src/keri/end/ending"; -import {Siger} from "../../src/keri/core/siger"; -import {Cigar} from "../../src/keri/core/cigar"; - +import { strict as assert } from 'assert'; +import libsodium from 'libsodium-wrappers-sumo'; +import { Salter, Tier } from '../../src/keri/core/salter'; +import { b } from '../../src/keri/core/core'; +import { MtrDex } from '../../src/keri/core/matter'; +import { designature, Signage, signature } from '../../src/keri/end/ending'; +import { Siger } from '../../src/keri/core/siger'; +import { Cigar } from '../../src/keri/core/cigar'; describe('ending_signature_designature', () => { it('should create and parse signature headers', async () => { await libsodium.ready; - let name = "Hilga" - let temp = true - - let salter = new Salter({raw: b('0123456789abcdef')}) - let signer0 = salter.signer(MtrDex.Ed25519_Seed, true, `${name}00`, Tier.low, temp) - let signer1 = salter.signer(MtrDex.Ed25519_Seed, true, `${name}01`, Tier.low, temp) - let signer2 = salter.signer(MtrDex.Ed25519_Seed, true, `${name}02`, Tier.low, temp) - let signers = [signer0, signer1, signer2] - - let text = b('{"seid":"BA89hKezugU2LFKiFVbitoHAxXqJh6HQ8Rn9tH7fxd68","name":"wit0","dts":"2021-01-01T00' + - ':00:00.000000+00:00","scheme":"http","host":"localhost","port":8080,"path":"/witness"}') - - let sigers = Array.from(signers, (signer, idx) => signer.sign(text, idx)) - let pre = "EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-" // Hab.pre from KERIpy test - let digest = pre - - let signage = new Signage(sigers) - let header = signature([signage]) - assert.equal(header.has("Signature"), true) - assert.equal(header.get("Signature"), 'indexed="?1";0="AACsufRGYI-sRvS2c0rsOueSoSRtrjODaf48DYLJbLvvD8aHe7b2sWGebZ-y9ichhsxMF3Hhn-3LYSKIrnmH3oIN";1="ABDs7m2-h5l7vpjYtbFXtksicpZK5Oclm43EOkE2xoQOfr08doj73VrlKZOKNfJmRumD3tfaiFFgVZqPgiHuFVoA";2="ACDVOy2LvGgFINUneL4iwA55ypJR6vDpLLbdleEsiANmFazwZARypJMiw9vu2Iu0oL7XCUiUT4JncU8P3HdIp40F"') - - let signages = designature(header.get("Signature")!) - assert.equal(signages.length, 1) - signage = signages[0] - assert.equal(signage.markers.size, 3) - signage.markers.forEach((item: string|Siger|Cigar, tag: string) => { - let marker = item as Siger - let idx = parseInt(tag) - let siger = sigers[idx] as Siger - assert.equal(marker.qb64, siger.qb64) - assert.equal(parseInt(tag), siger.index) - }) - - signage = new Signage(sigers, true, pre, "0", digest, "CESR") - header = signature([signage]) - assert.equal(header.has("Signature"), true) - assert.equal(header.get("Signature"), 'indexed="?1";signer="EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-";ordinal="0";digest="EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-";kind="CESR";0="AACsufRGYI-sRvS2c0rsOueSoSRtrjODaf48DYLJbLvvD8aHe7b2sWGebZ-y9ichhsxMF3Hhn-3LYSKIrnmH3oIN";1="ABDs7m2-h5l7vpjYtbFXtksicpZK5Oclm43EOkE2xoQOfr08doj73VrlKZOKNfJmRumD3tfaiFFgVZqPgiHuFVoA";2="ACDVOy2LvGgFINUneL4iwA55ypJR6vDpLLbdleEsiANmFazwZARypJMiw9vu2Iu0oL7XCUiUT4JncU8P3HdIp40F"') - - signages = designature(header.get("Signature")!) - assert.equal(signages.length, 1) - signage = signages[0] - assert.equal(signage.indexed, true) - assert.equal(signage.signer, pre) - assert.equal(signage.digest, digest) - assert.equal(signage.kind, "CESR") - - assert.equal(signage.markers.size, 3) - signage.markers.forEach((item: string|Siger|Cigar, tag: string) => { - let marker = item as Siger - let idx = parseInt(tag) - let siger = sigers[idx] as Siger - assert.equal(marker.qb64, siger.qb64) - assert.equal(parseInt(tag), siger.index) - }) - - let cigars = Array.from(signers, (signer) => signer.sign(text)) - signage = new Signage(cigars) - header = signature([signage]) - assert.equal(header.has("Signature"), true) - assert.equal(header.get("Signature"), 'indexed="?0";DAi2TaRNVtGmV8eSUvqHIBzTzIgrQi57vKzw5Svmy7jw="0BCsufRGYI-sRvS2c0rsOueSoSRtrjODaf48DYLJbLvvD8aHe7b2sWGebZ-y9ichhsxMF3Hhn-3LYSKIrnmH3oIN";DNK2KFnL0jUGlmvZHRse7HwNGVdtkM-ORvTZfFw7mDbt="0BDs7m2-h5l7vpjYtbFXtksicpZK5Oclm43EOkE2xoQOfr08doj73VrlKZOKNfJmRumD3tfaiFFgVZqPgiHuFVoA";DDvIoIYqeuXJ4Zb8e2luWfjPTg4FeIzfHzIO8lC56WjD="0BDVOy2LvGgFINUneL4iwA55ypJR6vDpLLbdleEsiANmFazwZARypJMiw9vu2Iu0oL7XCUiUT4JncU8P3HdIp40F"') - signages = designature(header.get("Signature")!) - assert.equal(signages.length, 1) - signage = signages[0] - assert.equal(signage.indexed, false) - assert.equal(signage.markers.size, 3) + let name = 'Hilga'; + let temp = true; + + let salter = new Salter({ raw: b('0123456789abcdef') }); + let signer0 = salter.signer( + MtrDex.Ed25519_Seed, + true, + `${name}00`, + Tier.low, + temp + ); + let signer1 = salter.signer( + MtrDex.Ed25519_Seed, + true, + `${name}01`, + Tier.low, + temp + ); + let signer2 = salter.signer( + MtrDex.Ed25519_Seed, + true, + `${name}02`, + Tier.low, + temp + ); + let signers = [signer0, signer1, signer2]; + + let text = b( + '{"seid":"BA89hKezugU2LFKiFVbitoHAxXqJh6HQ8Rn9tH7fxd68","name":"wit0","dts":"2021-01-01T00' + + ':00:00.000000+00:00","scheme":"http","host":"localhost","port":8080,"path":"/witness"}' + ); + + let sigers = Array.from(signers, (signer, idx) => + signer.sign(text, idx) + ); + let pre = 'EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-'; // Hab.pre from KERIpy test + let digest = pre; + + let signage = new Signage(sigers); + let header = signature([signage]); + assert.equal(header.has('Signature'), true); + assert.equal( + header.get('Signature'), + 'indexed="?1";0="AACsufRGYI-sRvS2c0rsOueSoSRtrjODaf48DYLJbLvvD8aHe7b2sWGebZ-y9ichhsxMF3Hhn-3LYSKIrnmH3oIN";1="ABDs7m2-h5l7vpjYtbFXtksicpZK5Oclm43EOkE2xoQOfr08doj73VrlKZOKNfJmRumD3tfaiFFgVZqPgiHuFVoA";2="ACDVOy2LvGgFINUneL4iwA55ypJR6vDpLLbdleEsiANmFazwZARypJMiw9vu2Iu0oL7XCUiUT4JncU8P3HdIp40F"' + ); + + let signages = designature(header.get('Signature')!); + assert.equal(signages.length, 1); + signage = signages[0]; + assert.equal(signage.markers.size, 3); + signage.markers.forEach((item: string | Siger | Cigar, tag: string) => { + let marker = item as Siger; + let idx = parseInt(tag); + let siger = sigers[idx] as Siger; + assert.equal(marker.qb64, siger.qb64); + assert.equal(parseInt(tag), siger.index); + }); + + signage = new Signage(sigers, true, pre, '0', digest, 'CESR'); + header = signature([signage]); + assert.equal(header.has('Signature'), true); + assert.equal( + header.get('Signature'), + 'indexed="?1";signer="EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-";ordinal="0";digest="EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-";kind="CESR";0="AACsufRGYI-sRvS2c0rsOueSoSRtrjODaf48DYLJbLvvD8aHe7b2sWGebZ-y9ichhsxMF3Hhn-3LYSKIrnmH3oIN";1="ABDs7m2-h5l7vpjYtbFXtksicpZK5Oclm43EOkE2xoQOfr08doj73VrlKZOKNfJmRumD3tfaiFFgVZqPgiHuFVoA";2="ACDVOy2LvGgFINUneL4iwA55ypJR6vDpLLbdleEsiANmFazwZARypJMiw9vu2Iu0oL7XCUiUT4JncU8P3HdIp40F"' + ); + + signages = designature(header.get('Signature')!); + assert.equal(signages.length, 1); + signage = signages[0]; + assert.equal(signage.indexed, true); + assert.equal(signage.signer, pre); + assert.equal(signage.digest, digest); + assert.equal(signage.kind, 'CESR'); + + assert.equal(signage.markers.size, 3); + signage.markers.forEach((item: string | Siger | Cigar, tag: string) => { + let marker = item as Siger; + let idx = parseInt(tag); + let siger = sigers[idx] as Siger; + assert.equal(marker.qb64, siger.qb64); + assert.equal(parseInt(tag), siger.index); + }); + + let cigars = Array.from(signers, (signer) => signer.sign(text)); + signage = new Signage(cigars); + header = signature([signage]); + assert.equal(header.has('Signature'), true); + assert.equal( + header.get('Signature'), + 'indexed="?0";DAi2TaRNVtGmV8eSUvqHIBzTzIgrQi57vKzw5Svmy7jw="0BCsufRGYI-sRvS2c0rsOueSoSRtrjODaf48DYLJbLvvD8aHe7b2sWGebZ-y9ichhsxMF3Hhn-3LYSKIrnmH3oIN";DNK2KFnL0jUGlmvZHRse7HwNGVdtkM-ORvTZfFw7mDbt="0BDs7m2-h5l7vpjYtbFXtksicpZK5Oclm43EOkE2xoQOfr08doj73VrlKZOKNfJmRumD3tfaiFFgVZqPgiHuFVoA";DDvIoIYqeuXJ4Zb8e2luWfjPTg4FeIzfHzIO8lC56WjD="0BDVOy2LvGgFINUneL4iwA55ypJR6vDpLLbdleEsiANmFazwZARypJMiw9vu2Iu0oL7XCUiUT4JncU8P3HdIp40F"' + ); + signages = designature(header.get('Signature')!); + assert.equal(signages.length, 1); + signage = signages[0]; + assert.equal(signage.indexed, false); + assert.equal(signage.markers.size, 3); signage.markers.forEach((marker: Cigar, tag: string) => { - let cigar = cigars.find((cigar) => cigar.verfer!.qb64 == tag) - assert.notEqual(cigar, undefined) - assert.equal(marker.qb64, cigar!.qb64) - assert.equal(tag, cigar!.verfer!.qb64) - }) + let cigar = cigars.find((cigar) => cigar.verfer!.qb64 == tag); + assert.notEqual(cigar, undefined); + assert.equal(marker.qb64, cigar!.qb64); + assert.equal(tag, cigar!.verfer!.qb64); + }); // now combine into one header - signages = new Array() - signages.push(new Signage(sigers, true, pre, undefined, undefined, "CESR")) - signages.push(new Signage(cigars, false, pre, undefined, undefined, "CESR")) - - header = signature(signages) - assert.equal(header.has("Signature"), true) - assert.equal(header.get("Signature"), 'indexed="?1";signer="EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-";kind="CESR";0="AACsufRGYI-sRvS2c0rsOueSoSRtrjODaf48DYLJbLvvD8aHe7b2sWGebZ-y9ichhsxMF3Hhn-3LYSKIrnmH3oIN";1="ABDs7m2-h5l7vpjYtbFXtksicpZK5Oclm43EOkE2xoQOfr08doj73VrlKZOKNfJmRumD3tfaiFFgVZqPgiHuFVoA";2="ACDVOy2LvGgFINUneL4iwA55ypJR6vDpLLbdleEsiANmFazwZARypJMiw9vu2Iu0oL7XCUiUT4JncU8P3HdIp40F",indexed="?0";signer="EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-";kind="CESR";DAi2TaRNVtGmV8eSUvqHIBzTzIgrQi57vKzw5Svmy7jw="0BCsufRGYI-sRvS2c0rsOueSoSRtrjODaf48DYLJbLvvD8aHe7b2sWGebZ-y9ichhsxMF3Hhn-3LYSKIrnmH3oIN";DNK2KFnL0jUGlmvZHRse7HwNGVdtkM-ORvTZfFw7mDbt="0BDs7m2-h5l7vpjYtbFXtksicpZK5Oclm43EOkE2xoQOfr08doj73VrlKZOKNfJmRumD3tfaiFFgVZqPgiHuFVoA";DDvIoIYqeuXJ4Zb8e2luWfjPTg4FeIzfHzIO8lC56WjD="0BDVOy2LvGgFINUneL4iwA55ypJR6vDpLLbdleEsiANmFazwZARypJMiw9vu2Iu0oL7XCUiUT4JncU8P3HdIp40F"') - signages = designature(header.get("Signature")!) - assert.equal(signages.length, 2) - - signage = signages[0] - assert.equal(signage.indexed, true) - assert.equal(signage.signer, pre) - assert.equal(signage.kind, "CESR") - assert.equal(signage.markers.size, 3) - signage.markers.forEach((item: string|Siger|Cigar, tag: string) => { - let marker = item as Siger - let idx = parseInt(tag) - let siger = sigers[idx] as Siger - assert.equal(marker.qb64, siger.qb64) - assert.equal(parseInt(tag), siger.index) - }) - - signage = signages[1] - assert.equal(signage.indexed, false) - assert.equal(signage.signer, pre) - assert.equal(signage.kind, "CESR") - assert.equal(signage.markers.size, 3) + signages = new Array(); + signages.push( + new Signage(sigers, true, pre, undefined, undefined, 'CESR') + ); + signages.push( + new Signage(cigars, false, pre, undefined, undefined, 'CESR') + ); + + header = signature(signages); + assert.equal(header.has('Signature'), true); + assert.equal( + header.get('Signature'), + 'indexed="?1";signer="EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-";kind="CESR";0="AACsufRGYI-sRvS2c0rsOueSoSRtrjODaf48DYLJbLvvD8aHe7b2sWGebZ-y9ichhsxMF3Hhn-3LYSKIrnmH3oIN";1="ABDs7m2-h5l7vpjYtbFXtksicpZK5Oclm43EOkE2xoQOfr08doj73VrlKZOKNfJmRumD3tfaiFFgVZqPgiHuFVoA";2="ACDVOy2LvGgFINUneL4iwA55ypJR6vDpLLbdleEsiANmFazwZARypJMiw9vu2Iu0oL7XCUiUT4JncU8P3HdIp40F",indexed="?0";signer="EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-";kind="CESR";DAi2TaRNVtGmV8eSUvqHIBzTzIgrQi57vKzw5Svmy7jw="0BCsufRGYI-sRvS2c0rsOueSoSRtrjODaf48DYLJbLvvD8aHe7b2sWGebZ-y9ichhsxMF3Hhn-3LYSKIrnmH3oIN";DNK2KFnL0jUGlmvZHRse7HwNGVdtkM-ORvTZfFw7mDbt="0BDs7m2-h5l7vpjYtbFXtksicpZK5Oclm43EOkE2xoQOfr08doj73VrlKZOKNfJmRumD3tfaiFFgVZqPgiHuFVoA";DDvIoIYqeuXJ4Zb8e2luWfjPTg4FeIzfHzIO8lC56WjD="0BDVOy2LvGgFINUneL4iwA55ypJR6vDpLLbdleEsiANmFazwZARypJMiw9vu2Iu0oL7XCUiUT4JncU8P3HdIp40F"' + ); + signages = designature(header.get('Signature')!); + assert.equal(signages.length, 2); + + signage = signages[0]; + assert.equal(signage.indexed, true); + assert.equal(signage.signer, pre); + assert.equal(signage.kind, 'CESR'); + assert.equal(signage.markers.size, 3); + signage.markers.forEach((item: string | Siger | Cigar, tag: string) => { + let marker = item as Siger; + let idx = parseInt(tag); + let siger = sigers[idx] as Siger; + assert.equal(marker.qb64, siger.qb64); + assert.equal(parseInt(tag), siger.index); + }); + + signage = signages[1]; + assert.equal(signage.indexed, false); + assert.equal(signage.signer, pre); + assert.equal(signage.kind, 'CESR'); + assert.equal(signage.markers.size, 3); signage.markers.forEach((marker: Cigar, tag: string) => { - let cigar = cigars.find((cigar) => cigar.verfer!.qb64 == tag) - assert.notEqual(cigar, undefined) - assert.equal(marker.qb64, cigar!.qb64) - assert.equal(tag, cigar!.verfer!.qb64) - }) - - }) -}) \ No newline at end of file + let cigar = cigars.find((cigar) => cigar.verfer!.qb64 == tag); + assert.notEqual(cigar, undefined); + assert.equal(marker.qb64, cigar!.qb64); + assert.equal(tag, cigar!.verfer!.qb64); + }); + }); +}); From 90324e26415d13d2f61c4aeb6f2553e61dad7ddb Mon Sep 17 00:00:00 2001 From: Kevin Griffin Date: Fri, 6 Oct 2023 13:31:41 -0400 Subject: [PATCH 064/186] fixes pretty branch Signed-off-by: Kevin Griffin --- .../bip39_shim/src/bip39_shim.ts | 193 ++++++++++-------- examples/integration-scripts/credentials.ts | 6 +- .../integration-scripts/externalModule.ts | 63 +++--- examples/integration-scripts/multisig.ts | 66 +++--- examples/integration-scripts/randy.ts | 20 +- examples/integration-scripts/salty.ts | 122 +++++++---- src/keri/app/aiding.ts | 152 +++++++------- src/keri/app/clienting.ts | 68 +++--- src/keri/app/credentialing.ts | 63 ++++-- src/keri/app/exchanging.ts | 45 +++- src/keri/core/indexer.ts | 83 ++------ src/keri/core/keeping.ts | 90 +++----- src/keri/core/manager.ts | 8 +- test/app/aiding.test.ts | 26 +-- 14 files changed, 532 insertions(+), 473 deletions(-) diff --git a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts index f4524ee0..b9ef7d59 100644 --- a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts +++ b/examples/integration-scripts/bip39_shim/src/bip39_shim.ts @@ -1,113 +1,146 @@ -import bip39 from 'bip39' -import { Diger, Signer, MtrDex} from 'signify-ts'; +import bip39 from 'bip39'; +import { Diger, Signer, MtrDex } from 'signify-ts'; export class BIP39Shim { - - private icount:number - private ncount:number - private dcode:string | undefined - private pidx: number = 0 - private kidx: number = 0 - private transferable:boolean - private stem: string - private mnemonics: string = "" - - constructor(pidx:number, kargs:any ) { - this.icount = kargs.icount??1 - this.ncount = kargs.ncount??1 - this.pidx = pidx - this.kidx = kargs.kidx??0 - this.transferable = kargs.transferable??true - this.stem = kargs.stem?? "bip39_shim" - if (kargs.extern != undefined && kargs.extern.mnemonics != undefined){ - this.mnemonics = kargs.extern.mnemonics + private icount: number; + private ncount: number; + private dcode: string | undefined; + private pidx: number = 0; + private kidx: number = 0; + private transferable: boolean; + private stem: string; + private mnemonics: string = ''; + + constructor(pidx: number, kargs: any) { + this.icount = kargs.icount ?? 1; + this.ncount = kargs.ncount ?? 1; + this.pidx = pidx; + this.kidx = kargs.kidx ?? 0; + this.transferable = kargs.transferable ?? true; + this.stem = kargs.stem ?? 'bip39_shim'; + if (kargs.extern != undefined && kargs.extern.mnemonics != undefined) { + this.mnemonics = kargs.extern.mnemonics; } - this.dcode = kargs.dcode + this.dcode = kargs.dcode; } - params(){ + params() { return { pidx: this.pidx, kidx: this.kidx, - mnemonics: this.mnemonics - } + mnemonics: this.mnemonics, + }; } - keys(count:number, kidx:number, transferable:boolean){ - let keys = [] + keys(count: number, kidx: number, transferable: boolean) { + let keys = []; for (let idx = 0; idx < count; idx++) { - let keyId = `${this.stem}-${this.pidx}-${kidx + idx}` + let keyId = `${this.stem}-${this.pidx}-${kidx + idx}`; let seed = bip39.mnemonicToSeedSync(this.mnemonics, keyId); - let signer = new Signer({raw: new Uint8Array(seed), code: MtrDex.Ed25519_Seed, transferable: transferable}) - keys.push(signer) + let signer = new Signer({ + raw: new Uint8Array(seed), + code: MtrDex.Ed25519_Seed, + transferable: transferable, + }); + keys.push(signer); } - return keys + return keys; } - incept(transferable:boolean){ - - let signers = this.keys(this.icount, this.kidx, transferable) - let verfers = signers.map(signer => signer.verfer.qb64); - - let nsigners = this.keys(this.ncount, this.kidx + this.icount, transferable) - let digers = nsigners.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); - return [verfers, digers] + incept(transferable: boolean) { + let signers = this.keys(this.icount, this.kidx, transferable); + let verfers = signers.map((signer) => signer.verfer.qb64); + + let nsigners = this.keys( + this.ncount, + this.kidx + this.icount, + transferable + ); + let digers = nsigners.map( + (nsigner) => + new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 + ); + return [verfers, digers]; } - rotate(ncount:number, transferable:boolean){ - let signers = this.keys(this.ncount, this.kidx + this.icount, transferable) - let verfers = signers.map(signer => signer.verfer.qb64); - - this.kidx = this.kidx + this.icount - this.icount = this.ncount - this.ncount = ncount - - let nsigners = this.keys(this.ncount, this.kidx + this.icount, this.transferable) - let digers = nsigners.map(nsigner => new Diger({code: this.dcode},nsigner.verfer.qb64b ).qb64); - - return [verfers, digers] + rotate(ncount: number, transferable: boolean) { + let signers = this.keys( + this.ncount, + this.kidx + this.icount, + transferable + ); + let verfers = signers.map((signer) => signer.verfer.qb64); + + this.kidx = this.kidx + this.icount; + this.icount = this.ncount; + this.ncount = ncount; + + let nsigners = this.keys( + this.ncount, + this.kidx + this.icount, + this.transferable + ); + let digers = nsigners.map( + (nsigner) => + new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 + ); + + return [verfers, digers]; } - sign(ser: Uint8Array, indexed=true, indices:number[]|undefined=undefined, ondices:number[]|undefined=undefined){ - - let signers = this.keys(this.icount, this.kidx, this.transferable) - - if (indexed){ - let sigers = [] - let i = 0 + sign( + ser: Uint8Array, + indexed = true, + indices: number[] | undefined = undefined, + ondices: number[] | undefined = undefined + ) { + let signers = this.keys(this.icount, this.kidx, this.transferable); + + if (indexed) { + let sigers = []; + let i = 0; for (const [j, signer] of signers.entries()) { - if (indices!= undefined){ - i = indices![j] - if (typeof i != "number" || i < 0){ - throw new Error(`Invalid signing index = ${i}, not whole number.`) + if (indices != undefined) { + i = indices![j]; + if (typeof i != 'number' || i < 0) { + throw new Error( + `Invalid signing index = ${i}, not whole number.` + ); } } else { - i = j + i = j; } - let o = 0 - if (ondices!=undefined){ - o = ondices![j] - if ((o == undefined || typeof o == "number" && typeof o != "number" && o>=0)!) { - throw new Error(`Invalid ondex = ${o}, not whole number.`) + let o = 0; + if (ondices != undefined) { + o = ondices![j]; + if ( + (o == undefined || + (typeof o == 'number' && + typeof o != 'number' && + o >= 0))! + ) { + throw new Error( + `Invalid ondex = ${o}, not whole number.` + ); } } else { - o = i + o = i; } - sigers.push(signer.sign(ser, i, o==undefined?true:false, o)) - } - return sigers.map(siger => siger.qb64); + sigers.push( + signer.sign(ser, i, o == undefined ? true : false, o) + ); + } + return sigers.map((siger) => siger.qb64); } else { - let cigars = [] + let cigars = []; for (const [_, signer] of signers.entries()) { - cigars.push(signer.sign(ser)) + cigars.push(signer.sign(ser)); } - return cigars.map(cigar => cigar.qb64); + return cigars.map((cigar) => cigar.qb64); } - } - generateMnemonic(strength:number){ - return bip39.generateMnemonic(strength) + generateMnemonic(strength: number) { + return bip39.generateMnemonic(strength); } - -} \ No newline at end of file +} diff --git a/examples/integration-scripts/credentials.ts b/examples/integration-scripts/credentials.ts index 0e404ec8..a23a4e53 100644 --- a/examples/integration-scripts/credentials.ts +++ b/examples/integration-scripts/credentials.ts @@ -59,7 +59,7 @@ async function run() { ); // Create two identifiers, one for each client - let icpResult1 = await client1.identifiers().create('issuer', { + let icpResult1 = await client1.identifiers().create('issuer', { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -177,7 +177,9 @@ async function run() { console.log('Verifier resolved 3 OOBIs'); // Create registry for issuer - op1 = await client1.registries().create('issuer', 'vLEI'); + op1 = await client1 + .registries() + .create({ name: 'issuer', registryName: 'vLEI' }); while (!op1['done']) { op1 = await client1.operations().get(op1.name); await new Promise((resolve) => setTimeout(resolve, 1000)); diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts index 03c0e012..4329e6b0 100644 --- a/examples/integration-scripts/externalModule.ts +++ b/examples/integration-scripts/externalModule.ts @@ -1,27 +1,44 @@ -import { strict as assert } from "assert" -import signify from "signify-ts" -import {BIP39Shim} from './bip39_shim/src/bip39_shim.ts' +import { strict as assert } from 'assert'; +import signify from 'signify-ts'; +import { BIP39Shim } from './bip39_shim/src/bip39_shim.ts'; -const url = "http://127.0.0.1:3901" -const boot_url = "http://127.0.0.1:3903" +const url = 'http://127.0.0.1:3901'; +const boot_url = 'http://127.0.0.1:3903'; -await run() +await run(); async function run() { - await signify.ready() - const bran1 = signify.randomPasscode() - const externalModule:signify.ExternalModule = { - type: "bip39_shim", - name: "bip39_shim", - module: BIP39Shim - } - const client1 = new signify.SignifyClient(url, bran1, signify.Tier.low, boot_url,[externalModule]); - await client1.boot() - await client1.connect() - const state1 = await client1.state() - console.log("Client 1 connected. Client AID:",state1.controller.state.i,"Agent AID: ", state1.agent.i) - let words = new BIP39Shim(0,{}).generateMnemonic(256) - let icpResult = await client1.identifiers().create('aid1', {algo: signify.Algos.extern, extern_type:"bip39_shim", extern:{mnemonics: words}}) - let op = await icpResult.op() - assert.equal(op['done'], true) -} \ No newline at end of file + await signify.ready(); + const bran1 = signify.randomPasscode(); + const externalModule: signify.ExternalModule = { + type: 'bip39_shim', + name: 'bip39_shim', + module: BIP39Shim, + }; + const client1 = new signify.SignifyClient( + url, + bran1, + signify.Tier.low, + boot_url, + [externalModule] + ); + await client1.boot(); + await client1.connect(); + const state1 = await client1.state(); + console.log( + 'Client 1 connected. Client AID:', + state1.controller.state.i, + 'Agent AID: ', + state1.agent.i + ); + let words = new BIP39Shim(0, {}).generateMnemonic(256); + let icpResult = await client1 + .identifiers() + .create('aid1', { + algo: signify.Algos.extern, + extern_type: 'bip39_shim', + extern: { mnemonics: words }, + }); + let op = await icpResult.op(); + assert.equal(op['done'], true); +} diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index a15becf7..99e97d29 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -59,7 +59,7 @@ async function run() { ); // Create three identifiers, one for each client - let icpResult1 = await client1.identifiers().create('member1', { + let icpResult1 = await client1.identifiers().create('member1', { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -78,7 +78,7 @@ async function run() { .addEndRole('member1', 'agent', client1!.agent!.pre); console.log("Member1's AID:", aid1.prefix); - let icpResult2 = await client2.identifiers().create('member2', { + let icpResult2 = await client2.identifiers().create('member2', { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -97,7 +97,7 @@ async function run() { .addEndRole('member2', 'agent', client2!.agent!.pre); console.log("Member2's AID:", aid2.prefix); - let icpResult3 = await client3.identifiers().create('member3', { + let icpResult3 = await client3.identifiers().create('member3', { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -195,9 +195,9 @@ async function run() { console.log('Member1 marked challenge response as accepted'); // First member start the creation of a multisig identifier - let rstates = [aid1["state"], aid2["state"], aid3["state"]] - let states = rstates - icpResult1 = await client1.identifiers().create("multisig",{ + let rstates = [aid1['state'], aid2['state'], aid3['state']]; + let states = rstates; + icpResult1 = await client1.identifiers().create('multisig', { algo: signify.Algos.group, mhab: aid1, isith: 3, @@ -255,11 +255,11 @@ async function run() { await new Promise((resolve) => setTimeout(resolve, 1000)); } - let res = await client2.groups().getRequest(msgSaid) - let exn = res[0].exn - let icp = exn.e.icp - - icpResult2 = await client2.identifiers().create("multisig",{ + let res = await client2.groups().getRequest(msgSaid); + let exn = res[0].exn; + let icp = exn.e.icp; + + icpResult2 = await client2.identifiers().create('multisig', { algo: signify.Algos.group, mhab: aid2, isith: icp.kt, @@ -312,10 +312,10 @@ async function run() { await new Promise((resolve) => setTimeout(resolve, 1000)); } - res = await client3.groups().getRequest(msgSaid) - exn = res[0].exn - icp = exn.e.icp - icpResult3 = await client3.identifiers().create("multisig",{ + res = await client3.groups().getRequest(msgSaid); + exn = res[0].exn; + icp = exn.e.icp; + icpResult3 = await client3.identifiers().create('multisig', { algo: signify.Algos.group, mhab: aid3, isith: icp.kt, @@ -769,13 +769,11 @@ async function run() { console.log('Starting multisig registry creation'); - let vcpRes1 = await client1 - .registries() - .create({ - name: 'member1', - registryName: 'vLEI Registry', - nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', - }); + let vcpRes1 = await client1.registries().create({ + name: 'member1', + registryName: 'vLEI Registry', + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }); op1 = await vcpRes1.op(); serder = vcpRes1.regser; let anc = vcpRes1.serder; @@ -825,13 +823,11 @@ async function run() { res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; - let vcpRes2 = await client2 - .registries() - .create({ - name: 'member2', - registryName: 'vLEI Registry', - nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', - }); + let vcpRes2 = await client2.registries().create({ + name: 'member2', + registryName: 'vLEI Registry', + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }); op2 = await vcpRes2.op(); serder = vcpRes2.regser; anc = vcpRes2.serder; @@ -880,13 +876,11 @@ async function run() { res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; - let vcpRes3 = await client3 - .registries() - .create({ - name: 'member3', - registryName: 'vLEI Registry', - nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', - }); + let vcpRes3 = await client3.registries().create({ + name: 'member3', + registryName: 'vLEI Registry', + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }); op3 = await vcpRes3.op(); serder = vcpRes2.regser; anc = vcpRes2.serder; diff --git a/examples/integration-scripts/randy.ts b/examples/integration-scripts/randy.ts index d42cad80..5c925e85 100644 --- a/examples/integration-scripts/randy.ts +++ b/examples/integration-scripts/randy.ts @@ -26,15 +26,17 @@ async function run() { state1.agent.i ); - let icpResult = await client1.identifiers().create('aid1', {algo: signify.Algos.randy}) - let op = await icpResult.op() - assert.equal(op['done'], true) - let aid = op['response'] - const icp = new signify.Serder(aid) - assert.equal(icp.verfers.length, 1) - assert.equal(icp.digers.length, 1) - assert.equal(icp.ked['kt'], '1') - assert.equal(icp.ked['nt'], '1') + let icpResult = await client1 + .identifiers() + .create('aid1', { algo: signify.Algos.randy }); + let op = await icpResult.op(); + assert.equal(op['done'], true); + let aid = op['response']; + const icp = new signify.Serder(aid); + assert.equal(icp.verfers.length, 1); + assert.equal(icp.digers.length, 1); + assert.equal(icp.ked['kt'], '1'); + assert.equal(icp.ked['nt'], '1'); let aids = await client1.identifiers().list(); assert.equal(aids.aids.length, 1); diff --git a/examples/integration-scripts/salty.ts b/examples/integration-scripts/salty.ts index 73724ea9..e25bb563 100644 --- a/examples/integration-scripts/salty.ts +++ b/examples/integration-scripts/salty.ts @@ -26,51 +26,85 @@ async function run() { state1.agent.i ); - let icpResult = await client1.identifiers().create('aid1', {bran: '0123456789abcdefghijk'}) - let op = await icpResult.op() - assert.equal(op['done'], true) - const aid1 = op['response'] - const icp = new signify.Serder(aid1) - assert.equal(icp.pre, 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK') - assert.equal(icp.verfers.length, 1) - assert.equal(icp.verfers[0].qb64, 'DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9') - assert.equal(icp.digers.length, 1) - assert.equal(icp.digers[0].qb64, 'EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc') - assert.equal(icp.ked['kt'], '1') - assert.equal(icp.ked['nt'], '1') - let aids = await client1.identifiers().list() - assert.equal(aids.aids.length, 1) - let aid = aids.aids.pop() - assert.equal(aid.name, 'aid1') - let salt = aid.salty - assert.equal(salt.pidx, 0) - assert.equal(salt.stem, 'signify:aid') - assert.equal(aid.prefix, icp.pre) + let icpResult = await client1 + .identifiers() + .create('aid1', { bran: '0123456789abcdefghijk' }); + let op = await icpResult.op(); + assert.equal(op['done'], true); + const aid1 = op['response']; + const icp = new signify.Serder(aid1); + assert.equal(icp.pre, 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK'); + assert.equal(icp.verfers.length, 1); + assert.equal( + icp.verfers[0].qb64, + 'DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9' + ); + assert.equal(icp.digers.length, 1); + assert.equal( + icp.digers[0].qb64, + 'EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc' + ); + assert.equal(icp.ked['kt'], '1'); + assert.equal(icp.ked['nt'], '1'); + let aids = await client1.identifiers().list(); + assert.equal(aids.aids.length, 1); + let aid = aids.aids.pop(); + assert.equal(aid.name, 'aid1'); + let salt = aid.salty; + assert.equal(salt.pidx, 0); + assert.equal(salt.stem, 'signify:aid'); + assert.equal(aid.prefix, icp.pre); - icpResult = await client1.identifiers().create('aid2', {count:3, ncount:3, isith:"2", nsith:"2", bran:"0123456789lmnopqrstuv"}) - op = await icpResult.op() - assert.equal(op['done'], true) - const aid2 = op['response'] - const icp2 = new signify.Serder(aid2) - assert.equal(icp2.pre,'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX') - assert.equal(icp2.verfers.length, 3) - assert.equal(icp2.verfers[0].qb64, 'DGBw7C7AfC7jbD3jLLRS3SzIWFndM947TyNWKQ52iQx5') - assert.equal(icp2.verfers[1].qb64, 'DD_bHYFsgWXuCbz3SD0HjCIe_ITjRvEoCGuZ4PcNFFDz') - assert.equal(icp2.verfers[2].qb64, 'DEe9u8k0fm1wMFAuOIsCtCNrpduoaV5R21rAcJl0awze') - assert.equal(icp2.digers.length, 3) - assert.equal(icp2.digers[0].qb64, 'EML5FrjCpz8SEl4dh0U15l8bMRhV_O5iDcR1opLJGBSH') - assert.equal(icp2.digers[1].qb64, 'EJpKquuibYTqpwMDqEFAFs0gwq0PASAHZ_iDmSF3I2Vg') - assert.equal(icp2.digers[2].qb64, 'ELplTAiEKdobFhlf-dh1vUb2iVDW0dYOSzs1dR7fQo60') - assert.equal(icp2.ked['kt'], '2') - assert.equal(icp2.ked['nt'], '2') - aids = await client1.identifiers().list() - assert.equal(aids.aids.length, 2) - aid = aids.aids[1] - assert.equal(aid.name, 'aid2') - salt = aid.salty - assert.equal(salt.pidx, 1) - assert.equal(salt.stem, 'signify:aid') - assert.equal(aid.prefix, icp2.pre) + icpResult = await client1 + .identifiers() + .create('aid2', { + count: 3, + ncount: 3, + isith: '2', + nsith: '2', + bran: '0123456789lmnopqrstuv', + }); + op = await icpResult.op(); + assert.equal(op['done'], true); + const aid2 = op['response']; + const icp2 = new signify.Serder(aid2); + assert.equal(icp2.pre, 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX'); + assert.equal(icp2.verfers.length, 3); + assert.equal( + icp2.verfers[0].qb64, + 'DGBw7C7AfC7jbD3jLLRS3SzIWFndM947TyNWKQ52iQx5' + ); + assert.equal( + icp2.verfers[1].qb64, + 'DD_bHYFsgWXuCbz3SD0HjCIe_ITjRvEoCGuZ4PcNFFDz' + ); + assert.equal( + icp2.verfers[2].qb64, + 'DEe9u8k0fm1wMFAuOIsCtCNrpduoaV5R21rAcJl0awze' + ); + assert.equal(icp2.digers.length, 3); + assert.equal( + icp2.digers[0].qb64, + 'EML5FrjCpz8SEl4dh0U15l8bMRhV_O5iDcR1opLJGBSH' + ); + assert.equal( + icp2.digers[1].qb64, + 'EJpKquuibYTqpwMDqEFAFs0gwq0PASAHZ_iDmSF3I2Vg' + ); + assert.equal( + icp2.digers[2].qb64, + 'ELplTAiEKdobFhlf-dh1vUb2iVDW0dYOSzs1dR7fQo60' + ); + assert.equal(icp2.ked['kt'], '2'); + assert.equal(icp2.ked['nt'], '2'); + aids = await client1.identifiers().list(); + assert.equal(aids.aids.length, 2); + aid = aids.aids[1]; + assert.equal(aid.name, 'aid2'); + salt = aid.salty; + assert.equal(salt.pidx, 1); + assert.equal(salt.stem, 'signify:aid'); + assert.equal(aid.prefix, icp2.pre); await client1.identifiers().create('aid3'); aids = await client1.identifiers().list(); diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index 16bdf3f1..09e95de9 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -10,30 +10,30 @@ import { parseRangeHeaders } from '../core/httping'; /** Arguments required to create an identfier */ export interface CreateIdentiferArgs { - transferable?: boolean, - isith?: string | number | string[], - nsith?: string | number | string[], - wits?: string[], - toad?: number, - proxy?: string, - delpre?: string, - dcode?: string, - data?: any, - algo?: Algos, - pre?: string, - states?: any[], - rstates?: any[] - prxs?: any[], - nxts?: any[], - mhab?: any, - keys?: any[], - ndigs?: any[], - bran?: string, - count?: number, - ncount?: number, - tier?: Tier, - extern_type?: string, - extern?: any + transferable?: boolean; + isith?: string | number | string[]; + nsith?: string | number | string[]; + wits?: string[]; + toad?: number; + proxy?: string; + delpre?: string; + dcode?: string; + data?: any; + algo?: Algos; + pre?: string; + states?: any[]; + rstates?: any[]; + prxs?: any[]; + nxts?: any[]; + mhab?: any; + keys?: any[]; + ndigs?: any[]; + bran?: string; + count?: number; + ncount?: number; + tier?: Tier; + extern_type?: string; + extern?: any; } /** Arguments required to rotate an identfier */ @@ -111,33 +111,35 @@ export class Identifier { * @param {CreateIdentiferArgs} [kargs] Optional parameters to create the identifier * @returns {EventResult} The inception result */ - async create(name: string, kargs:CreateIdentiferArgs={}): Promise { - - const algo = kargs.algo == undefined ? Algos.salty : kargs.algo - - let transferable = kargs.transferable ?? true - let isith = kargs.isith ?? "1" - let nsith = kargs.nsith ?? "1" - let wits = kargs.wits ?? [] - let toad = kargs.toad ?? 0 - let dcode = kargs.dcode ?? MtrDex.Blake3_256 - let proxy = kargs.proxy - let delpre = kargs.delpre - let data = kargs.data != undefined ? [kargs.data] : [] - let pre = kargs.pre - let states = kargs.states - let rstates = kargs.rstates - let prxs = kargs.prxs - let nxts = kargs.nxts - let mhab = kargs.mhab - let _keys = kargs.keys - let _ndigs = kargs.ndigs - let bran = kargs.bran - let count = kargs.count - let ncount = kargs.ncount - let tier = kargs.tier - let extern_type = kargs.extern_type - let extern = kargs.extern + async create( + name: string, + kargs: CreateIdentiferArgs = {} + ): Promise { + const algo = kargs.algo == undefined ? Algos.salty : kargs.algo; + + let transferable = kargs.transferable ?? true; + let isith = kargs.isith ?? '1'; + let nsith = kargs.nsith ?? '1'; + let wits = kargs.wits ?? []; + let toad = kargs.toad ?? 0; + let dcode = kargs.dcode ?? MtrDex.Blake3_256; + let proxy = kargs.proxy; + let delpre = kargs.delpre; + let data = kargs.data != undefined ? [kargs.data] : []; + let pre = kargs.pre; + let states = kargs.states; + let rstates = kargs.rstates; + let prxs = kargs.prxs; + let nxts = kargs.nxts; + let mhab = kargs.mhab; + let _keys = kargs.keys; + let _ndigs = kargs.ndigs; + let bran = kargs.bran; + let count = kargs.count; + let ncount = kargs.ncount; + let tier = kargs.tier; + let extern_type = kargs.extern_type; + let extern = kargs.extern; let xargs = { transferable: transferable, @@ -163,13 +165,13 @@ export class Identifier { ncount: ncount, tier: tier, extern_type: extern_type, - extern: extern - } + extern: extern, + }; - let keeper = this.client.manager!.new(algo, this.client.pidx, xargs) - let [keys, ndigs] = await keeper!.incept(transferable) - wits = wits !== undefined ? wits : [] - let serder: Serder|undefined = undefined + let keeper = this.client.manager!.new(algo, this.client.pidx, xargs); + let [keys, ndigs] = await keeper!.incept(transferable); + wits = wits !== undefined ? wits : []; + let serder: Serder | undefined = undefined; if (delpre == undefined) { serder = incept({ keys: keys!, @@ -203,7 +205,7 @@ export class Identifier { }); } - let sigs = await keeper!.sign(b(serder.raw)) + let sigs = await keeper!.sign(b(serder.raw)); var jsondata: any = { name: name, icp: serder.ked, @@ -242,11 +244,18 @@ export class Identifier { data = Array.isArray(data) ? data : [data]; - data = Array.isArray(data) ? data : [data] + data = Array.isArray(data) ? data : [data]; - let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) - let keeper = this.client!.manager!.get(hab) - let sigs = await keeper.sign(b(serder.raw)) + let serder = interact({ + pre: pre, + sn: sn + 1, + data: data, + dig: dig, + version: undefined, + kind: undefined, + }); + let keeper = this.client!.manager!.get(hab); + let sigs = await keeper.sign(b(serder.raw)); let jsondata: any = { ixn: serder.ked, @@ -304,9 +313,14 @@ export class Identifier { // Create new keys for next digests let ncodes = kargs.ncodes ?? new Array(ncount).fill(ncode); - let states = kargs.states == undefined? [] : kargs.states - let rstates = kargs.rstates == undefined? [] : kargs.rstates - let [keys, ndigs] = await keeper!.rotate(ncodes, transferable, states, rstates) + let states = kargs.states == undefined ? [] : kargs.states; + let rstates = kargs.rstates == undefined ? [] : kargs.rstates; + let [keys, ndigs] = await keeper!.rotate( + ncodes, + transferable, + states, + rstates + ); let cuts = kargs.cuts ?? []; let adds = kargs.adds ?? []; @@ -327,7 +341,7 @@ export class Identifier { data: data, }); - let sigs = await keeper.sign(b(serder.raw)) + let sigs = await keeper.sign(b(serder.raw)); var jsondata: any = { rot: serder.ked, @@ -367,9 +381,9 @@ export class Identifier { const hab = await this.get(name); const pre = hab.prefix; - const rpy = this.makeEndRole(pre, role, eid, stamp) - const keeper = this.client.manager!.get(hab) - const sigs = await keeper.sign(b(rpy.raw)) + const rpy = this.makeEndRole(pre, role, eid, stamp); + const keeper = this.client.manager!.get(hab); + const sigs = await keeper.sign(b(rpy.raw)); const jsondata = { rpy: rpy.ked, diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 42759479..15dfa2a9 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -1,7 +1,7 @@ -import { Agent, Controller } from "./controller" -import { Tier } from "../core/salter" -import { Authenticater } from "../core/authing" -import { ExternalModule, KeyManager } from "../core/keeping" +import { Agent, Controller } from './controller'; +import { Tier } from '../core/salter'; +import { Authenticater } from '../core/authing'; +import { ExternalModule, KeyManager } from '../core/keeping'; import { Identifier } from './aiding'; import { Contacts, Challenges } from './contacting'; @@ -30,16 +30,16 @@ class State { /** SignifyClient */ export class SignifyClient { - public controller: Controller - public url: string - public bran: string - public pidx: number - public agent: Agent | null - public authn: Authenticater | null - public manager: KeyManager | null - public tier: Tier - public bootUrl: string - public exteralModules: ExternalModule[] + public controller: Controller; + public url: string; + public bran: string; + public pidx: number; + public agent: Agent | null; + public authn: Authenticater | null; + public manager: KeyManager | null; + public tier: Tier; + public bootUrl: string; + public exteralModules: ExternalModule[]; /** * SignifyClient constructor @@ -47,22 +47,28 @@ export class SignifyClient { * @param {string} bran Base64 21 char string that is used as base material for seed of the client AID * @param {Tier} tier Security tier for generating keys of the client AID (high | mewdium | low) * @param {string} bootUrl KERIA boot interface URL - * @param {ExternalModule[]} externalModules list of external modules to load + * @param {ExternalModule[]} externalModules list of external modules to load */ - constructor(url: string, bran: string, tier: Tier = Tier.low, bootUrl: string = DEFAULT_BOOT_URL, externalModules:ExternalModule[]=[]) { - this.url = url + constructor( + url: string, + bran: string, + tier: Tier = Tier.low, + bootUrl: string = DEFAULT_BOOT_URL, + externalModules: ExternalModule[] = [] + ) { + this.url = url; if (bran.length < 21) { throw Error('bran must be 21 characters'); } - this.bran = bran - this.pidx = 0 - this.controller = new Controller(bran, tier) - this.authn = null - this.agent = null - this.manager = null - this.tier = tier - this.bootUrl = bootUrl - this.exteralModules = externalModules + this.bran = bran; + this.pidx = 0; + this.controller = new Controller(bran, tier); + this.authn = null; + this.agent = null; + this.manager = null; + this.tier = tier; + this.bootUrl = bootUrl; + this.exteralModules = externalModules; } get data() { @@ -139,8 +145,14 @@ export class SignifyClient { if (this.controller.serder.ked.s == 0) { await this.approveDelegation(); } - this.manager = new KeyManager(this.controller.salter, this.exteralModules) - this.authn = new Authenticater(this.controller.signer, this.agent.verfer!) + this.manager = new KeyManager( + this.controller.salter, + this.exteralModules + ); + this.authn = new Authenticater( + this.controller.signer, + this.agent.verfer! + ); } /** diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index f496ded1..ea0d8cda 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -169,9 +169,9 @@ export class Credentials { let [, iss] = Saider.saidify(_iss); // Create paths and sign - let cpath = '6AABAAA-' - let keeper = this.client!.manager!.get(hab) - let csigs = await keeper.sign(b(JSON.stringify(vc))) + let cpath = '6AABAAA-'; + let keeper = this.client!.manager!.get(hab); + let csigs = await keeper.sign(b(JSON.stringify(vc))); // Create ixn let ixn = {}; @@ -198,9 +198,16 @@ export class Credentials { // TODO implement rotation event throw new Error('Establishment only not implemented'); } else { - let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) - sigs = await keeper.sign(b(serder.raw)) - ixn = serder.ked + let serder = interact({ + pre: pre, + sn: sn + 1, + data: data, + dig: dig, + version: undefined, + kind: undefined, + }); + sigs = await keeper.sign(b(serder.raw)); + ixn = serder.ked; } let body = { @@ -276,10 +283,17 @@ export class Credentials { // TODO implement rotation event throw new Error('Establishment only not implemented'); } else { - let serder = interact({ pre: pre, sn: sn + 1, data: data, dig: dig, version: undefined, kind: undefined }) - let keeper = this.client!.manager!.get(hab) - sigs = await keeper.sign(b(serder.raw)) - ixn = serder.ked + let serder = interact({ + pre: pre, + sn: sn + 1, + data: data, + dig: dig, + version: undefined, + kind: undefined, + }); + let keeper = this.client!.manager!.get(hab); + sigs = await keeper.sign(b(serder.raw)); + ixn = serder.ked; } let body = { @@ -402,12 +416,7 @@ export class Credentials { let keeper = this.client!.manager!.get(hab); - let sig = await keeper.sign(b(exn.raw),true) - - let siger = new Siger({qb64:sig[0]}) - let seal = ["SealLast" , {i:pre}] - let ims = messagize(exn,[siger],seal, undefined, undefined, true) - ims = ims.slice(JSON.stringify(exn.ked).length) + let sig = await keeper.sign(b(exn.raw), true); let siger = new Siger({ qb64: sig[0] }); let seal = ['SealLast', { i: pre }]; @@ -546,10 +555,24 @@ export class Registries { }, ]; - let serder = interact({pre: pre, sn: sn + 1, data: data, dig: dig, version: Versionage, kind: Serials.JSON}) - let keeper = this.client.manager!.get(hab) - let sigs = await keeper.sign(b(serder.raw)) - let res = this.createFromEvents(hab, name, registryName, regser.ked, serder.ked, sigs) + let serder = interact({ + pre: pre, + sn: sn + 1, + data: data, + dig: dig, + version: Versionage, + kind: Serials.JSON, + }); + let keeper = this.client.manager!.get(hab); + let sigs = await keeper.sign(b(serder.raw)); + let res = this.createFromEvents( + hab, + name, + registryName, + regser.ked, + serder.ked, + sigs + ); return new RegistryResult(regser, serder, sigs, res); } } diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts index 2ef537a9..cf15306c 100644 --- a/src/keri/app/exchanging.ts +++ b/src/keri/app/exchanging.ts @@ -29,9 +29,15 @@ export class Exchanges { * @param payload * @param embeds */ - async createExchangeMessage(sender: Dict, route: string, payload: Dict, embeds: Dict): Promise<[Serder, string[], string]> { - let keeper = this.client.manager!.get(sender) - let [exn, end] = exchange(route, + async createExchangeMessage( + sender: Dict, + route: string, + payload: Dict, + embeds: Dict + ): Promise<[Serder, string[], string]> { + let keeper = this.client.manager!.get(sender); + let [exn, end] = exchange( + route, payload, sender['prefix'], undefined, @@ -41,8 +47,8 @@ export class Exchanges { embeds ); - let sigs = await keeper.sign(b(exn.raw)) - return [exn, sigs, d(end)] + let sigs = await keeper.sign(b(exn.raw)); + return [exn, sigs, d(end)]; } /** @@ -57,12 +63,29 @@ export class Exchanges { * @param embeds * @param recipients */ - async send(name: string, topic: string, sender: Dict, route: string, payload: Dict, embeds: Dict, - recipients: string[]): Promise { - - let [exn, sigs, atc] = await this.createExchangeMessage(sender, route, payload, embeds) - return await this.sendFromEvents(name, topic, exn, sigs, atc, recipients) - + async send( + name: string, + topic: string, + sender: Dict, + route: string, + payload: Dict, + embeds: Dict, + recipients: string[] + ): Promise { + let [exn, sigs, atc] = await this.createExchangeMessage( + sender, + route, + payload, + embeds + ); + return await this.sendFromEvents( + name, + topic, + exn, + sigs, + atc, + recipients + ); } /** diff --git a/src/keri/core/indexer.ts b/src/keri/core/indexer.ts index 9806b401..aa69053c 100644 --- a/src/keri/core/indexer.ts +++ b/src/keri/core/indexer.ts @@ -4,74 +4,43 @@ import Base64 from 'urlsafe-base64'; import { Buffer } from 'buffer'; export class IndexerCodex { -<<<<<<< HEAD - Ed25519_Sig: string = 'A' // Ed25519 sig appears same in both lists if any. - Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only. - ECDSA_256k1_Sig: string = 'C' // ECDSA secp256k1 sig appears same in both lists if any. - ECDSA_256k1_Crt_Sig: string = 'D' // ECDSA secp256k1 sig appears in current list. - ECDSA_256r1_Sig: string = "E" // ECDSA secp256r1 sig appears same in both lists if any. - ECDSA_256r1_Crt_Sig: string = "F" // ECDSA secp256r1 sig appears in current list. - Ed448_Sig: string = '0A' // Ed448 signature appears in both lists. - Ed448_Crt_Sig: string = '0B' // Ed448 signature appears in current list only. - Ed25519_Big_Sig: string = '2A' // Ed25519 sig appears in both lists. - Ed25519_Big_Crt_Sig: string = '2B' // Ed25519 sig appears in current list only. - ECDSA_256k1_Big_Sig: string = '2C' // ECDSA secp256k1 sig appears in both lists. - ECDSA_256k1_Big_Crt_Sig: string = '2D' // ECDSA secp256k1 sig appears in current list only. - ECDSA_256r1_Big_Sig: string = "2E" // ECDSA secp256r1 sig appears in both lists. - ECDSA_256r1_Big_Crt_Sig: string = "2F" // ECDSA secp256r1 sig appears in current list only. - Ed448_Big_Sig: string = '3A' // Ed448 signature appears in both lists. - Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only. - -======= Ed25519_Sig: string = 'A'; // Ed25519 sig appears same in both lists if any. Ed25519_Crt_Sig: string = 'B'; // Ed25519 sig appears in current list only. ECDSA_256k1_Sig: string = 'C'; // ECDSA secp256k1 sig appears same in both lists if any. ECDSA_256k1_Crt_Sig: string = 'D'; // ECDSA secp256k1 sig appears in current list. + ECDSA_256r1_Sig: string = 'E'; // ECDSA secp256r1 sig appears same in both lists if any. + ECDSA_256r1_Crt_Sig: string = 'F'; // ECDSA secp256r1 sig appears in current list. Ed448_Sig: string = '0A'; // Ed448 signature appears in both lists. Ed448_Crt_Sig: string = '0B'; // Ed448 signature appears in current list only. Ed25519_Big_Sig: string = '2A'; // Ed25519 sig appears in both lists. Ed25519_Big_Crt_Sig: string = '2B'; // Ed25519 sig appears in current list only. ECDSA_256k1_Big_Sig: string = '2C'; // ECDSA secp256k1 sig appears in both lists. ECDSA_256k1_Big_Crt_Sig: string = '2D'; // ECDSA secp256k1 sig appears in current list only. + ECDSA_256r1_Big_Sig: string = '2E'; // ECDSA secp256r1 sig appears in both lists. + ECDSA_256r1_Big_Crt_Sig: string = '2F'; // ECDSA secp256r1 sig appears in current list only. Ed448_Big_Sig: string = '3A'; // Ed448 signature appears in both lists. Ed448_Big_Crt_Sig: string = '3B'; // Ed448 signature appears in current list only. ->>>>>>> e42f976 (adds prettier) } export const IdrDex = new IndexerCodex(); export class IndexedSigCodex { -<<<<<<< HEAD - Ed25519_Sig: string = 'A' // Ed25519 sig appears same in both lists if any. - Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only. - ECDSA_256k1_Sig: string = 'C' // ECDSA secp256k1 sig appears same in both lists if any. - ECDSA_256k1_Crt_Sig: string = 'D' // ECDSA secp256k1 sig appears in current list. - ECDSA_256r1_Sig: string = "E" // ECDSA secp256r1 sig appears same in both lists if any. - ECDSA_256r1_Crt_Sig: string = "F" // ECDSA secp256r1 sig appears in current list. - Ed448_Sig: string = '0A' // Ed448 signature appears in both lists. - Ed448_Crt_Sig: string = '0B' // Ed448 signature appears in current list only. - Ed25519_Big_Sig: string = '2A' // Ed25519 sig appears in both lists. - Ed25519_Big_Crt_Sig: string = '2B' // Ed25519 sig appears in current list only. - ECDSA_256k1_Big_Sig: string = '2C' // ECDSA secp256k1 sig appears in both lists. - ECDSA_256k1_Big_Crt_Sig: string = '2D' // ECDSA secp256k1 sig appears in current list only. - ECDSA_256r1_Big_Sig: string = "2E" // ECDSA secp256r1 sig appears in both lists. - ECDSA_256r1_Big_Crt_Sig: string = "2F" // ECDSA secp256r1 sig appears in current list only. - Ed448_Big_Sig: string = '3A' // Ed448 signature appears in both lists. - Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only. -======= Ed25519_Sig: string = 'A'; // Ed25519 sig appears same in both lists if any. Ed25519_Crt_Sig: string = 'B'; // Ed25519 sig appears in current list only. ECDSA_256k1_Sig: string = 'C'; // ECDSA secp256k1 sig appears same in both lists if any. ECDSA_256k1_Crt_Sig: string = 'D'; // ECDSA secp256k1 sig appears in current list. + ECDSA_256r1_Sig: string = 'E'; // ECDSA secp256r1 sig appears same in both lists if any. + ECDSA_256r1_Crt_Sig: string = 'F'; // ECDSA secp256r1 sig appears in current list. Ed448_Sig: string = '0A'; // Ed448 signature appears in both lists. Ed448_Crt_Sig: string = '0B'; // Ed448 signature appears in current list only. Ed25519_Big_Sig: string = '2A'; // Ed25519 sig appears in both lists. Ed25519_Big_Crt_Sig: string = '2B'; // Ed25519 sig appears in current list only. ECDSA_256k1_Big_Sig: string = '2C'; // ECDSA secp256k1 sig appears in both lists. ECDSA_256k1_Big_Crt_Sig: string = '2D'; // ECDSA secp256k1 sig appears in current list only. + ECDSA_256r1_Big_Sig: string = '2E'; // ECDSA secp256r1 sig appears in both lists. + ECDSA_256r1_Big_Crt_Sig: string = '2F'; // ECDSA secp256r1 sig appears in current list only. Ed448_Big_Sig: string = '3A'; // Ed448 signature appears in both lists. Ed448_Big_Crt_Sig: string = '3B'; // Ed448 signature appears in current list only. ->>>>>>> e42f976 (adds prettier) has(prop: string): boolean { let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); @@ -82,23 +51,14 @@ export class IndexedSigCodex { export const IdxSigDex = new IndexedSigCodex(); export class IndexedCurrentSigCodex { -<<<<<<< HEAD - Ed25519_Crt_Sig: string = 'B' // Ed25519 sig appears in current list only. - ECDSA_256k1_Crt_Sig: string = 'D' // ECDSA secp256k1 sig appears in current list only. - ECDSA_256r1_Crt_Sig: string = "F" // ECDSA secp256r1 sig appears in current list. - Ed448_Crt_Sig: string = '0B' // Ed448 signature appears in current list only. - Ed25519_Big_Crt_Sig: string = '2B' // Ed25519 sig appears in current list only. - ECDSA_256k1_Big_Crt_Sig: string = '2D' // ECDSA secp256k1 sig appears in current list only. - ECDSA_256r1_Big_Crt_Sig: string = "2F" // ECDSA secp256r1 sig appears in current list only. - Ed448_Big_Crt_Sig: string = '3B' // Ed448 signature appears in current list only. -======= Ed25519_Crt_Sig: string = 'B'; // Ed25519 sig appears in current list only. ECDSA_256k1_Crt_Sig: string = 'D'; // ECDSA secp256k1 sig appears in current list only. + ECDSA_256r1_Crt_Sig: string = 'F'; // ECDSA secp256r1 sig appears in current list. Ed448_Crt_Sig: string = '0B'; // Ed448 signature appears in current list only. Ed25519_Big_Crt_Sig: string = '2B'; // Ed25519 sig appears in current list only. ECDSA_256k1_Big_Crt_Sig: string = '2D'; // ECDSA secp256k1 sig appears in current list only. + ECDSA_256r1_Big_Crt_Sig: string = '2F'; // ECDSA secp256r1 sig appears in current list only. Ed448_Big_Crt_Sig: string = '3B'; // Ed448 signature appears in current list only. ->>>>>>> e42f976 (adds prettier) has(prop: string): boolean { let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); @@ -213,30 +173,14 @@ export class Indexer { ['4', 2], ]); -<<<<<<< HEAD - static Sizes = new Map(Object.entries({ - 'A': new Xizage(1, 1, 0, 88, 0), - 'B': new Xizage(1, 1, 0, 88, 0), - 'C': new Xizage(1, 1, 0, 88, 0), - 'D': new Xizage(1, 1, 0, 88, 0), - 'E': new Xizage(1, 1, 0, 88, 0), - 'F': new Xizage(1, 1, 0, 88, 0), - '0A': new Xizage(2, 2, 1, 156, 0), - '0B': new Xizage(2, 2, 1, 156, 0), - - '2A': new Xizage(2, 4, 2, 92, 0), - '2B': new Xizage(2, 4, 2, 92, 0), - '2C': new Xizage(2, 4, 2, 92, 0), - '2D': new Xizage(2, 4, 2, 92, 0), - '2E': new Xizage(2, 4, 2, 92, 0), - '2F': new Xizage(2, 4, 2, 92, 0), -======= static Sizes = new Map( Object.entries({ A: new Xizage(1, 1, 0, 88, 0), B: new Xizage(1, 1, 0, 88, 0), C: new Xizage(1, 1, 0, 88, 0), D: new Xizage(1, 1, 0, 88, 0), + E: new Xizage(1, 1, 0, 88, 0), + F: new Xizage(1, 1, 0, 88, 0), '0A': new Xizage(2, 2, 1, 156, 0), '0B': new Xizage(2, 2, 1, 156, 0), @@ -244,7 +188,8 @@ export class Indexer { '2B': new Xizage(2, 4, 2, 92, 0), '2C': new Xizage(2, 4, 2, 92, 0), '2D': new Xizage(2, 4, 2, 92, 0), ->>>>>>> e42f976 (adds prettier) + '2E': new Xizage(2, 4, 2, 92, 0), + '2F': new Xizage(2, 4, 2, 92, 0), '3A': new Xizage(2, 6, 3, 160, 0), '3B': new Xizage(2, 6, 3, 160, 0), diff --git a/src/keri/core/keeping.ts b/src/keri/core/keeping.ts index 99d48660..456266cf 100644 --- a/src/keri/core/keeping.ts +++ b/src/keri/core/keeping.ts @@ -16,31 +16,21 @@ export {}; /** External module definition */ export interface ExternalModule { - type: string, - name: string, - module: any, + type: string; + name: string; + module: any; } export class KeyManager { -<<<<<<< HEAD - private salter?: Salter - private modules?: any - - constructor(salter: Salter, externalModules: ExternalModule[] = [] ) { - - this.salter = salter - this.modules = [] - externalModules.forEach((mod) => { - this.modules[mod.type] = mod.module - }) -======= private salter?: Salter; - // private externalModulees?: any + private modules?: any; - constructor(salter: Salter, _externalModules: any = undefined) { + constructor(salter: Salter, externalModules: ExternalModule[] = []) { this.salter = salter; - // this.externalModulees = _externalModules ->>>>>>> e42f976 (adds prettier) + this.modules = []; + externalModules.forEach((mod) => { + this.modules[mod.type] = mod.module; + }); } new(algo: Algos, pidx: number, kargs: any) { @@ -78,17 +68,6 @@ export class KeyManager { kargs['nxts'] ); case Algos.group: -<<<<<<< HEAD - return new GroupKeeper(this, kargs["mhab"], kargs["states"], kargs["rstates"],kargs["keys"],kargs["ndigs"]) - case Algos.extern: - let typ = kargs.extern_type - if ( typ in this.modules) { - let mod = new this.modules[typ](pidx,kargs) - return mod - } else { - throw new Error(`unsupported external module type ${typ}`) - } -======= return new GroupKeeper( this, kargs['mhab'], @@ -97,7 +76,14 @@ export class KeyManager { kargs['keys'], kargs['ndigs'] ); ->>>>>>> e42f976 (adds prettier) + case Algos.extern: + let typ = kargs.extern_type; + if (typ in this.modules) { + let mod = new this.modules[typ](pidx, kargs); + return mod; + } else { + throw new Error(`unsupported external module type ${typ}`); + } default: throw new Error('Unknown algo'); } @@ -140,21 +126,6 @@ export class KeyManager { kargs['nxts'] ); } else if (Algos.group in aid) { -<<<<<<< HEAD - let kargs = aid[Algos.group] - return new GroupKeeper(this, kargs["mhab"], kargs["states"], kargs["rstates"],kargs["keys"],kargs["ndigs"]) - } else if (Algos.extern in aid) { - let kargs = aid[Algos.randy] - let typ = kargs.extern_type - if ( typ in this.modules) { - let mod = new this.modules[typ](kargs["pidx"],kargs) - return mod - } else { - throw new Error(`unsupported external module type ${typ}`) - } - } else { - throw new Error(`Algo not allowed yet`) -======= let kargs = aid[Algos.group]; return new GroupKeeper( this, @@ -164,9 +135,17 @@ export class KeyManager { kargs['keys'], kargs['ndigs'] ); + } else if (Algos.extern in aid) { + let kargs = aid[Algos.randy]; + let typ = kargs.extern_type; + if (typ in this.modules) { + let mod = new this.modules[typ](kargs['pidx'], kargs); + return mod; + } else { + throw new Error(`unsupported external module type ${typ}`); + } } else { throw new Error(`Algo not allowed yet`); ->>>>>>> e42f976 (adds prettier) } } } @@ -678,30 +657,21 @@ export class GroupKeeper { this.gdigs = rstates.map((state) => state['n'][0]); return [this.gkeys, this.gdigs]; } -<<<<<<< HEAD - async sign(ser:Uint8Array, indexed:boolean=true, _indices:number[]|undefined=undefined, _ondices:number[]|undefined=undefined):Promise{ - let key = this.mhab['state']['k'][0] - let ndig = this.mhab['state']['n'][0] -======= - sign( + + async sign( ser: Uint8Array, indexed: boolean = true, _indices: number[] | undefined = undefined, _ondices: number[] | undefined = undefined - ): Siger[] | Cigar[] { + ): Promise { let key = this.mhab['state']['k'][0]; let ndig = this.mhab['state']['n'][0]; ->>>>>>> e42f976 (adds prettier) let csi = this.gkeys!.indexOf(key); let pni = this.gdigs!.indexOf(ndig); let mkeeper = this.manager.get(this.mhab); -<<<<<<< HEAD - return await mkeeper.sign(ser, indexed, [csi], [pni]) -======= - return mkeeper.sign(ser, indexed, [csi], [pni]); ->>>>>>> e42f976 (adds prettier) + return await mkeeper.sign(ser, indexed, [csi], [pni]); } params() { diff --git a/src/keri/core/manager.ts b/src/keri/core/manager.ts index 093c5aa4..3a6043fa 100644 --- a/src/keri/core/manager.ts +++ b/src/keri/core/manager.ts @@ -10,16 +10,10 @@ import { Siger } from './siger'; import { b } from './core'; export enum Algos { -<<<<<<< HEAD - randy = "randy", - salty = "salty", - group = "group", - extern = "extern" -======= randy = 'randy', salty = 'salty', group = 'group', ->>>>>>> e42f976 (adds prettier) + extern = 'extern', } class PubLot { diff --git a/test/app/aiding.test.ts b/test/app/aiding.test.ts index 141986eb..a2e138d0 100644 --- a/test/app/aiding.test.ts +++ b/test/app/aiding.test.ts @@ -211,15 +211,13 @@ describe('Aiding', () => { assert.deepEqual(lastBody.salty.dcode, 'E'); assert.deepEqual(lastBody.salty.transferable, true); - await client - .identifiers() - .create('aid2', { - count: 3, - ncount: 3, - isith: '2', - nsith: '2', - bran: '0123456789lmnopqrstuv', - }); + await client.identifiers().create('aid2', { + count: 3, + ncount: 3, + isith: '2', + nsith: '2', + bran: '0123456789lmnopqrstuv', + }); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; lastBody = JSON.parse(lastCall[1]!.body!.toString()); assert.equal(lastCall[0]!, url + '/identifiers'); @@ -360,12 +358,10 @@ describe('Aiding', () => { assert.equal(lastCall[0]!, url + '/identifiers'); assert.equal(lastCall[1]!.method, 'GET'); - await client - .identifiers() - .create('aid1', { - bran: '0123456789abcdefghijk', - algo: Algos.randy, - }); + await client.identifiers().create('aid1', { + bran: '0123456789abcdefghijk', + algo: Algos.randy, + }); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; let lastBody = JSON.parse(lastCall[1]!.body!.toString()); assert.equal(lastCall[0]!, url + '/identifiers'); From 78758ca8dd9b3478f7eb37d815f295ee15dcf5b1 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Mon, 16 Oct 2023 12:12:46 -0700 Subject: [PATCH 065/186] Script and changes to Credentials to support issuing a credential from a multisig AID. --- examples/scripts/client.ts | 4 +- .../scripts/multisig-create-credential.sh | 3 + .../scripts/multisig-create-credential.ts | 219 ++++++++++++++++++ examples/scripts/multisig-kli.sh | 3 +- examples/scripts/package-lock.json | 6 + src/keri/app/credentialing.ts | 93 ++++++-- 6 files changed, 307 insertions(+), 21 deletions(-) create mode 100755 examples/scripts/multisig-create-credential.sh create mode 100644 examples/scripts/multisig-create-credential.ts diff --git a/examples/scripts/client.ts b/examples/scripts/client.ts index a02a6d04..dc06fd28 100644 --- a/examples/scripts/client.ts +++ b/examples/scripts/client.ts @@ -37,7 +37,7 @@ async function connect() { const exchanges = client.exchanges(); let salt = 'abcdefghijk0123456789'; - let res = identifiers.create('multisig-ts', { bran: salt }); + let res = await identifiers.create('multisig-ts', { bran: salt }); let op = await res.op(); let aid = op['response']; @@ -86,7 +86,7 @@ async function connect() { let sigTs = aid['state']; let states = [sigPy, kli, sigTs]; - let ires = identifiers.create('multisig', { + let ires = await identifiers.create('multisig', { algo: signify.Algos.group, mhab: aid, delpre: 'EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7', diff --git a/examples/scripts/multisig-create-credential.sh b/examples/scripts/multisig-create-credential.sh new file mode 100755 index 00000000..f7ca316f --- /dev/null +++ b/examples/scripts/multisig-create-credential.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +npx --package=signify-ts ts-node --esm multisig-create-credential.ts diff --git a/examples/scripts/multisig-create-credential.ts b/examples/scripts/multisig-create-credential.ts new file mode 100644 index 00000000..12b41780 --- /dev/null +++ b/examples/scripts/multisig-create-credential.ts @@ -0,0 +1,219 @@ +import signify from 'signify-ts'; + +await connect(); + +async function connect() { + let url = 'http://127.0.0.1:3901'; + let bran = '0123456789abcdefghijk'; + + await signify.ready(); + const client = new signify.SignifyClient(url, bran); + console.log(client.controller.pre); + const [evt, sign] = client.controller?.event ?? []; + const data = { + icp: evt.ked, + sig: sign.qb64, + stem: client.controller?.stem, + pidx: 1, + tier: client.controller?.tier, + }; + + await fetch('http://127.0.0.1:3903/boot', { + method: 'POST', + body: JSON.stringify(data), + headers: { + 'Content-Type': 'application/json', + }, + }); + + await client.connect(); + let d = await client.state(); + console.log('Connected: '); + console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); + + let identifiers = client.identifiers(); + const oobis = client.oobis(); + const operations = client.operations(); + const exchanges = client.exchanges(); + + let salt = '0123456789lmnopqrstuv'; + let res = await identifiers.create('agent0', {bran: salt}); + let op = await res.op(); + let aid = op['response']; + + await identifiers.addEndRole('agent0', 'agent', d.agent.i); + + console.log('Created AID: ', aid); + + console.log('Resolving multisig1...'); + op = await oobis.resolve( + 'http://127.0.0.1:5642/oobi/EKYLUMmNPZeEs77Zvclf0bSN5IN-mLfLpx2ySb-HDlk4/witness', + 'multisig1' + ); + while (!op['done']) { + op = await operations.get(op['name']); + await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second + } + console.log('done.'); + let multisig1 = op['response']; + + console.log('Resolving multisig2...'); + op = await oobis.resolve( + 'http://127.0.0.1:5642/oobi/EJccSRTfXYF6wrUVuenAIHzwcx3hJugeiJsEKmndi5q1/witness', + 'multisig2' + ); + while (!op['done']) { + op = await operations.get(op['name']); + await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second + } + console.log('done.'); + let multisig2 = op['response']; + + aid = await identifiers.get('agent0'); + let agent0 = aid['state']; + + let states = [multisig2, multisig1, agent0]; + let ires = await identifiers.create('multisig', { + algo: signify.Algos.group, + mhab: aid, + toad: 3, + wits: [ + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + isith: ['1/3', '1/3', '1/3'], + nsith: ['1/3', '1/3', '1/3'], + states: states, + rstates: states, + }); + + let serder = ires.serder; + let sigs = ires.sigs; + let sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); + + let ims = signify.d(signify.messagize(serder, sigers)); + let atc = ims.substring(serder.size); + let embeds = { + icp: [serder, atc], + }; + + let smids = states.map((state) => state['i']); + let recp = [multisig2, multisig1].map((state) => state['i']); + + await exchanges.send( + 'agent0', + 'multisig', + aid, + '/multisig/icp', + {gid: serder.pre, smids: smids, rmids: smids}, + embeds, + recp + ); + + let multisigAID = serder.pre + console.log("Waiting for multisig AID to be created") + + op = await ires.op() + while (!op['done']) { + op = await operations.get(op['name']); + await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second + } + console.log('done.'); + + console.log("Resolving schema...") + op = await oobis.resolve( + 'http://127.0.0.1:7723/oobi/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + 'schema' + ); + while (!op['done']) { + op = await operations.get(op['name']); + await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second + } + console.log('done.'); + let schemaSAID = "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao" + + + console.log("Creating registry...") + let vcpRes1 = await client.registries().create({ + name: 'multisig', + registryName: 'vLEI Registry', + nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }); + + let op1 = await vcpRes1.op(); + serder = vcpRes1.regser; + let regk = serder.pre + let anc = vcpRes1.serder; + sigs = vcpRes1.sigs; + + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); + ims = signify.d(signify.messagize(anc, sigers)); + atc = ims.substring(anc.size); + + let regbeds = { + vcp: [serder, ''], + anc: [anc, atc], + }; + + recp = ["EKYLUMmNPZeEs77Zvclf0bSN5IN-mLfLpx2ySb-HDlk4", "EJccSRTfXYF6wrUVuenAIHzwcx3hJugeiJsEKmndi5q1"] + await client.exchanges().send( + 'agent0', + 'multisig', + aid, + '/multisig/vcp', + {gid: multisigAID, usage: 'Issue vLEIs'}, + regbeds, + recp + ); + + while (!op1['done']) { + op1 = await operations.get(op1['name']); + await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second + } + console.log('done.'); + + console.log("Creating credential from multisig...") + // Issue credential + const vcdata = { + LEI: '5493001KJTIIGC8Y1R17', + }; + let holder = "ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k" + + let TIME="2023-09-25T16:01:37.000000+00:00" + let credRes = await client.credentials().issue('multisig', regk, schemaSAID, holder, vcdata, + undefined, undefined, TIME); + op1 = await credRes.op() + + let acdc = new signify.Serder(credRes.acdc) + let iss = credRes.iserder + let ianc = credRes.anc + let isigs = credRes.sigs + + sigers = isigs.map((sig: any) => new signify.Siger({qb64: sig})); + ims = signify.d(signify.messagize(ianc, sigers)); + atc = ims.substring(anc.size); + + let vcembeds = { + acdc: [acdc, ''], + iss: [iss, ''], + anc: [ianc, atc], + }; + + await client.exchanges().send( + 'agent0', + 'multisig', + aid, + '/multisig/iss', + {gid: multisigAID}, + vcembeds, + recp + ); + + while (!op1['done']) { + op1 = await client.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + + +} diff --git a/examples/scripts/multisig-kli.sh b/examples/scripts/multisig-kli.sh index b4c81be2..54a4ae4b 100755 --- a/examples/scripts/multisig-kli.sh +++ b/examples/scripts/multisig-kli.sh @@ -21,4 +21,5 @@ kli multisig incept --name multisig-kli --alias multisig-kli --group multisig -- read -n 1 -r -p "Press any key to create endpoints for multisig AID..." -kli multisig ends add --name multisig-kli --alias multisig --role agent --role mailbox \ No newline at end of file + +kli ends add --name multisig-kli --alias multisig --role mailbox --eid BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX diff --git a/examples/scripts/package-lock.json b/examples/scripts/package-lock.json index 3bfadcec..527b1741 100644 --- a/examples/scripts/package-lock.json +++ b/examples/scripts/package-lock.json @@ -30,6 +30,7 @@ "buffer": "^6.0.3", "cbor": "^8.0.0", "collections": "^5.1.12", + "ecdsa-secp256r1": "^1.3.3", "jest-fetch-mock": "^3.0.3", "libsodium-wrappers-sumo": "^0.7.9", "lodash": "^4.17.21", @@ -53,8 +54,10 @@ "jest": "^29.3.1", "jsdoc": "^4.0.2", "minami": "^1.2.3", + "prettier": "^3.0.3", "size-limit": "^5.0.4", "ts-migrate": "^0.1.23", + "ts-mockito": "^2.6.1", "tsdx": "^0.14.1", "tslib": "^2.3.1", "typedoc": "^0.24.8", @@ -2741,6 +2744,7 @@ "buffer": "^6.0.3", "cbor": "^8.0.0", "collections": "^5.1.12", + "ecdsa-secp256r1": "^1.3.3", "husky": "^7.0.2", "jest": "^29.3.1", "jest-fetch-mock": "^3.0.3", @@ -2750,10 +2754,12 @@ "mathjs": "^11.8.2", "minami": "^1.2.3", "msgpack5": "^5.3.2", + "prettier": "^3.0.3", "size-limit": "^5.0.4", "structured-headers": "^0.5.0", "text-encoding": "^0.7.0", "ts-migrate": "^0.1.23", + "ts-mockito": "^2.6.1", "ts-node": "^10.9.1", "tsdx": "^0.14.1", "tslib": "^2.3.1", diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index ea0d8cda..6ccbc816 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -31,6 +31,49 @@ export interface CredentialFilter { limit?: number; } +export class CredentialResult { + private readonly _acdc: any; + private readonly _iserder: Serder; + private readonly _anc: Serder; + private readonly _sigs: string[]; + private readonly promise: Promise; + + constructor( + acdc: Dict, + iserder: Serder, + anc: Serder, + sigs: any[], + promise: Promise + ) { + this._acdc = acdc; + this._iserder = iserder; + this._anc = anc; + this._sigs = sigs; + this.promise = promise; + } + + get acdc() { + return this._acdc; + } + + get iserder() { + return this._iserder; + } + + get anc() { + return this._anc + } + + get sigs() { + return this._sigs; + } + + async op(): Promise { + let res = await this.promise; + return await res.json(); + } +} + /** * Credentials */ @@ -103,6 +146,7 @@ export class Credentials { * @param {any} [credentialData] Optional credential data * @param {any} [rules] Optional credential rules * @param {any} [source] Optional credential sources + * @param {string} [datetime] Optional datetime to set for the credential * @param {boolean} [priv=false] Flag to issue a credential with privacy preserving features * @returns {Promise} A promise to the long-running operation */ @@ -114,12 +158,14 @@ export class Credentials { credentialData?: any, rules?: any, source?: any, + datetime?: string, priv: boolean = false ): Promise { // Create Credential let hab = await this.client.identifiers().get(name); let pre: string = hab.prefix; - const dt = new Date().toISOString().replace('Z', '000+00:00'); + + const dt = datetime === undefined ? new Date().toISOString().replace('Z', '000+00:00') : datetime; const vsacdc = versify(Ident.ACDC, undefined, Serials.JSON, 0); const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); @@ -167,15 +213,10 @@ export class Credentials { }; let [, iss] = Saider.saidify(_iss); + let iserder = new Serder(iss) // Create paths and sign - let cpath = '6AABAAA-'; let keeper = this.client!.manager!.get(hab); - let csigs = await keeper.sign(b(JSON.stringify(vc))); - - // Create ixn - let ixn = {}; - let sigs = []; let state = hab.state; if (state.c !== undefined && state.c.includes('EO')) { @@ -194,11 +235,15 @@ export class Credentials { }, ]; + // Create ixn + let ixn = {}; + let anc: Serder; + let sigs = []; if (estOnly) { // TODO implement rotation event throw new Error('Establishment only not implemented'); } else { - let serder = interact({ + anc = interact({ pre: pre, sn: sn + 1, data: data, @@ -206,26 +251,38 @@ export class Credentials { version: undefined, kind: undefined, }); - sigs = await keeper.sign(b(serder.raw)); - ixn = serder.ked; + sigs = await keeper.sign(b(anc.raw)); + ixn = anc.ked; } - let body = { - cred: vc, - csigs: csigs, - path: cpath, + let res = this.issueFromEvents(hab,name, vc, iss, ixn, sigs) + return new CredentialResult(vc, iserder, anc, sigs, res) + + } + + issueFromEvents( + hab: Dict, + name: string, + vc: Dict, + iss: Dict, + ixn: Dict, + sigs: any[] + ) { + let path = `/identifiers/${name}/credentials`; + let method = 'POST'; + let body: any = { + acdc: vc, iss: iss, ixn: ixn, sigs: sigs, }; + let keeper = this.client!.manager!.get(hab); + body[keeper.algo] = keeper.params(); - let path = `/identifiers/${name}/credentials`; - let method = 'POST'; let headers = new Headers({ Accept: 'application/json+cesr', }); - let res = await this.client.fetch(path, method, body, headers); - return await res.json(); + return this.client.fetch(path, method, body, headers); } /** From e76fa06f7472849553c66e4491df7fd5159fd919 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Mon, 16 Oct 2023 13:43:35 -0700 Subject: [PATCH 066/186] Added multisig sending IPEX grant EXN message. --- .../scripts/multisig-create-credential.ts | 29 ++++++++- src/keri/app/clienting.ts | 11 +++- src/keri/app/credentialing.ts | 65 +++++++++++++++++++ src/keri/app/exchanging.ts | 14 ++-- src/keri/core/eventing.ts | 4 +- 5 files changed, 115 insertions(+), 8 deletions(-) diff --git a/examples/scripts/multisig-create-credential.ts b/examples/scripts/multisig-create-credential.ts index 12b41780..052431c2 100644 --- a/examples/scripts/multisig-create-credential.ts +++ b/examples/scripts/multisig-create-credential.ts @@ -180,7 +180,7 @@ async function connect() { }; let holder = "ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k" - let TIME="2023-09-25T16:01:37.000000+00:00" + let TIME = "2023-09-25T16:01:37.000000+00:00" let credRes = await client.credentials().issue('multisig', regk, schemaSAID, holder, vcdata, undefined, undefined, TIME); op1 = await credRes.op() @@ -215,5 +215,32 @@ async function connect() { await new Promise((resolve) => setTimeout(resolve, 1000)); } + console.log("Creating IPEX grant message to send...") + let [grant, gsigs, end] = await client.ipex().grant("multisig", holder, "", acdc, iss, ianc, atc, undefined, TIME) + let m = await client.identifiers().get("multisig") + + let mstate = m["state"] + let seal = ['SealEvent', {i: m['prefix'], s: mstate["ee"]["s"], d: mstate["ee"]["d"]}]; + sigers = gsigs.map((sig: any) => new signify.Siger({qb64: sig})); + + let gims = signify.d(signify.messagize(grant, sigers, seal, undefined, undefined, true)); + atc = gims.substring(grant.size) + atc += end + + let gembeds: any = { + exn: [grant, atc] + } + + await client.exchanges().send( + 'agent0', + 'multisig', + aid, + '/multisig/exn', + {gid: multisigAID}, + gembeds, + recp + ); + + console.log("... done!") } diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 15dfa2a9..730c7417 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -6,7 +6,7 @@ import { ExternalModule, KeyManager } from '../core/keeping'; import { Identifier } from './aiding'; import { Contacts, Challenges } from './contacting'; import { Oobis, Operations, KeyEvents, KeyStates } from './coring'; -import { Credentials, Registries, Schemas } from './credentialing'; +import {Credentials, Ipex, Registries, Schemas} from './credentialing'; import { Notifications } from './notifying'; import { Escrows } from './escrowing'; import { Groups } from './grouping'; @@ -417,6 +417,15 @@ export class SignifyClient { return new Credentials(this); } + + /** + * Get IPEX resource + * @returns {Ipex} + */ + ipex(): Ipex { + return new Ipex(this); + } + /** * Get registries resource * @returns {Registries} diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 6ccbc816..a2b13733 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -695,3 +695,68 @@ export class Schemas { return await res.json(); } } + + +/** + * Ipex + */ + +export class Ipex { + client: SignifyClient; + /** + * Schemas + * @param {SignifyClient} client + */ + constructor(client: SignifyClient) { + this.client = client; + } + + /** + * Create an IPEX grant EXN message + * @async + * @param {string} name Name or alias of the identifier + * @param {string} recp qb64 AID of recipient of the grant + * @param {string} message accompany human readable description of the credential being issued + * @param {Serder} acdc Credential + * @param {Serder} iss TEL issuance event + * @param {Serder} anc Anchoring event + * @param {string} atc attachments for the anchoring event + * @param {string} agree Option qb64 SAID of agree message this grant is responding to + * @param {string} datetime Optional datetime to set for the credential + * @returns {Promise} A promise to the long-running operation + */ + async grant( + name: string, + recp: string, + message: string, + acdc: Serder, + iss: Serder, + anc:Serder, + atc: string, + agree?:string, + datetime?: string, + ): Promise<[Serder, string[], string]> { + let hab = await this.client.identifiers().get(name); + let data: any = { + m: message, + i: recp + } + + let embeds: any = { + acdc: [acdc, ''], + iss: [iss, ''], + anc: [anc, atc], + }; + + return this.client.exchanges().createExchangeMessage( + hab, + '/ipex/grant', + data, + embeds, + undefined, + datetime, + agree + ); + } + +} diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts index cf15306c..7f62dd53 100644 --- a/src/keri/app/exchanging.ts +++ b/src/keri/app/exchanging.ts @@ -28,21 +28,27 @@ export class Exchanges { * @param route * @param payload * @param embeds + * @param recipient + * @param datetime + * @param dig */ async createExchangeMessage( sender: Dict, route: string, payload: Dict, - embeds: Dict + embeds: Dict, + recipient?: string, + datetime?: string, + dig?: string ): Promise<[Serder, string[], string]> { let keeper = this.client.manager!.get(sender); let [exn, end] = exchange( route, payload, sender['prefix'], - undefined, - undefined, - undefined, + recipient, + datetime, + dig, undefined, embeds ); diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index 28ddad57..5983d01f 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -432,9 +432,9 @@ export function messagize( new Counter({ code: CtrDex.TransIdxSigGroups, count: 1 }) .qb64b ); - atc = concat(atc, seal.i.encode('utf-8')); + atc = concat(atc, new TextEncoder().encode(seal[1].i)); atc = concat(atc, new Seqner(seal[1].s).qb64b); - atc = concat(atc, seal.d.encode('utf-8')); + atc = concat(atc, new TextEncoder().encode(seal[1].d)); } else if (seal[0] == 'SealLast') { atc = concat( atc, From f17f5f10f1ada55e3dbb8842e6fff61c6c36680d Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Mon, 16 Oct 2023 14:13:38 -0700 Subject: [PATCH 067/186] Unit tests for the new Ipex.grant functionality --- test/app/credentialing.test.ts | 156 +++++++++++++++++++++++++++------ 1 file changed, 129 insertions(+), 27 deletions(-) diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index 49576f98..c5a0c00f 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -1,11 +1,12 @@ -import { strict as assert } from 'assert'; -import { SignifyClient } from '../../src/keri/app/clienting'; +import {strict as assert} from 'assert'; +import {SignifyClient} from '../../src/keri/app/clienting'; -import { Authenticater } from '../../src/keri/core/authing'; -import { Salter, Tier } from '../../src/keri/core/salter'; +import {Authenticater} from '../../src/keri/core/authing'; +import {Salter, Tier} from '../../src/keri/core/salter'; import libsodium from 'libsodium-wrappers-sumo'; import fetchMock from 'jest-fetch-mock'; import 'whatwg-fetch'; +import {Ident, Ilks, interact, Saider, Serder, Serials, versify} from "../../src"; fetchMock.enableMocks(); @@ -104,7 +105,7 @@ const mockCredential = { d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', ra: {}, - a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, + a: {s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt'}, dt: '2023-08-23T15:16:07.553000+00:00', et: 'iss', }, @@ -112,9 +113,9 @@ const mockCredential = { fetchMock.mockResponse((req) => { if (req.url.startsWith(url + '/agent')) { - return Promise.resolve({ body: mockConnect, init: { status: 202 } }); + return Promise.resolve({body: mockConnect, init: {status: 202}}); } else if (req.url == boot_url + '/boot') { - return Promise.resolve({ body: '', init: { status: 202 } }); + return Promise.resolve({body: '', init: {status: 202}}); } else { let headers = new Headers(); let signed_headers = new Headers(); @@ -130,7 +131,7 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}); let signer = salter.signer( 'A', true, @@ -150,7 +151,7 @@ fetchMock.mockResponse((req) => { return Promise.resolve({ body: JSON.stringify(body), - init: { status: 202, headers: signed_headers }, + init: {status: 202, headers: signed_headers}, }); } }); @@ -169,9 +170,9 @@ describe('Credentialing', () => { let kargs = { filter: { - '-i': { $eq: 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' }, + '-i': {$eq: 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX'}, }, - sort: [{ '-s': 1 }], + sort: [{'-s': 1}], limit: 25, skip: 5, }; @@ -191,7 +192,7 @@ describe('Credentialing', () => { assert.equal( lastCall[0]!, url + - '/identifiers/aid1/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + '/identifiers/aid1/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' ); assert.equal(lastCall[1]!.method, 'GET'); @@ -203,33 +204,31 @@ describe('Credentialing', () => { registry, schema, isuee, - { LEI: '1234' }, + {LEI: '1234'}, {}, {}, + undefined, false ); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; lastBody = JSON.parse(lastCall[1]!.body!.toString()); assert.equal(lastCall[0]!, url + '/identifiers/aid1/credentials'); assert.equal(lastCall[1]!.method, 'POST'); - assert.equal(lastBody.cred.ri, registry); - assert.equal(lastBody.cred.s, schema); - assert.equal(lastBody.cred.a.i, isuee); - assert.equal(lastBody.cred.a.LEI, '1234'); + assert.equal(lastBody.acdc.ri, registry); + assert.equal(lastBody.acdc.s, schema); + assert.equal(lastBody.acdc.a.i, isuee); + assert.equal(lastBody.acdc.a.LEI, '1234'); assert.equal(lastBody.iss.s, '0'); assert.equal(lastBody.iss.t, 'iss'); assert.equal(lastBody.iss.ri, registry); - assert.equal(lastBody.iss.i, lastBody.cred.d); + assert.equal(lastBody.iss.i, lastBody.acdc.d); assert.equal(lastBody.ixn.t, 'ixn'); - assert.equal(lastBody.ixn.i, lastBody.cred.i); - assert.equal(lastBody.ixn.p, lastBody.cred.i); - assert.equal(lastBody.path, '6AABAAA-'); - assert.equal(lastBody.csigs[0].substring(0, 2), 'AA'); - assert.equal(lastBody.csigs[0].length, 88); + assert.equal(lastBody.ixn.i, lastBody.acdc.i); + assert.equal(lastBody.ixn.p, lastBody.acdc.i); assert.equal(lastBody.sigs[0].substring(0, 2), 'AA'); assert.equal(lastBody.sigs[0].length, 88); - const credential = lastBody.cred.i; + const credential = lastBody.acdc.i; await credentials.revoke('aid1', credential); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; lastBody = JSON.parse(lastCall[1]!.body!.toString()); @@ -271,9 +270,9 @@ describe('Credentialing', () => { assert.equal( lastCall[0]!, url + - '/identifiers/aid1/credentials/' + - credential + - '/presentations' + '/identifiers/aid1/credentials/' + + credential + + '/presentations' ); assert.equal(lastCall[1]!.method, 'POST'); assert.equal(lastBody.exn.t, 'exn'); @@ -314,3 +313,106 @@ describe('Credentialing', () => { ); }); }); + + +describe("Ipex", () => { + it('Ipex', async () => { + await libsodium.ready; + const bran = '0123456789abcdefghijk'; + let client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.boot(); + await client.connect(); + + let ipex = client.ipex(); + + let holder = "ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k" + let acdc = new Serder(mockCredential.sad) + // Create iss + const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); + let _iss = { + v: vs, + t: Ilks.iss, + d: '', + i: mockCredential.sad.d, + s: '0', + ri: mockCredential.sad.ri, + dt: mockCredential.sad.a.dt, + }; + + let [, iss] = Saider.saidify(_iss); + let iserder = new Serder(iss) + let anc = interact({ + pre: mockCredential.sad.i, + sn: 1, + data: [{}], + dig: mockCredential.sad.d, + version: undefined, + kind: undefined,}) + + let [grant, gsigs, end] = await ipex.grant( + "multisig", + holder, + "", + acdc, + iserder, + anc, + "-vtest", + undefined, + mockCredential.sad.a.dt) + + assert.deepStrictEqual(grant.ked, { + v: 'KERI10JSON0004b1_', + t: 'exn', + d: 'ECO262mMZcwP94aY0cUl5IL6LOK_R_Md1irVDdQEwtHl', + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + p: '', + dt: '2023-08-23T15:16:07.553000+00:00', + r: '/ipex/grant', + q: {}, + a: { m: '', i: 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k' }, + e: { + acdc: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17' + } + }, + iss: { + v: 'KERI10JSON0000ed_', + t: 'iss', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + dt: '2023-08-23T15:16:07.553000+00:00' + }, + anc: { + v: 'KERI10JSON0000cd_', + t: 'ixn', + d: 'ECVCyxNpB4PJkpLbWqI02WXs1wf7VUxPNY2W28SN2qqm', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + s: '1', + p: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + a: [{}] + }, + d: 'EGpSjqjavdzgjQiyt0AtrOutWfKrj5gR63lOUUq-1sL-' + } + + }) + + assert.deepStrictEqual(gsigs, [ + 'AAAebNnWRghQuqDS0nXjy1MYht4D1_Sk_tozU0dikS-bOmmGV4AB3Ekt_sl04D7fIgkFGPQJ9gNhqNNS_uxsjNQE' + ] + ) + assert.equal(end, "-LAD4AACA-e-acdc-LAD5AACAA-e-iss-LAE5AACAA-e-anc-vtest") + + }) +}) \ No newline at end of file From f2ce73d3ee3f5df88385a21d9e874d15e92bcbe8 Mon Sep 17 00:00:00 2001 From: lenkan Date: Tue, 17 Oct 2023 16:39:02 +0200 Subject: [PATCH 068/186] remove conflicting prettier config in package.json --- .../integration-scripts/externalModule.ts | 12 +- examples/integration-scripts/salty.ts | 16 +- package-lock.json | 47098 ++++++++-------- package.json | 154 +- 4 files changed, 23635 insertions(+), 23645 deletions(-) diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts index 4329e6b0..9765c2a9 100644 --- a/examples/integration-scripts/externalModule.ts +++ b/examples/integration-scripts/externalModule.ts @@ -32,13 +32,11 @@ async function run() { state1.agent.i ); let words = new BIP39Shim(0, {}).generateMnemonic(256); - let icpResult = await client1 - .identifiers() - .create('aid1', { - algo: signify.Algos.extern, - extern_type: 'bip39_shim', - extern: { mnemonics: words }, - }); + let icpResult = await client1.identifiers().create('aid1', { + algo: signify.Algos.extern, + extern_type: 'bip39_shim', + extern: { mnemonics: words }, + }); let op = await icpResult.op(); assert.equal(op['done'], true); } diff --git a/examples/integration-scripts/salty.ts b/examples/integration-scripts/salty.ts index e25bb563..281881e3 100644 --- a/examples/integration-scripts/salty.ts +++ b/examples/integration-scripts/salty.ts @@ -55,15 +55,13 @@ async function run() { assert.equal(salt.stem, 'signify:aid'); assert.equal(aid.prefix, icp.pre); - icpResult = await client1 - .identifiers() - .create('aid2', { - count: 3, - ncount: 3, - isith: '2', - nsith: '2', - bran: '0123456789lmnopqrstuv', - }); + icpResult = await client1.identifiers().create('aid2', { + count: 3, + ncount: 3, + isith: '2', + nsith: '2', + bran: '0123456789lmnopqrstuv', + }); op = await icpResult.op(); assert.equal(op['done'], true); const aid2 = op['response']; diff --git a/package-lock.json b/package-lock.json index 7fef9cec..1a1b7a7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23553 +1,23553 @@ { - "name": "signify-ts", - "version": "0.1.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "signify-ts", - "version": "0.1.1", - "license": "Apache-2.0", - "dependencies": { - "@types/libsodium-wrappers-sumo": "^0.7.5", - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", - "ecdsa-secp256r1": "^1.3.3", - "jest-fetch-mock": "^3.0.3", - "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", - "mathjs": "^11.8.2", - "msgpack5": "^5.3.2", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "ts-node": "^10.9.1", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" - }, - "devDependencies": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/lodash": "^4.14.185", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "ts-migrate": "^0.1.23", - "ts-mockito": "^2.6.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.4" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", - "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.17", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.17", - "@babel/types": "^7.22.17", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", - "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", - "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.17.tgz", - "integrity": "sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.17" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.17.tgz", - "integrity": "sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.17" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", - "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", - "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", - "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", - "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", - "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", - "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", - "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", - "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.15.tgz", - "integrity": "sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.15", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.15", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.15", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-modules-systemjs": "^7.22.11", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.22.15", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.15", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", - "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz", - "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-typescript": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", - "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/register/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.15.tgz", - "integrity": "sha512-SAj8oKi8UogVi6eXQXKNPu8qZ78Yzy7zawrlTr0M+IuW/g8Qe9gVDhGcF9h1S69OyACpYoLxEzpjs1M15sI5wQ==", - "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", - "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.17", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", - "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", - "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", - "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.4", - "@jest/reporters": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.6.3", - "jest-config": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-resolve-dependencies": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "jest-watcher": "^29.6.4", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/environment": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", - "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", - "dev": true, - "dependencies": { - "expect": "^29.6.4", - "jest-snapshot": "^29.6.4" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", - "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", - "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", - "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", - "@jest/types": "^29.6.3", - "jest-mock": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", - "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", - "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", - "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.4", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", - "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsdoc/salty": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", - "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v12.0.0" - } - }, - "node_modules/@mermaid-js/mermaid-cli": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.4.0.tgz", - "integrity": "sha512-sXohfGD6xgR8VEKvLdvSCndFaFNVTlyXjgZlJ3x8U3/J0V2VTfLIZO94Gt8KUPUccFWci8dRYDGG0fQerB+aIA==", - "dev": true, - "dependencies": { - "chalk": "^5.0.1", - "commander": "^10.0.0", - "puppeteer": "^19.0.0" - }, - "bin": { - "mmdc": "src/cli.js" - }, - "engines": { - "node": "^14.13 || >=16.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.23", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", - "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", - "dev": true - }, - "node_modules/@puppeteer/browsers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", - "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", - "dev": true, - "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=14.1.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@puppeteer/browsers/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@puppeteer/browsers/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz", - "integrity": "sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.8", - "commondir": "^1.0.1", - "estree-walker": "^1.0.1", - "glob": "^7.1.2", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.8" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", - "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@size-limit/file": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-5.0.5.tgz", - "integrity": "sha512-lnrQYRmTt0QzV08R9M61q0+EM7Jkcp1qZ/+BG01OOFA0rZtfHt9aKCdvoSEoMrIxK44A9lWHRmyNVnKKDfKbWA==", - "dev": true, - "dependencies": { - "semver": "7.3.5" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - }, - "peerDependencies": { - "size-limit": "5.0.5" - } - }, - "node_modules/@size-limit/preset-small-lib": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@size-limit/preset-small-lib/-/preset-small-lib-5.0.5.tgz", - "integrity": "sha512-BHZwlSEaxHPqOOienQpgoH+ueWYryXiusFpNKRj1Jmyv6/rlOxww1nTCljNhh9+hOKOsahqGbvl43cr8o7NQiQ==", - "dev": true, - "dependencies": { - "@size-limit/file": "5.0.5", - "@size-limit/webpack": "5.0.5" - }, - "peerDependencies": { - "size-limit": "5.0.5" - } - }, - "node_modules/@size-limit/webpack": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@size-limit/webpack/-/webpack-5.0.5.tgz", - "integrity": "sha512-caLXPNj1iRNeBRoycKTLMLRlLTCjIv80VmBTCag5QZMuNNu4g0weoxjnU7Jbf5YneTuXuEhKSjpc95rB4Biq7Q==", - "dev": true, - "dependencies": { - "css-loader": "^5.2.6", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "mkdirp": "^1.0.4", - "nanoid": "^3.1.28", - "optimize-css-assets-webpack-plugin": "^6.0.1", - "pnp-webpack-plugin": "^1.7.0", - "style-loader": "^2.0.0", - "webpack": "^4.44.1", - "webpack-bundle-analyzer": "^4.4.2" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - }, - "peerDependencies": { - "size-limit": "5.0.5" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@ts-morph/bootstrap": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@ts-morph/bootstrap/-/bootstrap-0.16.0.tgz", - "integrity": "sha512-FYW3bK5EBeAgpHu0qZ57gHbLjzgzC81y5EJmrebzIhXSYg6OgZu5lFHpF5NJ7CwM7ZMhxX1PG+DRA8e+skopKw==", - "dev": true, - "dependencies": { - "@ts-morph/common": "~0.16.0" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.16.0.tgz", - "integrity": "sha512-SgJpzkTgZKLKqQniCjLaE3c2L2sdL7UShvmTmPBejAKd2OKV/yfMpQ2IWpAuA+VY5wy7PkSUaEObIqEK6afFuw==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "minimatch": "^5.1.0", - "mkdirp": "^1.0.4", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.3.tgz", - "integrity": "sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==", - "dev": true, - "dependencies": { - "jest-diff": "^25.2.1", - "pretty-format": "^25.2.1" - } - }, - "node_modules/@types/jest/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@types/jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@types/jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@types/jest/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/libsodium-wrappers": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz", - "integrity": "sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg==" - }, - "node_modules/@types/libsodium-wrappers-sumo": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.6.tgz", - "integrity": "sha512-86R2bYU/DKVWw3q2btxTUlFO3lYKLyodbCsxxSybNQonPzPxmQkNtKCYmkV0dWQ9ZQsGIOzNNPU9RjJUALjoEg==", - "dependencies": { - "@types/libsodium-wrappers": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.198", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", - "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", - "dev": true - }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dev": true, - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", - "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/text-encoding": { - "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@types/text-encoding/-/text-encoding-0.0.36.tgz", - "integrity": "sha512-LfATA7bH+MtAPlOshYgQ1M3n2r0TSB6Ns5ESvKYlVugkKErQg5oFbR2qO7XrKtNsrtzedDvTeqQfyTjdPJH7jw==", - "dev": true - }, - "node_modules/@types/urlsafe-base64": { - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@types/urlsafe-base64/-/urlsafe-base64-1.0.29.tgz", - "integrity": "sha512-RAowJfSG6zhSxDFl7/QC/vGeWIyJLf7pqFoh+iLP0Y/GOsH1ddmZvo2oFug/Z5pGfUM05NMQFCnzw3sSmMA72A==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "dependencies": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, - "node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", - "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.4", - "util": "^0.10.4" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.7.tgz", - "integrity": "sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "optional": true - }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/asyncro": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz", - "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "node_modules/axe-core": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", - "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", - "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.6.4", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-plugin-annotate-pure-calls": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz", - "integrity": "sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA==", - "dev": true, - "peerDependencies": { - "@babel/core": "^6.0.0-0 || 7.x" - } - }, - "node_modules/babel-plugin-dev-expression": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.3.tgz", - "integrity": "sha512-rP5LK9QQTzCW61nVVzw88En1oK8t8gTsIeC6E61oelxNsU842yMjF0G1MxhvUpCkxCEIj7sE8/e5ieTheT//uw==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-transform-rename-import": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-rename-import/-/babel-plugin-transform-rename-import-2.3.0.tgz", - "integrity": "sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ==", - "dev": true - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/blake3": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/blake3/-/blake3-2.1.7.tgz", - "integrity": "sha512-5d+TdKJvju96IyEaGJ0eO6CHbckWi+NBrCezGYM/WsnI3R03aLL2TWfsuZSh1rs0fTv/L3ps/r0vykjYurcIwA==", - "hasInstallScript": true - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "node_modules/bytes-iec": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", - "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001532", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", - "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/chromium-bidi": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", - "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", - "dev": true, - "dependencies": { - "mitt": "3.0.0" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/ci-job-number": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ci-job-number/-/ci-job-number-1.2.2.tgz", - "integrity": "sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collections": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/collections/-/collections-5.1.13.tgz", - "integrity": "sha512-SCb6Qd+d3Z02corWQ7/mqXiXeeTdHvkP6TeFSYfGYdCFp1WrjSNZ3j6y8Y3T/7osGEe0iOcU2g1d346l99m4Lg==", - "dependencies": { - "weak-map": "~1.0.x" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/complex.js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", - "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", - "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.2.tgz", - "integrity": "sha512-Y2rxThOuNywTjnX/PgA5vWM6CZ9QB9sz9oGeCixV8MqXZO70z/5SHzf9EeBrEBK0PN36DnEBBu9O/aGWzKuMZQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-jest-runner": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/create-jest-runner/-/create-jest-runner-0.5.3.tgz", - "integrity": "sha512-a9VY2doMBmzRollJB3Ft3/Y5fBceSWJ4gdyVsg4/d7nP1S4715VG939s2VnITDj79YBmRgKhjGjNRv1c+Kre1g==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "jest-worker": "^24.0.0", - "throat": "^4.1.0" - }, - "bin": { - "create-jest-runner": "generator/index.js" - } - }, - "node_modules/create-jest-runner/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-jest-runner/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-jest-runner/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/create-jest-runner/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-jest-runner/node_modules/jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/create-jest-runner/node_modules/jest-worker/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/create-jest-runner/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/cyclist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", - "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", - "dev": true - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - } - }, - "node_modules/data-urls/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", - "dev": true - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "dependencies": { - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/duplexify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecdsa-secp256r1": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/ecdsa-secp256r1/-/ecdsa-secp256r1-1.3.3.tgz", - "integrity": "sha512-7JkHQ43iv9vT1U9tyGuxcE4+SMF/da+YiIMRpcwmbHmJQmqfFUuT6c7LKMasJ9soEpwFL0b9JyNkRjQ+vjVgpQ==", - "dependencies": { - "asn1.js": "^5.0.1", - "bn.js": "^4.11.8" - } - }, - "node_modules/ecdsa-secp256r1/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.513", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz", - "integrity": "sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/enhanced-resolve/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/enhanced-resolve/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/enhanced-resolve/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", - "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", - "dev": true, - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-latex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz", - "integrity": "sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.6.4", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", - "dev": true, - "dependencies": { - "flatted": "^3.2.7", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/flow-parser": { - "version": "0.216.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.216.1.tgz", - "integrity": "sha512-wstw46/C/8bRv/8RySCl15lK376j8DHxm41xFjD9eVL+jSS1UmVpbdLdA0LzGuS2v5uGgQiBLEj6mgSJQwW+MA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/flush-write-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/flush-write-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fraction.js": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", - "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true, - "optional": true - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.1" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-duration": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz", - "integrity": "sha512-G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==", - "dev": true - }, - "node_modules/husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", - "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.3" - } - }, - "node_modules/javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" - }, - "node_modules/jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", - "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.4", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.6.4" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", - "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.6.3", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", - "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.3", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-cli": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", - "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", - "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.4", - "@jest/types": "^29.6.3", - "babel-jest": "^29.6.4", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.4", - "jest-environment-node": "^29.6.4", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", - "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-docblock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", - "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", - "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-environment-jsdom": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", - "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", - "dev": true, - "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "jsdom": "^15.2.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-environment-jsdom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-environment-jsdom/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jest-environment-jsdom/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-node": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", - "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-fetch-mock": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", - "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", - "dependencies": { - "cross-fetch": "^3.0.4", - "promise-polyfill": "^8.1.3" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", - "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", - "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^25.5.0", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "co": "^4.6.0", - "expect": "^25.5.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^25.5.0", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/globals": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", - "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", - "dev": true, - "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/types": "^25.5.0", - "expect": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/source-map": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", - "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/test-sequencer": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", - "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/transform": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", - "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^25.5.0", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^3.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-regex-util": "^25.2.6", - "jest-util": "^25.5.0", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/babel-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", - "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", - "dev": true, - "dependencies": { - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/babel-plugin-jest-hoist": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", - "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/babel-preset-current-node-syntax": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", - "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/babel-preset-jest": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", - "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^25.5.0", - "babel-preset-current-node-syntax": "^0.1.2" - }, - "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-config": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", - "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.5.4", - "@jest/types": "^25.5.0", - "babel-jest": "^25.5.1", - "chalk": "^3.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^25.5.0", - "jest-environment-node": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-jasmine2": "^25.5.4", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "micromatch": "^4.0.2", - "pretty-format": "^25.5.0", - "realpath-native": "^2.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-docblock": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", - "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-each": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", - "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-environment-node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", - "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", - "dev": true, - "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-haste-map": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", - "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "@types/graceful-fs": "^4.1.2", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-serializer": "^25.5.0", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7", - "which": "^2.0.2" - }, - "engines": { - "node": ">= 8.3" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-leak-detector": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", - "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", - "dev": true, - "dependencies": { - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-resolve": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", - "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.1", - "read-pkg-up": "^7.0.1", - "realpath-native": "^2.0.0", - "resolve": "^1.17.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-runner": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", - "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-docblock": "^25.3.0", - "jest-haste-map": "^25.5.1", - "jest-jasmine2": "^25.5.4", - "jest-leak-detector": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "jest-runtime": "^25.5.4", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-runtime": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", - "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/globals": "^25.5.2", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-snapshot": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", - "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/prettier": "^1.19.0", - "chalk": "^3.0.0", - "expect": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "make-dir": "^3.0.0", - "natural-compare": "^1.4.0", - "pretty-format": "^25.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-validate": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", - "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "leven": "^3.1.0", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-jasmine2/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jest-jasmine2/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/jest-jasmine2/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", - "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", - "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.4", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", - "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-mock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", - "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", - "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", - "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.6.4" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", - "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.4", - "@jest/environment": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.6.3", - "jest-environment-node": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-leak-detector": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-util": "^29.6.3", - "jest-watcher": "^29.6.4", - "jest-worker": "^29.6.4", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", - "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/globals": "^29.6.4", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-serializer": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", - "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-snapshot": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", - "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.4", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.4", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.3", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", - "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", - "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watch-typeahead": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.5.0.tgz", - "integrity": "sha512-4r36w9vU8+rdg48hj0Z7TvcSqVP6Ao8dk04grlHQNgduyCB0SqrI0xWIl85ZhXrzYvxQ0N5H+rRLAejkQzEHeQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-regex-util": "^25.2.1", - "jest-watcher": "^25.2.4", - "slash": "^3.0.0", - "string-length": "^3.1.0", - "strip-ansi": "^6.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watch-typeahead/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", - "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", - "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-util": "^25.5.0", - "string-length": "^3.1.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jest-watch-typeahead/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "dev": true, - "dependencies": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-watcher": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", - "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", - "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.3", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jpjs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jpjs/-/jpjs-1.2.1.tgz", - "integrity": "sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dev": true, - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/jscodeshift": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.6.4.tgz", - "integrity": "sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.6", - "@babel/parser": "^7.1.6", - "@babel/plugin-proposal-class-properties": "^7.1.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/preset-env": "^7.1.6", - "@babel/preset-flow": "^7.0.0", - "@babel/preset-typescript": "^7.1.0", - "@babel/register": "^7.0.0", - "babel-core": "^7.0.0-bridge.0", - "colors": "^1.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.16.1", - "temp": "^0.8.1", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - } - }, - "node_modules/jscodeshift/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/jsdoc": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", - "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", - "dev": true, - "dependencies": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/jsdom/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json5-writer": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/json5-writer/-/json5-writer-0.1.8.tgz", - "integrity": "sha512-h5sqkk/vSKvESOUTBniGWs8p8nTzHsoDrxPS9enJfQVINqXv3lm+FAyizLwbrCwCn0q7NXqDBb+r8AdUdK3XZw==", - "dev": true, - "dependencies": { - "jscodeshift": "^0.6.3" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "dependencies": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libsodium-sumo": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.11.tgz", - "integrity": "sha512-bY+7ph7xpk51Ez2GbE10lXAQ5sJma6NghcIDaSPbM/G9elfrjLa0COHl/7P6Wb/JizQzl5UQontOOP1z0VwbLA==" - }, - "node_modules/libsodium-wrappers-sumo": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.11.tgz", - "integrity": "sha512-DGypHOmJbB1nZn89KIfGOAkDgfv5N6SBGC3Qvmy/On0P0WD1JQvNRS/e3UL3aFF+xC0m+MYz5M+MnRnK2HMrKQ==", - "dependencies": { - "libsodium-sumo": "^0.7.11" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.invokemap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", - "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.pullall": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", - "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", - "dev": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/lolex/node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "dev": true, - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mathjs": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", - "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", - "dependencies": { - "@babel/runtime": "^7.22.6", - "complex.js": "^2.1.1", - "decimal.js": "^10.4.3", - "escape-latex": "^1.2.0", - "fraction.js": "4.3.4", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^4.1.0" - }, - "bin": { - "mathjs": "bin/cli.js" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mico-spinner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mico-spinner/-/mico-spinner-1.4.0.tgz", - "integrity": "sha512-6fuiQX9qRMJACVlCX6pkbV3KnjSbobr10RLB+0CNk2Z+uKPulL7wMKZSoZEiLCOvzTQc0vghjKXKVGpiMIOABw==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.0" - } - }, - "node_modules/mico-spinner/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minami": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minami/-/minami-1.2.3.tgz", - "integrity": "sha512-3f2QqqbUC1usVux0FkQMFYB73yd9JIxmHSn1dWQacizL6hOUaNu6mA3KxZ9SfiCc4qgcgq+5XP59+hP7URa1Dw==", - "dev": true - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/move-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/msgpack5": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/msgpack5/-/msgpack5-5.3.2.tgz", - "integrity": "sha512-e9jz+6InQIUb2cGzZ/Mi+rQBs1KFLby+gNi+22VwQ1pnC9ieZjysKGmRMjdlf6IyjsltbgY4tGoHwHmyS7l94A==", - "dependencies": { - "bl": "^4.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/node-notifier": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", - "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.5", - "shellwords": "^0.1.1", - "uuid": "^8.3.2", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "engines": { - "node": ">=12.19" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optimize-css-assets-webpack-plugin": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz", - "integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==", - "dev": true, - "dependencies": { - "cssnano": "^5.0.2", - "last-call-webpack-plugin": "^3.0.0", - "postcss": "^8.2.1" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parallel-transform/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/parallel-transform/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/parallel-transform/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "optional": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "node_modules/pnp-webpack-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", - "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", - "dev": true, - "dependencies": { - "ts-pnp": "^1.1.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "dev": true, - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/progress-estimator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/progress-estimator/-/progress-estimator-0.2.2.tgz", - "integrity": "sha512-GF76Ac02MTJD6o2nMNtmtOFjwWCnHcvXyn5HOWPQnEMO8OTLw7LAvNmrwe8LmdsB+eZhwUu9fX/c9iQnBxWaFA==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "cli-spinners": "^1.3.1", - "humanize-duration": "^3.15.3", - "log-update": "^2.3.0" - } - }, - "node_modules/progress-estimator/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/progress-estimator/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-polyfill": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", - "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", - "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@puppeteer/browsers": "0.5.0", - "cosmiconfig": "8.1.3", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.11.1" - } - }, - "node_modules/puppeteer-core": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", - "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", - "dev": true, - "dependencies": { - "@puppeteer/browsers": "0.5.0", - "chromium-bidi": "0.4.7", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.13.0" - }, - "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/puppeteer-core/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/realpath-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", - "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/recast": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.16.2.tgz", - "integrity": "sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A==", - "dev": true, - "dependencies": { - "ast-types": "0.11.7", - "esprima": "~4.0.0", - "private": "~0.1.5", - "source-map": "~0.6.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rollup": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "bin": { - "rollup": "dist/bin/rollup" - } - }, - "node_modules/rollup-plugin-sourcemaps": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", - "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.9", - "source-map-resolve": "^0.6.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "@types/node": ">=10.0.0", - "rollup": ">=0.31.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/rollup-plugin-terser": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", - "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.5.5", - "jest-worker": "^24.9.0", - "rollup-pluginutils": "^2.8.2", - "serialize-javascript": "^4.0.0", - "terser": "^4.6.2" - }, - "peerDependencies": { - "rollup": ">=0.66.0 <3" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/rollup-plugin-typescript2": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz", - "integrity": "sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.17.0", - "tslib": "2.0.1" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", - "dev": true - }, - "node_modules/rollup-plugin-typescript2/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "dev": true, - "dependencies": { - "xmlchars": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "node_modules/shiki": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", - "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", - "dev": true, - "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/size-limit": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-5.0.5.tgz", - "integrity": "sha512-DtblS3Qc1SmtEtAYE6RGmg1UFdIzz2aWhlnzbBc3FYc0XMsTVT0kKB40DMIZ/yU5JztkMetdqB5Q5Pow/iVazg==", - "dev": true, - "dependencies": { - "bytes-iec": "^3.1.1", - "chokidar": "^3.5.2", - "ci-job-number": "^1.2.2", - "globby": "^11.0.4", - "lilconfig": "^2.0.3", - "mico-spinner": "^1.3.0", - "picocolors": "^0.1.0" - }, - "bin": { - "size-limit": "bin.js" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/size-limit/node_modules/picocolors": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.1.0.tgz", - "integrity": "sha512-W+3MFREUEjPt0MnYaR51VkLw8tY8UubrLOqcBmaQocZhM34hQhjg50FQ0c6f0UldPlecieoqUqI6ToM/dNblDw==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-browserify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-browserify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-http/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-http/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-http/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", - "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/structured-headers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.5.0.tgz", - "integrity": "sha512-oLnmXSsjhud+LxRJpvokwP8ImEB2wTg8sg30buwfVViKMuluTv3BlOJHUX9VW9pJ2nQOxmx87Z0kB86O4cphag==" - }, - "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dev": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-encoding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "deprecated": "no longer maintained" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-migrate": { - "version": "0.1.35", - "resolved": "https://registry.npmjs.org/ts-migrate/-/ts-migrate-0.1.35.tgz", - "integrity": "sha512-EmXahqwIP0a6fE1BLKKVMgJEeYn9V+CxJ19qFJ/DzkPL4PjDI/FcgPo8D519amBPy2nnlc/x1V6R6aIeHdD87w==", - "dev": true, - "dependencies": { - "create-jest-runner": "^0.5.3", - "json5": "^2.1.1", - "json5-writer": "^0.1.8", - "ts-migrate-plugins": "^0.1.35", - "ts-migrate-server": "^0.1.33", - "updatable-log": "^0.2.0", - "yargs": "^15.0.2" - }, - "bin": { - "ts-migrate": "build/cli.js", - "ts-migrate-full": "bin/ts-migrate-full.sh" - }, - "peerDependencies": { - "typescript": ">4.0" - } - }, - "node_modules/ts-migrate-plugins": { - "version": "0.1.35", - "resolved": "https://registry.npmjs.org/ts-migrate-plugins/-/ts-migrate-plugins-0.1.35.tgz", - "integrity": "sha512-DUkx7ClKhxKYPWDha9DJTZ6LhwEUszL90uH5I/O11K/6TbA96ytln1O3HL6Pt83i4mAKOlg0mQ6AMsPtL5FFkQ==", - "dev": true, - "dependencies": { - "eslint": "^7.14.0", - "jscodeshift": "^0.13.0", - "json-schema": "^0.4.0", - "ts-migrate-server": "^0.1.33" - }, - "peerDependencies": { - "typescript": ">4.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-migrate-plugins/node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-migrate-plugins/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-migrate-plugins/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-migrate-plugins/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/jscodeshift": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", - "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.20.4", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/ts-migrate-plugins/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/recast": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", - "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", - "dev": true, - "dependencies": { - "ast-types": "0.14.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ts-migrate-plugins/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/ts-migrate-server": { - "version": "0.1.33", - "resolved": "https://registry.npmjs.org/ts-migrate-server/-/ts-migrate-server-0.1.33.tgz", - "integrity": "sha512-MYHy10yzL2fkb2FHFQ9f54gqc5KkaVthTjtpwS4bTroYCONDelp1hbz5nxKWaP3q2oc3kBVeGuAR91RNI+yK+g==", - "dev": true, - "dependencies": { - "@ts-morph/bootstrap": "^0.16.0", - "pretty-ms": "^7.0.1", - "updatable-log": "^0.2.0" - }, - "peerDependencies": { - "typescript": ">4.0" - } - }, - "node_modules/ts-migrate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-migrate/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/ts-migrate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-migrate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-migrate/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-migrate/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-migrate/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ts-mockito": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", - "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.5" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/tsdx/-/tsdx-0.14.1.tgz", - "integrity": "sha512-keHmFdCL2kx5nYFlBdbE3639HQ2v9iGedAFAajobrUTH2wfX0nLPdDhbHv+GHLQZqf0c5ur1XteE8ek/+Eyj5w==", - "dev": true, - "dependencies": { - "@babel/core": "^7.4.4", - "@babel/helper-module-imports": "^7.0.0", - "@babel/parser": "^7.11.5", - "@babel/plugin-proposal-class-properties": "^7.4.4", - "@babel/preset-env": "^7.11.0", - "@babel/traverse": "^7.11.5", - "@rollup/plugin-babel": "^5.1.0", - "@rollup/plugin-commonjs": "^11.0.0", - "@rollup/plugin-json": "^4.0.0", - "@rollup/plugin-node-resolve": "^9.0.0", - "@rollup/plugin-replace": "^2.2.1", - "@types/jest": "^25.2.1", - "@typescript-eslint/eslint-plugin": "^2.12.0", - "@typescript-eslint/parser": "^2.12.0", - "ansi-escapes": "^4.2.1", - "asyncro": "^3.0.0", - "babel-eslint": "^10.0.3", - "babel-plugin-annotate-pure-calls": "^0.4.0", - "babel-plugin-dev-expression": "^0.2.1", - "babel-plugin-macros": "^2.6.1", - "babel-plugin-polyfill-regenerator": "^0.0.4", - "babel-plugin-transform-rename-import": "^2.3.0", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "enquirer": "^2.3.4", - "eslint": "^6.1.0", - "eslint-config-prettier": "^6.0.0", - "eslint-config-react-app": "^5.2.1", - "eslint-plugin-flowtype": "^3.13.0", - "eslint-plugin-import": "^2.18.2", - "eslint-plugin-jsx-a11y": "^6.2.3", - "eslint-plugin-prettier": "^3.1.0", - "eslint-plugin-react": "^7.14.3", - "eslint-plugin-react-hooks": "^2.2.0", - "execa": "^4.0.3", - "fs-extra": "^9.0.0", - "jest": "^25.3.0", - "jest-watch-typeahead": "^0.5.0", - "jpjs": "^1.2.1", - "lodash.merge": "^4.6.2", - "ora": "^4.0.3", - "pascal-case": "^3.1.1", - "prettier": "^1.19.1", - "progress-estimator": "^0.2.2", - "regenerator-runtime": "^0.13.7", - "rollup": "^1.32.1", - "rollup-plugin-sourcemaps": "^0.6.2", - "rollup-plugin-terser": "^5.1.2", - "rollup-plugin-typescript2": "^0.27.3", - "sade": "^1.4.2", - "semver": "^7.1.1", - "shelljs": "^0.8.3", - "tiny-glob": "^0.2.6", - "ts-jest": "^25.3.1", - "tslib": "^1.9.3", - "typescript": "^3.7.3" - }, - "bin": { - "tsdx": "dist/index.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.0.3.tgz", - "integrity": "sha512-dULDd/APiP4JowYDAMosecKOi/1v+UId99qhBGiO3myM29KtAVKS/R3x3OJJNBR0FeYB1BcYb2dCwkhqvxWXXQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/traverse": "^7.11.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/console/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@jest/core": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz", - "integrity": "sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/reporters": "^25.5.1", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^25.5.0", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-resolve-dependencies": "^25.5.4", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "jest-watcher": "^25.5.0", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "realpath-native": "^2.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/core/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tsdx/node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/globals": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", - "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", - "dev": true, - "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/types": "^25.5.0", - "expect": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/reporters": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz", - "integrity": "sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^25.5.1", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^3.1.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^4.1.3" - }, - "engines": { - "node": ">= 8.3" - }, - "optionalDependencies": { - "node-notifier": "^6.0.0" - } - }, - "node_modules/tsdx/node_modules/@jest/reporters/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@jest/source-map": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", - "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/test-sequencer": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", - "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/transform": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", - "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^25.5.0", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^3.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-regex-util": "^25.2.6", - "jest-util": "^25.5.0", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/transform/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/types/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/tsdx/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "node_modules/tsdx/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/tsdx/node_modules/@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^2.0.0", - "eslint": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tsdx/node_modules/@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "dev": true, - "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tsdx/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tsdx/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/babel-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", - "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", - "dev": true, - "dependencies": { - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/tsdx/node_modules/babel-jest/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/babel-plugin-jest-hoist": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", - "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "node_modules/tsdx/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.0.4.tgz", - "integrity": "sha512-+/uCzO9JTYVZVGCpZpVAQkgPGt2zkR0VYiZvJ4aVoCe4ccgpKvNQqcjzAgQzSsjK64Jhc5hvrCR3l0087BevkA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.0.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tsdx/node_modules/babel-preset-current-node-syntax": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", - "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/tsdx/node_modules/babel-preset-jest": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", - "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^25.5.0", - "babel-preset-current-node-syntax": "^0.1.2" - }, - "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/tsdx/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsdx/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/tsdx/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/tsdx/node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tsdx/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/tsdx/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/tsdx/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/tsdx/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/tsdx/node_modules/eslint-config-react-app": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", - "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", - "dev": true, - "dependencies": { - "confusing-browser-globals": "^1.0.9" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "2.x", - "@typescript-eslint/parser": "2.x", - "babel-eslint": "10.x", - "eslint": "6.x", - "eslint-plugin-flowtype": "3.x || 4.x", - "eslint-plugin-import": "2.x", - "eslint-plugin-jsx-a11y": "6.x", - "eslint-plugin-react": "7.x", - "eslint-plugin-react-hooks": "1.x || 2.x" - } - }, - "node_modules/tsdx/node_modules/eslint-plugin-react-hooks": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz", - "integrity": "sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==", - "dev": true, - "engines": { - "node": ">=7" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/tsdx/node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true, - "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/tsdx/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tsdx/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/tsdx/node_modules/expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/tsdx/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsdx/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsdx/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/tsdx/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/tsdx/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/jest": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz", - "integrity": "sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==", - "dev": true, - "dependencies": { - "@jest/core": "^25.5.4", - "import-local": "^3.0.2", - "jest-cli": "^25.5.4" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-changed-files": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", - "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "execa": "^3.2.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-changed-files/node_modules/execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": "^8.12.0 || >=9.7.0" - } - }, - "node_modules/tsdx/node_modules/jest-cli": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz", - "integrity": "sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==", - "dev": true, - "dependencies": { - "@jest/core": "^25.5.4", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^25.5.4", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "prompts": "^2.0.1", - "realpath-native": "^2.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-cli/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-config": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", - "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.5.4", - "@jest/types": "^25.5.0", - "babel-jest": "^25.5.1", - "chalk": "^3.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^25.5.0", - "jest-environment-node": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-jasmine2": "^25.5.4", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "micromatch": "^4.0.2", - "pretty-format": "^25.5.0", - "realpath-native": "^2.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-config/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-diff/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-docblock": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", - "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-environment-node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", - "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", - "dev": true, - "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-environment-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-haste-map": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", - "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "@types/graceful-fs": "^4.1.2", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-serializer": "^25.5.0", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7", - "which": "^2.0.2" - }, - "engines": { - "node": ">= 8.3" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/tsdx/node_modules/jest-leak-detector": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", - "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", - "dev": true, - "dependencies": { - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-message-util/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-resolve": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", - "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.1", - "read-pkg-up": "^7.0.1", - "realpath-native": "^2.0.0", - "resolve": "^1.17.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-resolve-dependencies": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", - "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-snapshot": "^25.5.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-resolve/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-runner": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", - "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-docblock": "^25.3.0", - "jest-haste-map": "^25.5.1", - "jest-jasmine2": "^25.5.4", - "jest-leak-detector": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "jest-runtime": "^25.5.4", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-runner/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-runtime": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", - "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/globals": "^25.5.2", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-runtime/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-snapshot": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", - "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/prettier": "^1.19.0", - "chalk": "^3.0.0", - "expect": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "make-dir": "^3.0.0", - "natural-compare": "^1.4.0", - "pretty-format": "^25.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-snapshot/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-snapshot/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-util/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-validate": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", - "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "leven": "^3.1.0", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-validate/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/jest-validate/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-watcher": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", - "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", - "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-util": "^25.5.0", - "string-length": "^3.1.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-watcher/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tsdx/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsdx/node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/tsdx/node_modules/node-notifier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz", - "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==", - "dev": true, - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.1.1", - "semver": "^6.3.0", - "shellwords": "^0.1.1", - "which": "^1.3.1" - } - }, - "node_modules/tsdx/node_modules/node-notifier/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/node-notifier/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/tsdx/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tsdx/node_modules/p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tsdx/node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/tsdx/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/tsdx/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tsdx/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tsdx/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/tsdx/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "dev": true, - "dependencies": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tsdx/node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/tsdx/node_modules/ts-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-25.5.1.tgz", - "integrity": "sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "micromatch": "4.x", - "mkdirp": "0.x", - "semver": "6.x", - "yargs-parser": "18.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": ">= 8" - }, - "peerDependencies": { - "jest": ">=25 <26", - "typescript": ">=3.4 <4.0" - } - }, - "node_modules/tsdx/node_modules/ts-jest/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsdx/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tsdx/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/tsdx/node_modules/v8-to-istanbul": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", - "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": "8.x.x || >=10.10.0" - } - }, - "node_modules/tsdx/node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tsdx/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/tsdx/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-function": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", - "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typedoc": { - "version": "0.24.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", - "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", - "dev": true, - "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.0", - "shiki": "^0.14.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 14.14" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" - } - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/updatable-log": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/updatable-log/-/updatable-log-0.2.0.tgz", - "integrity": "sha512-gR48/mTR6YFB+B1sNoap3nx8HFbEvDl0ej9KhlQTFZdmP8yL5fzFiCUfeHCUf1QvNnXowY1pM9iiGkPKrd0XyQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "figures": "^3.0.0", - "log-update": "^3.3.0" - } - }, - "node_modules/updatable-log/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/updatable-log/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/updatable-log/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/updatable-log/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/log-update": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-3.4.0.tgz", - "integrity": "sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.2.0", - "cli-cursor": "^2.1.0", - "wrap-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/updatable-log/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/updatable-log/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/updatable-log/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.2.tgz", - "integrity": "sha512-7yIgNnrST44S7PJ5+jXbdIupfU1nWUdQJBFBeJRclPXiWgCvrSq5Frw8lr/i//n5sqDfzoKmBymMS81l4U/7cg==", - "dev": true, - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.11.2" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/urlsafe-base64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", - "integrity": "sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, - "dependencies": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "node_modules/w3c-xmlserializer/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "optional": true - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, - "node_modules/watchpack-chokidar2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/weak-map": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", - "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "4.47.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", - "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", - "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "is-plain-object": "^5.0.0", - "lodash.debounce": "^4.0.8", - "lodash.escape": "^4.0.1", - "lodash.flatten": "^4.4.0", - "lodash.invokemap": "^4.6.0", - "lodash.pullall": "^4.2.0", - "lodash.uniqby": "^4.7.0", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/webpack/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.19", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", - "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "dependencies": { - "errno": "~0.1.7" - } - }, - "node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", - "dev": true, - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/write/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true + "name": "signify-ts", + "version": "0.1.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "signify-ts", + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "@types/libsodium-wrappers-sumo": "^0.7.5", + "blake3": "^2.1.7", + "buffer": "^6.0.3", + "cbor": "^8.0.0", + "collections": "^5.1.12", + "ecdsa-secp256r1": "^1.3.3", + "jest-fetch-mock": "^3.0.3", + "libsodium-wrappers-sumo": "^0.7.9", + "lodash": "^4.17.21", + "mathjs": "^11.8.2", + "msgpack5": "^5.3.2", + "structured-headers": "^0.5.0", + "text-encoding": "^0.7.0", + "ts-node": "^10.9.1", + "urlsafe-base64": "^1.0.0", + "whatwg-fetch": "^3.6.17", + "xregexp": "^5.1.0" + }, + "devDependencies": { + "@mermaid-js/mermaid-cli": "^10.3.0", + "@size-limit/preset-small-lib": "^5.0.4", + "@types/lodash": "^4.14.185", + "@types/node": "^18.11.18", + "@types/text-encoding": "^0.0.36", + "@types/urlsafe-base64": "^1.0.28", + "husky": "^7.0.2", + "jest": "^29.3.1", + "jsdoc": "^4.0.2", + "minami": "^1.2.3", + "prettier": "^3.0.3", + "size-limit": "^5.0.4", + "ts-migrate": "^0.1.23", + "ts-mockito": "^2.6.1", + "tsdx": "^0.14.1", + "tslib": "^2.3.1", + "typedoc": "^0.24.8", + "typescript": "^4.9.4" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", + "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.17", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.17", + "@babel/types": "^7.22.17", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", + "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.17.tgz", + "integrity": "sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.17" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.17.tgz", + "integrity": "sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.17" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", + "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", + "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", + "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", + "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", + "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", + "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.15.tgz", + "integrity": "sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.15", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.15", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.15", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.15", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-flow": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", + "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-flow-strip-types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz", + "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-typescript": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", + "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/register/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.15.tgz", + "integrity": "sha512-SAj8oKi8UogVi6eXQXKNPu8qZ78Yzy7zawrlTr0M+IuW/g8Qe9gVDhGcF9h1S69OyACpYoLxEzpjs1M15sI5wQ==", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", + "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.17", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", + "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", + "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", + "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/reporters": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.6.3", + "jest-config": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-resolve-dependencies": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "jest-watcher": "^29.6.4", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/environment": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", + "dev": true, + "dependencies": { + "expect": "^29.6.4", + "jest-snapshot": "^29.6.4" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", + "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", + "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/types": "^29.6.3", + "jest-mock": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", + "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", + "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", + "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", + "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdoc/salty": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", + "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v12.0.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.4.0.tgz", + "integrity": "sha512-sXohfGD6xgR8VEKvLdvSCndFaFNVTlyXjgZlJ3x8U3/J0V2VTfLIZO94Gt8KUPUccFWci8dRYDGG0fQerB+aIA==", + "dev": true, + "dependencies": { + "chalk": "^5.0.1", + "commander": "^10.0.0", + "puppeteer": "^19.0.0" + }, + "bin": { + "mmdc": "src/cli.js" + }, + "engines": { + "node": "^14.13 || >=16.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.23", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", + "dev": true + }, + "node_modules/@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "dev": true, + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz", + "integrity": "sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.8", + "commondir": "^1.0.1", + "estree-walker": "^1.0.1", + "glob": "^7.1.2", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.8" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", + "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@size-limit/file": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-5.0.5.tgz", + "integrity": "sha512-lnrQYRmTt0QzV08R9M61q0+EM7Jkcp1qZ/+BG01OOFA0rZtfHt9aKCdvoSEoMrIxK44A9lWHRmyNVnKKDfKbWA==", + "dev": true, + "dependencies": { + "semver": "7.3.5" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + }, + "peerDependencies": { + "size-limit": "5.0.5" + } + }, + "node_modules/@size-limit/preset-small-lib": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@size-limit/preset-small-lib/-/preset-small-lib-5.0.5.tgz", + "integrity": "sha512-BHZwlSEaxHPqOOienQpgoH+ueWYryXiusFpNKRj1Jmyv6/rlOxww1nTCljNhh9+hOKOsahqGbvl43cr8o7NQiQ==", + "dev": true, + "dependencies": { + "@size-limit/file": "5.0.5", + "@size-limit/webpack": "5.0.5" + }, + "peerDependencies": { + "size-limit": "5.0.5" + } + }, + "node_modules/@size-limit/webpack": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@size-limit/webpack/-/webpack-5.0.5.tgz", + "integrity": "sha512-caLXPNj1iRNeBRoycKTLMLRlLTCjIv80VmBTCag5QZMuNNu4g0weoxjnU7Jbf5YneTuXuEhKSjpc95rB4Biq7Q==", + "dev": true, + "dependencies": { + "css-loader": "^5.2.6", + "escape-string-regexp": "^4.0.0", + "file-loader": "^6.2.0", + "mkdirp": "^1.0.4", + "nanoid": "^3.1.28", + "optimize-css-assets-webpack-plugin": "^6.0.1", + "pnp-webpack-plugin": "^1.7.0", + "style-loader": "^2.0.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^4.4.2" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + }, + "peerDependencies": { + "size-limit": "5.0.5" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@ts-morph/bootstrap": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@ts-morph/bootstrap/-/bootstrap-0.16.0.tgz", + "integrity": "sha512-FYW3bK5EBeAgpHu0qZ57gHbLjzgzC81y5EJmrebzIhXSYg6OgZu5lFHpF5NJ7CwM7ZMhxX1PG+DRA8e+skopKw==", + "dev": true, + "dependencies": { + "@ts-morph/common": "~0.16.0" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.16.0.tgz", + "integrity": "sha512-SgJpzkTgZKLKqQniCjLaE3c2L2sdL7UShvmTmPBejAKd2OKV/yfMpQ2IWpAuA+VY5wy7PkSUaEObIqEK6afFuw==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "minimatch": "^5.1.0", + "mkdirp": "^1.0.4", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@ts-morph/common/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@ts-morph/common/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.3.tgz", + "integrity": "sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==", + "dev": true, + "dependencies": { + "jest-diff": "^25.2.1", + "pretty-format": "^25.2.1" + } + }, + "node_modules/@types/jest/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@types/jest/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest/node_modules/@types/yargs": { + "version": "15.0.15", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", + "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@types/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@types/jest/node_modules/diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", + "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@types/jest/node_modules/jest-get-type": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/libsodium-wrappers": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz", + "integrity": "sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg==" + }, + "node_modules/@types/libsodium-wrappers-sumo": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.6.tgz", + "integrity": "sha512-86R2bYU/DKVWw3q2btxTUlFO3lYKLyodbCsxxSybNQonPzPxmQkNtKCYmkV0dWQ9ZQsGIOzNNPU9RjJUALjoEg==", + "dependencies": { + "@types/libsodium-wrappers": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dev": true, + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.17.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", + "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/text-encoding": { + "version": "0.0.36", + "resolved": "https://registry.npmjs.org/@types/text-encoding/-/text-encoding-0.0.36.tgz", + "integrity": "sha512-LfATA7bH+MtAPlOshYgQ1M3n2r0TSB6Ns5ESvKYlVugkKErQg5oFbR2qO7XrKtNsrtzedDvTeqQfyTjdPJH7jw==", + "dev": true + }, + "node_modules/@types/urlsafe-base64": { + "version": "1.0.29", + "resolved": "https://registry.npmjs.org/@types/urlsafe-base64/-/urlsafe-base64-1.0.29.tgz", + "integrity": "sha512-RAowJfSG6zhSxDFl7/QC/vGeWIyJLf7pqFoh+iLP0Y/GOsH1ddmZvo2oFug/Z5pGfUM05NMQFCnzw3sSmMA72A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "dependencies": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals/node_modules/acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.7.tgz", + "integrity": "sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "optional": true + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/asyncro": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz", + "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/axe-core": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", + "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-jest": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", + "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.6.4", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-plugin-annotate-pure-calls": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz", + "integrity": "sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA==", + "dev": true, + "peerDependencies": { + "@babel/core": "^6.0.0-0 || 7.x" + } + }, + "node_modules/babel-plugin-dev-expression": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.3.tgz", + "integrity": "sha512-rP5LK9QQTzCW61nVVzw88En1oK8t8gTsIeC6E61oelxNsU842yMjF0G1MxhvUpCkxCEIj7sE8/e5ieTheT//uw==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-rename-import": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-rename-import/-/babel-plugin-transform-rename-import-2.3.0.tgz", + "integrity": "sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ==", + "dev": true + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/blake3": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/blake3/-/blake3-2.1.7.tgz", + "integrity": "sha512-5d+TdKJvju96IyEaGJ0eO6CHbckWi+NBrCezGYM/WsnI3R03aLL2TWfsuZSh1rs0fTv/L3ps/r0vykjYurcIwA==", + "hasInstallScript": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "node_modules/bytes-iec": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", + "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001532", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", + "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "dev": true, + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/ci-job-number": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ci-job-number/-/ci-job-number-1.2.2.tgz", + "integrity": "sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collections": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/collections/-/collections-5.1.13.tgz", + "integrity": "sha512-SCb6Qd+d3Z02corWQ7/mqXiXeeTdHvkP6TeFSYfGYdCFp1WrjSNZ3j6y8Y3T/7osGEe0iOcU2g1d346l99m4Lg==", + "dependencies": { + "weak-map": "~1.0.x" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/complex.js": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", + "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-concurrently/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", + "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.2.tgz", + "integrity": "sha512-Y2rxThOuNywTjnX/PgA5vWM6CZ9QB9sz9oGeCixV8MqXZO70z/5SHzf9EeBrEBK0PN36DnEBBu9O/aGWzKuMZQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-jest-runner": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/create-jest-runner/-/create-jest-runner-0.5.3.tgz", + "integrity": "sha512-a9VY2doMBmzRollJB3Ft3/Y5fBceSWJ4gdyVsg4/d7nP1S4715VG939s2VnITDj79YBmRgKhjGjNRv1c+Kre1g==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "jest-worker": "^24.0.0", + "throat": "^4.1.0" + }, + "bin": { + "create-jest-runner": "generator/index.js" + } + }, + "node_modules/create-jest-runner/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-jest-runner/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-jest-runner/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/create-jest-runner/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-jest-runner/node_modules/jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/create-jest-runner/node_modules/jest-worker/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/create-jest-runner/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/cyclist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", + "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "dependencies": { + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-secp256r1": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/ecdsa-secp256r1/-/ecdsa-secp256r1-1.3.3.tgz", + "integrity": "sha512-7JkHQ43iv9vT1U9tyGuxcE4+SMF/da+YiIMRpcwmbHmJQmqfFUuT6c7LKMasJ9soEpwFL0b9JyNkRjQ+vjVgpQ==", + "dependencies": { + "asn1.js": "^5.0.1", + "bn.js": "^4.11.8" + } + }, + "node_modules/ecdsa-secp256r1/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.513", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz", + "integrity": "sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enhanced-resolve/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/enhanced-resolve/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/enhanced-resolve/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/enhanced-resolve/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", + "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "dev": true, + "dependencies": { + "get-stdin": "^6.0.0" + }, + "bin": { + "eslint-config-prettier-check": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=3.14.1" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz", + "integrity": "sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/flow-parser": { + "version": "0.216.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.216.1.tgz", + "integrity": "sha512-wstw46/C/8bRv/8RySCl15lK376j8DHxm41xFjD9eVL+jSS1UmVpbdLdA0LzGuS2v5uGgQiBLEj6mgSJQwW+MA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/flush-write-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/flush-write-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/flush-write-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fraction.js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true, + "optional": true + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.1" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-duration": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz", + "integrity": "sha512-G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==", + "dev": true + }, + "node_modules/husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "optional": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", + "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.3" + } + }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" + }, + "node_modules/jest": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", + "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.4", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.6.4" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", + "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", + "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.3", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", + "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", + "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-jest": "^29.6.4", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.4", + "jest-environment-node": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", + "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-docblock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", + "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", + "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-jsdom": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", + "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", + "dev": true, + "dependencies": { + "@jest/environment": "^25.5.0", + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "jsdom": "^15.2.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", + "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", + "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "lolex": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "15.0.15", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", + "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-mock": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", + "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-environment-jsdom/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-environment-jsdom/node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", + "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-fetch-mock": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", + "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", + "dependencies": { + "cross-fetch": "^3.0.4", + "promise-polyfill": "^8.1.3" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", + "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", + "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^25.5.0", + "@jest/source-map": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "co": "^4.6.0", + "expect": "^25.5.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^25.5.0", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-runtime": "^25.5.4", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "pretty-format": "^25.5.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/console": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", + "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-message-util": "^25.5.0", + "jest-util": "^25.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/environment": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", + "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/fake-timers": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", + "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "lolex": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/globals": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", + "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", + "dev": true, + "dependencies": { + "@jest/environment": "^25.5.0", + "@jest/types": "^25.5.0", + "expect": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/source-map": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", + "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/test-result": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", + "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/types": "^25.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/test-sequencer": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", + "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", + "dev": true, + "dependencies": { + "@jest/test-result": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-runner": "^25.5.4", + "jest-runtime": "^25.5.4" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/transform": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", + "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^25.5.0", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^3.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-regex-util": "^25.2.6", + "jest-util": "^25.5.0", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "15.0.15", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", + "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/babel-jest": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", + "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", + "dev": true, + "dependencies": { + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/babel-plugin-jest-hoist": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", + "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/babel-preset-current-node-syntax": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", + "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/babel-preset-jest": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", + "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^25.5.0", + "babel-preset-current-node-syntax": "^0.1.2" + }, + "engines": { + "node": ">= 8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/expect": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", + "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-config": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", + "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^25.5.4", + "@jest/types": "^25.5.0", + "babel-jest": "^25.5.1", + "chalk": "^3.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^25.5.0", + "jest-environment-node": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-jasmine2": "^25.5.4", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "micromatch": "^4.0.2", + "pretty-format": "^25.5.0", + "realpath-native": "^2.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-diff": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", + "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-docblock": { + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", + "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-each": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", + "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-get-type": "^25.2.6", + "jest-util": "^25.5.0", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-environment-node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", + "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", + "dev": true, + "dependencies": { + "@jest/environment": "^25.5.0", + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-get-type": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-haste-map": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", + "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "@types/graceful-fs": "^4.1.2", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-serializer": "^25.5.0", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7", + "which": "^2.0.2" + }, + "engines": { + "node": ">= 8.3" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-leak-detector": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", + "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", + "dev": true, + "dependencies": { + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", + "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-mock": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", + "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-regex-util": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-resolve": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", + "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "browser-resolve": "^1.11.3", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.1", + "read-pkg-up": "^7.0.1", + "realpath-native": "^2.0.0", + "resolve": "^1.17.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-runner": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", + "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-docblock": "^25.3.0", + "jest-haste-map": "^25.5.1", + "jest-jasmine2": "^25.5.4", + "jest-leak-detector": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "jest-runtime": "^25.5.4", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-runtime": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", + "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/globals": "^25.5.2", + "@jest/source-map": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-haste-map": "^25.5.1", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-snapshot": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", + "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/prettier": "^1.19.0", + "chalk": "^3.0.0", + "expect": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "make-dir": "^3.0.0", + "natural-compare": "^1.4.0", + "pretty-format": "^25.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-validate": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", + "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "jest-get-type": "^25.2.6", + "leven": "^3.1.0", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-jasmine2/node_modules/pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-jasmine2/node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/jest-jasmine2/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", + "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-mock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", + "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", + "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.6.4" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", + "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/environment": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.6.3", + "jest-environment-node": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-leak-detector": "^29.6.3", + "jest-message-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-util": "^29.6.3", + "jest-watcher": "^29.6.4", + "jest-worker": "^29.6.4", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", + "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/globals": "^29.6.4", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-serializer": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", + "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-snapshot": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", + "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.3", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", + "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watch-typeahead": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.5.0.tgz", + "integrity": "sha512-4r36w9vU8+rdg48hj0Z7TvcSqVP6Ao8dk04grlHQNgduyCB0SqrI0xWIl85ZhXrzYvxQ0N5H+rRLAejkQzEHeQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "jest-regex-util": "^25.2.1", + "jest-watcher": "^25.2.4", + "slash": "^3.0.0", + "string-length": "^3.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", + "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-message-util": "^25.5.0", + "jest-util": "^25.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", + "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/types": "^25.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "15.0.15", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", + "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watch-typeahead/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", + "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", + "dev": true, + "dependencies": { + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "jest-util": "^25.5.0", + "string-length": "^3.1.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-watch-typeahead/node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "dev": true, + "dependencies": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-watcher": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", + "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.3", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jpjs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jpjs/-/jpjs-1.2.1.tgz", + "integrity": "sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dev": true, + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jscodeshift": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.6.4.tgz", + "integrity": "sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.6", + "@babel/parser": "^7.1.6", + "@babel/plugin-proposal-class-properties": "^7.1.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/preset-env": "^7.1.6", + "@babel/preset-flow": "^7.0.0", + "@babel/preset-typescript": "^7.1.0", + "@babel/register": "^7.0.0", + "babel-core": "^7.0.0-bridge.0", + "colors": "^1.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.16.1", + "temp": "^0.8.1", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + } + }, + "node_modules/jscodeshift/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", + "dev": true, + "dependencies": { + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5-writer": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/json5-writer/-/json5-writer-0.1.8.tgz", + "integrity": "sha512-h5sqkk/vSKvESOUTBniGWs8p8nTzHsoDrxPS9enJfQVINqXv3lm+FAyizLwbrCwCn0q7NXqDBb+r8AdUdK3XZw==", + "dev": true, + "dependencies": { + "jscodeshift": "^0.6.3" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "dev": true, + "dependencies": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libsodium-sumo": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.11.tgz", + "integrity": "sha512-bY+7ph7xpk51Ez2GbE10lXAQ5sJma6NghcIDaSPbM/G9elfrjLa0COHl/7P6Wb/JizQzl5UQontOOP1z0VwbLA==" + }, + "node_modules/libsodium-wrappers-sumo": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.11.tgz", + "integrity": "sha512-DGypHOmJbB1nZn89KIfGOAkDgfv5N6SBGC3Qvmy/On0P0WD1JQvNRS/e3UL3aFF+xC0m+MYz5M+MnRnK2HMrKQ==", + "dependencies": { + "libsodium-sumo": "^0.7.11" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.invokemap": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", + "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.pullall": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", + "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lolex": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", + "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/lolex/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "dev": true, + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/mathjs": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", + "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "4.3.4", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.0" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/memory-fs/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/memory-fs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/memory-fs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mico-spinner": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mico-spinner/-/mico-spinner-1.4.0.tgz", + "integrity": "sha512-6fuiQX9qRMJACVlCX6pkbV3KnjSbobr10RLB+0CNk2Z+uKPulL7wMKZSoZEiLCOvzTQc0vghjKXKVGpiMIOABw==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.0" + } + }, + "node_modules/mico-spinner/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minami": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minami/-/minami-1.2.3.tgz", + "integrity": "sha512-3f2QqqbUC1usVux0FkQMFYB73yd9JIxmHSn1dWQacizL6hOUaNu6mA3KxZ9SfiCc4qgcgq+5XP59+hP7URa1Dw==", + "dev": true + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/move-concurrently/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/msgpack5": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/msgpack5/-/msgpack5-5.3.2.tgz", + "integrity": "sha512-e9jz+6InQIUb2cGzZ/Mi+rQBs1KFLby+gNi+22VwQ1pnC9ieZjysKGmRMjdlf6IyjsltbgY4tGoHwHmyS7l94A==", + "dependencies": { + "bl": "^4.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/node-libs-browser/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/node-notifier": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", + "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.5", + "shellwords": "^0.1.1", + "uuid": "^8.3.2", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "engines": { + "node": ">=12.19" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optimize-css-assets-webpack-plugin": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz", + "integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==", + "dev": true, + "dependencies": { + "cssnano": "^5.0.2", + "last-call-webpack-plugin": "^3.0.0", + "postcss": "^8.2.1" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parallel-transform/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/parallel-transform/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/parallel-transform/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/parallel-transform/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true, + "optional": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "dev": true, + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", + "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/progress-estimator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/progress-estimator/-/progress-estimator-0.2.2.tgz", + "integrity": "sha512-GF76Ac02MTJD6o2nMNtmtOFjwWCnHcvXyn5HOWPQnEMO8OTLw7LAvNmrwe8LmdsB+eZhwUu9fX/c9iQnBxWaFA==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "cli-spinners": "^1.3.1", + "humanize-duration": "^3.15.3", + "log-update": "^2.3.0" + } + }, + "node_modules/progress-estimator/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-estimator/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-estimator/node_modules/cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-estimator/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/progress-estimator/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-estimator/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-polyfill": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "node_modules/puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "dev": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/puppeteer-core/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/pure-rand": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", + "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/realpath-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", + "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/recast": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.16.2.tgz", + "integrity": "sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A==", + "dev": true, + "dependencies": { + "ast-types": "0.11.7", + "esprima": "~4.0.0", + "private": "~0.1.5", + "source-map": "~0.6.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", + "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + }, + "bin": { + "rollup": "dist/bin/rollup" + } + }, + "node_modules/rollup-plugin-sourcemaps": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", + "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.9", + "source-map-resolve": "^0.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "@types/node": ">=10.0.0", + "rollup": ">=0.31.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-terser": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", + "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^4.0.0", + "terser": "^4.6.2" + }, + "peerDependencies": { + "rollup": ">=0.66.0 <3" + } + }, + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/rollup-plugin-typescript2": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz", + "integrity": "sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "8.1.0", + "resolve": "1.17.0", + "tslib": "2.0.1" + }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/tslib": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "dev": true + }, + "node_modules/rollup-plugin-typescript2/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/sane/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/sane/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "dependencies": { + "xmlchars": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "node_modules/shiki": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", + "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/size-limit": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-5.0.5.tgz", + "integrity": "sha512-DtblS3Qc1SmtEtAYE6RGmg1UFdIzz2aWhlnzbBc3FYc0XMsTVT0kKB40DMIZ/yU5JztkMetdqB5Q5Pow/iVazg==", + "dev": true, + "dependencies": { + "bytes-iec": "^3.1.1", + "chokidar": "^3.5.2", + "ci-job-number": "^1.2.2", + "globby": "^11.0.4", + "lilconfig": "^2.0.3", + "mico-spinner": "^1.3.0", + "picocolors": "^0.1.0" + }, + "bin": { + "size-limit": "bin.js" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/size-limit/node_modules/picocolors": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.1.0.tgz", + "integrity": "sha512-W+3MFREUEjPt0MnYaR51VkLw8tY8UubrLOqcBmaQocZhM34hQhjg50FQ0c6f0UldPlecieoqUqI6ToM/dNblDw==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-browserify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-browserify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-http/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-http/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stream-http/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", + "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/structured-headers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.5.0.tgz", + "integrity": "sha512-oLnmXSsjhud+LxRJpvokwP8ImEB2wTg8sg30buwfVViKMuluTv3BlOJHUX9VW9pJ2nQOxmx87Z0kB86O4cphag==" + }, + "node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "dev": true, + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-encoding": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", + "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", + "deprecated": "no longer maintained" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "dependencies": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-migrate": { + "version": "0.1.35", + "resolved": "https://registry.npmjs.org/ts-migrate/-/ts-migrate-0.1.35.tgz", + "integrity": "sha512-EmXahqwIP0a6fE1BLKKVMgJEeYn9V+CxJ19qFJ/DzkPL4PjDI/FcgPo8D519amBPy2nnlc/x1V6R6aIeHdD87w==", + "dev": true, + "dependencies": { + "create-jest-runner": "^0.5.3", + "json5": "^2.1.1", + "json5-writer": "^0.1.8", + "ts-migrate-plugins": "^0.1.35", + "ts-migrate-server": "^0.1.33", + "updatable-log": "^0.2.0", + "yargs": "^15.0.2" + }, + "bin": { + "ts-migrate": "build/cli.js", + "ts-migrate-full": "bin/ts-migrate-full.sh" + }, + "peerDependencies": { + "typescript": ">4.0" + } + }, + "node_modules/ts-migrate-plugins": { + "version": "0.1.35", + "resolved": "https://registry.npmjs.org/ts-migrate-plugins/-/ts-migrate-plugins-0.1.35.tgz", + "integrity": "sha512-DUkx7ClKhxKYPWDha9DJTZ6LhwEUszL90uH5I/O11K/6TbA96ytln1O3HL6Pt83i4mAKOlg0mQ6AMsPtL5FFkQ==", + "dev": true, + "dependencies": { + "eslint": "^7.14.0", + "jscodeshift": "^0.13.0", + "json-schema": "^0.4.0", + "ts-migrate-server": "^0.1.33" + }, + "peerDependencies": { + "typescript": ">4.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-migrate-plugins/node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-migrate-plugins/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-migrate-plugins/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-migrate-plugins/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/jscodeshift": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", + "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.4", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/ts-migrate-plugins/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "dev": true, + "dependencies": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ts-migrate-plugins/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/ts-migrate-server": { + "version": "0.1.33", + "resolved": "https://registry.npmjs.org/ts-migrate-server/-/ts-migrate-server-0.1.33.tgz", + "integrity": "sha512-MYHy10yzL2fkb2FHFQ9f54gqc5KkaVthTjtpwS4bTroYCONDelp1hbz5nxKWaP3q2oc3kBVeGuAR91RNI+yK+g==", + "dev": true, + "dependencies": { + "@ts-morph/bootstrap": "^0.16.0", + "pretty-ms": "^7.0.1", + "updatable-log": "^0.2.0" + }, + "peerDependencies": { + "typescript": ">4.0" + } + }, + "node_modules/ts-migrate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-migrate/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/ts-migrate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-migrate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-migrate/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-migrate/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-migrate/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-mockito": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", + "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.5" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/tsdx/-/tsdx-0.14.1.tgz", + "integrity": "sha512-keHmFdCL2kx5nYFlBdbE3639HQ2v9iGedAFAajobrUTH2wfX0nLPdDhbHv+GHLQZqf0c5ur1XteE8ek/+Eyj5w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.4.4", + "@babel/helper-module-imports": "^7.0.0", + "@babel/parser": "^7.11.5", + "@babel/plugin-proposal-class-properties": "^7.4.4", + "@babel/preset-env": "^7.11.0", + "@babel/traverse": "^7.11.5", + "@rollup/plugin-babel": "^5.1.0", + "@rollup/plugin-commonjs": "^11.0.0", + "@rollup/plugin-json": "^4.0.0", + "@rollup/plugin-node-resolve": "^9.0.0", + "@rollup/plugin-replace": "^2.2.1", + "@types/jest": "^25.2.1", + "@typescript-eslint/eslint-plugin": "^2.12.0", + "@typescript-eslint/parser": "^2.12.0", + "ansi-escapes": "^4.2.1", + "asyncro": "^3.0.0", + "babel-eslint": "^10.0.3", + "babel-plugin-annotate-pure-calls": "^0.4.0", + "babel-plugin-dev-expression": "^0.2.1", + "babel-plugin-macros": "^2.6.1", + "babel-plugin-polyfill-regenerator": "^0.0.4", + "babel-plugin-transform-rename-import": "^2.3.0", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "enquirer": "^2.3.4", + "eslint": "^6.1.0", + "eslint-config-prettier": "^6.0.0", + "eslint-config-react-app": "^5.2.1", + "eslint-plugin-flowtype": "^3.13.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-prettier": "^3.1.0", + "eslint-plugin-react": "^7.14.3", + "eslint-plugin-react-hooks": "^2.2.0", + "execa": "^4.0.3", + "fs-extra": "^9.0.0", + "jest": "^25.3.0", + "jest-watch-typeahead": "^0.5.0", + "jpjs": "^1.2.1", + "lodash.merge": "^4.6.2", + "ora": "^4.0.3", + "pascal-case": "^3.1.1", + "prettier": "^1.19.1", + "progress-estimator": "^0.2.2", + "regenerator-runtime": "^0.13.7", + "rollup": "^1.32.1", + "rollup-plugin-sourcemaps": "^0.6.2", + "rollup-plugin-terser": "^5.1.2", + "rollup-plugin-typescript2": "^0.27.3", + "sade": "^1.4.2", + "semver": "^7.1.1", + "shelljs": "^0.8.3", + "tiny-glob": "^0.2.6", + "ts-jest": "^25.3.1", + "tslib": "^1.9.3", + "typescript": "^3.7.3" + }, + "bin": { + "tsdx": "dist/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.0.3.tgz", + "integrity": "sha512-dULDd/APiP4JowYDAMosecKOi/1v+UId99qhBGiO3myM29KtAVKS/R3x3OJJNBR0FeYB1BcYb2dCwkhqvxWXXQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/traverse": "^7.11.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/@jest/console": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", + "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-message-util": "^25.5.0", + "jest-util": "^25.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/console/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@jest/core": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz", + "integrity": "sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/reporters": "^25.5.1", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^25.5.0", + "jest-config": "^25.5.4", + "jest-haste-map": "^25.5.1", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-resolve-dependencies": "^25.5.4", + "jest-runner": "^25.5.4", + "jest-runtime": "^25.5.4", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "jest-watcher": "^25.5.0", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "realpath-native": "^2.0.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/core/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@jest/core/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tsdx/node_modules/@jest/core/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@jest/environment": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", + "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/fake-timers": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", + "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "lolex": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/globals": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", + "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", + "dev": true, + "dependencies": { + "@jest/environment": "^25.5.0", + "@jest/types": "^25.5.0", + "expect": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/reporters": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz", + "integrity": "sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^25.5.1", + "jest-resolve": "^25.5.1", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^3.1.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^4.1.3" + }, + "engines": { + "node": ">= 8.3" + }, + "optionalDependencies": { + "node-notifier": "^6.0.0" + } + }, + "node_modules/tsdx/node_modules/@jest/reporters/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@jest/source-map": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", + "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/test-result": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", + "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/types": "^25.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/test-sequencer": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", + "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", + "dev": true, + "dependencies": { + "@jest/test-result": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-runner": "^25.5.4", + "jest-runtime": "^25.5.4" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/transform": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", + "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^25.5.0", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^3.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-regex-util": "^25.2.6", + "jest-util": "^25.5.0", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/transform/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/types/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/tsdx/node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/tsdx/node_modules/@types/yargs": { + "version": "15.0.15", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", + "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/tsdx/node_modules/@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^2.0.0", + "eslint": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tsdx/node_modules/@typescript-eslint/parser": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", + "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "dev": true, + "dependencies": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tsdx/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tsdx/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/babel-jest": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", + "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", + "dev": true, + "dependencies": { + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/tsdx/node_modules/babel-jest/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/babel-plugin-jest-hoist": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", + "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "node_modules/tsdx/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.0.4.tgz", + "integrity": "sha512-+/uCzO9JTYVZVGCpZpVAQkgPGt2zkR0VYiZvJ4aVoCe4ccgpKvNQqcjzAgQzSsjK64Jhc5hvrCR3l0087BevkA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.0.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tsdx/node_modules/babel-preset-current-node-syntax": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", + "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/tsdx/node_modules/babel-preset-jest": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", + "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^25.5.0", + "babel-preset-current-node-syntax": "^0.1.2" + }, + "engines": { + "node": ">= 8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/tsdx/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsdx/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tsdx/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/tsdx/node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tsdx/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/tsdx/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/tsdx/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/tsdx/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/tsdx/node_modules/eslint-config-react-app": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.9" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "2.x", + "@typescript-eslint/parser": "2.x", + "babel-eslint": "10.x", + "eslint": "6.x", + "eslint-plugin-flowtype": "3.x || 4.x", + "eslint-plugin-import": "2.x", + "eslint-plugin-jsx-a11y": "6.x", + "eslint-plugin-react": "7.x", + "eslint-plugin-react-hooks": "1.x || 2.x" + } + }, + "node_modules/tsdx/node_modules/eslint-plugin-react-hooks": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz", + "integrity": "sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==", + "dev": true, + "engines": { + "node": ">=7" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/tsdx/node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/tsdx/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tsdx/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/tsdx/node_modules/expect": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", + "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/tsdx/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsdx/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsdx/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/tsdx/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/tsdx/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/jest": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz", + "integrity": "sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==", + "dev": true, + "dependencies": { + "@jest/core": "^25.5.4", + "import-local": "^3.0.2", + "jest-cli": "^25.5.4" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-changed-files": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", + "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "execa": "^3.2.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-changed-files/node_modules/execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/tsdx/node_modules/jest-cli": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz", + "integrity": "sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==", + "dev": true, + "dependencies": { + "@jest/core": "^25.5.4", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^25.5.4", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "prompts": "^2.0.1", + "realpath-native": "^2.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-cli/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-config": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", + "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^25.5.4", + "@jest/types": "^25.5.0", + "babel-jest": "^25.5.1", + "chalk": "^3.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^25.5.0", + "jest-environment-node": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-jasmine2": "^25.5.4", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "micromatch": "^4.0.2", + "pretty-format": "^25.5.0", + "realpath-native": "^2.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-config/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-diff": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", + "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-diff/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-docblock": { + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", + "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-environment-node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", + "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", + "dev": true, + "dependencies": { + "@jest/environment": "^25.5.0", + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-environment-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/jest-get-type": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-haste-map": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", + "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "@types/graceful-fs": "^4.1.2", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-serializer": "^25.5.0", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7", + "which": "^2.0.2" + }, + "engines": { + "node": ">= 8.3" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/tsdx/node_modules/jest-leak-detector": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", + "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", + "dev": true, + "dependencies": { + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-matcher-utils": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", + "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-message-util/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-mock": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", + "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-regex-util": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-resolve": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", + "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "browser-resolve": "^1.11.3", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.1", + "read-pkg-up": "^7.0.1", + "realpath-native": "^2.0.0", + "resolve": "^1.17.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-resolve-dependencies": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", + "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-snapshot": "^25.5.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-resolve/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-runner": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", + "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-docblock": "^25.3.0", + "jest-haste-map": "^25.5.1", + "jest-jasmine2": "^25.5.4", + "jest-leak-detector": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "jest-runtime": "^25.5.4", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-runner/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-runtime": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", + "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/globals": "^25.5.2", + "@jest/source-map": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-haste-map": "^25.5.1", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-runtime/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-snapshot": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", + "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/prettier": "^1.19.0", + "chalk": "^3.0.0", + "expect": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "make-dir": "^3.0.0", + "natural-compare": "^1.4.0", + "pretty-format": "^25.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-snapshot/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-snapshot/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-util/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-validate": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", + "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "jest-get-type": "^25.2.6", + "leven": "^3.1.0", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-validate/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/jest-validate/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-watcher": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", + "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", + "dev": true, + "dependencies": { + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "jest-util": "^25.5.0", + "string-length": "^3.1.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-watcher/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tsdx/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsdx/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/tsdx/node_modules/node-notifier": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz", + "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==", + "dev": true, + "optional": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.1.1", + "semver": "^6.3.0", + "shellwords": "^0.1.1", + "which": "^1.3.1" + } + }, + "node_modules/tsdx/node_modules/node-notifier/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/node-notifier/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/tsdx/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tsdx/node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tsdx/node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/tsdx/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/tsdx/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tsdx/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tsdx/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/tsdx/node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "dev": true, + "dependencies": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tsdx/node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/tsdx/node_modules/ts-jest": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-25.5.1.tgz", + "integrity": "sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "micromatch": "4.x", + "mkdirp": "0.x", + "semver": "6.x", + "yargs-parser": "18.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": ">= 8" + }, + "peerDependencies": { + "jest": ">=25 <26", + "typescript": ">=3.4 <4.0" + } + }, + "node_modules/tsdx/node_modules/ts-jest/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsdx/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tsdx/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/tsdx/node_modules/v8-to-istanbul": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", + "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": "8.x.x || >=10.10.0" + } + }, + "node_modules/tsdx/node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tsdx/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/tsdx/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-function": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", + "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedoc": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", + "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", + "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.0", + "shiki": "^0.14.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 14.14" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/updatable-log": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/updatable-log/-/updatable-log-0.2.0.tgz", + "integrity": "sha512-gR48/mTR6YFB+B1sNoap3nx8HFbEvDl0ej9KhlQTFZdmP8yL5fzFiCUfeHCUf1QvNnXowY1pM9iiGkPKrd0XyQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "figures": "^3.0.0", + "log-update": "^3.3.0" + } + }, + "node_modules/updatable-log/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/updatable-log/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/updatable-log/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/updatable-log/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/log-update": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-3.4.0.tgz", + "integrity": "sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.2.0", + "cli-cursor": "^2.1.0", + "wrap-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/updatable-log/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/updatable-log/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/updatable-log/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.2.tgz", + "integrity": "sha512-7yIgNnrST44S7PJ5+jXbdIupfU1nWUdQJBFBeJRclPXiWgCvrSq5Frw8lr/i//n5sqDfzoKmBymMS81l4U/7cg==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/urlsafe-base64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", + "integrity": "sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "dependencies": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "node_modules/w3c-xmlserializer/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weak-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", + "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", + "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", + "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "is-plain-object": "^5.0.0", + "lodash.debounce": "^4.0.8", + "lodash.escape": "^4.0.1", + "lodash.flatten": "^4.4.0", + "lodash.invokemap": "^4.6.0", + "lodash.pullall": "^4.2.0", + "lodash.uniqby": "^4.7.0", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/webpack/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.19", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/write/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true + }, + "node_modules/xregexp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.1.tgz", + "integrity": "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg==", + "dependencies": { + "@babel/runtime-corejs3": "^7.16.5" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", - "dev": true - }, - "node_modules/xregexp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.1.tgz", - "integrity": "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg==", - "dependencies": { - "@babel/runtime-corejs3": "^7.16.5" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } } - } } diff --git a/package.json b/package.json index 55eecd6e..6e4655e4 100644 --- a/package.json +++ b/package.json @@ -1,84 +1,78 @@ { - "version": "0.1.1", - "license": "Apache-2.0", - "main": "dist/index.js", - "typings": "dist/index.d.ts", - "files": [ - "dist", - "src" - ], - "scripts": { - "start": "tsdx watch", - "build": "tsdx build", - "test": "tsdx test", - "lint": "tsdx lint", - "prepare": "tsdx build", - "size": "size-limit", - "analyze": "size-limit --why", - "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", - "pretty": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' 'examples/**/*.ts' --write" - }, - "husky": { - "hooks": { - "pre-commit": "tsdx lint" - } - }, - "prettier": { - "printWidth": 80, - "semi": true, - "singleQuote": true, - "trailingComma": "es5" - }, - "name": "signify-ts", - "author": "Phil Feairheller", - "module": "dist/signify-ts.esm.js", - "size-limit": [ - { - "path": "dist/signify-ts.cjs.production.min.js", - "limit": "10 KB" + "version": "0.1.1", + "license": "Apache-2.0", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "files": [ + "dist", + "src" + ], + "scripts": { + "start": "tsdx watch", + "build": "tsdx build", + "test": "tsdx test", + "lint": "tsdx lint", + "prepare": "tsdx build", + "size": "size-limit", + "analyze": "size-limit --why", + "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", + "pretty": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' 'examples/**/*.ts' --write" + }, + "husky": { + "hooks": { + "pre-commit": "tsdx lint" + } + }, + "name": "signify-ts", + "author": "Phil Feairheller", + "module": "dist/signify-ts.esm.js", + "size-limit": [ + { + "path": "dist/signify-ts.cjs.production.min.js", + "limit": "10 KB" + }, + { + "path": "dist/signify-ts.esm.js", + "limit": "10 KB" + } + ], + "devDependencies": { + "@mermaid-js/mermaid-cli": "^10.3.0", + "@size-limit/preset-small-lib": "^5.0.4", + "@types/lodash": "^4.14.185", + "@types/node": "^18.11.18", + "@types/text-encoding": "^0.0.36", + "@types/urlsafe-base64": "^1.0.28", + "husky": "^7.0.2", + "jest": "^29.3.1", + "jsdoc": "^4.0.2", + "minami": "^1.2.3", + "prettier": "^3.0.3", + "size-limit": "^5.0.4", + "ts-migrate": "^0.1.23", + "ts-mockito": "^2.6.1", + "tsdx": "^0.14.1", + "tslib": "^2.3.1", + "typedoc": "^0.24.8", + "typescript": "^4.9.4" }, - { - "path": "dist/signify-ts.esm.js", - "limit": "10 KB" + "dependencies": { + "@types/libsodium-wrappers-sumo": "^0.7.5", + "blake3": "^2.1.7", + "buffer": "^6.0.3", + "cbor": "^8.0.0", + "collections": "^5.1.12", + "ecdsa-secp256r1": "^1.3.3", + "jest-fetch-mock": "^3.0.3", + "libsodium-wrappers-sumo": "^0.7.9", + "lodash": "^4.17.21", + "mathjs": "^11.8.2", + "msgpack5": "^5.3.2", + "structured-headers": "^0.5.0", + "text-encoding": "^0.7.0", + "ts-node": "^10.9.1", + "urlsafe-base64": "^1.0.0", + "whatwg-fetch": "^3.6.17", + "xregexp": "^5.1.0" } - ], - "devDependencies": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/lodash": "^4.14.185", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "ts-migrate": "^0.1.23", - "ts-mockito": "^2.6.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.4" - }, - "dependencies": { - "@types/libsodium-wrappers-sumo": "^0.7.5", - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", - "ecdsa-secp256r1": "^1.3.3", - "jest-fetch-mock": "^3.0.3", - "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", - "mathjs": "^11.8.2", - "msgpack5": "^5.3.2", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "ts-node": "^10.9.1", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" - } } From d2242e3da9b249dd00aa7714990981899a3f232a Mon Sep 17 00:00:00 2001 From: lenkan Date: Tue, 17 Oct 2023 16:46:10 +0200 Subject: [PATCH 069/186] revert indentation in package.json --- package-lock.json | 47098 ++++++++++++++++++++++---------------------- package.json | 148 +- 2 files changed, 23623 insertions(+), 23623 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1a1b7a7e..7fef9cec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23553 +1,23553 @@ { - "name": "signify-ts", - "version": "0.1.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "signify-ts", - "version": "0.1.1", - "license": "Apache-2.0", - "dependencies": { - "@types/libsodium-wrappers-sumo": "^0.7.5", - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", - "ecdsa-secp256r1": "^1.3.3", - "jest-fetch-mock": "^3.0.3", - "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", - "mathjs": "^11.8.2", - "msgpack5": "^5.3.2", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "ts-node": "^10.9.1", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" - }, - "devDependencies": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/lodash": "^4.14.185", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "ts-migrate": "^0.1.23", - "ts-mockito": "^2.6.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.4" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", - "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.17", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.17", - "@babel/types": "^7.22.17", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", - "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", - "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.17.tgz", - "integrity": "sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.17" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.17.tgz", - "integrity": "sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.17" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", - "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", - "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", - "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", - "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", - "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", - "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", - "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", - "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.15.tgz", - "integrity": "sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.15", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.15", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.15", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-modules-systemjs": "^7.22.11", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.22.15", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.15", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", - "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz", - "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-typescript": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", - "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/register/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.15.tgz", - "integrity": "sha512-SAj8oKi8UogVi6eXQXKNPu8qZ78Yzy7zawrlTr0M+IuW/g8Qe9gVDhGcF9h1S69OyACpYoLxEzpjs1M15sI5wQ==", - "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", - "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.17", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", - "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", - "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", - "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.4", - "@jest/reporters": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.6.3", - "jest-config": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-resolve-dependencies": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "jest-watcher": "^29.6.4", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/environment": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", - "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", - "dev": true, - "dependencies": { - "expect": "^29.6.4", - "jest-snapshot": "^29.6.4" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", - "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", - "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", - "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", - "@jest/types": "^29.6.3", - "jest-mock": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", - "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", - "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", - "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.4", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", - "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsdoc/salty": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", - "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v12.0.0" - } - }, - "node_modules/@mermaid-js/mermaid-cli": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.4.0.tgz", - "integrity": "sha512-sXohfGD6xgR8VEKvLdvSCndFaFNVTlyXjgZlJ3x8U3/J0V2VTfLIZO94Gt8KUPUccFWci8dRYDGG0fQerB+aIA==", - "dev": true, - "dependencies": { - "chalk": "^5.0.1", - "commander": "^10.0.0", - "puppeteer": "^19.0.0" - }, - "bin": { - "mmdc": "src/cli.js" - }, - "engines": { - "node": "^14.13 || >=16.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.23", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", - "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", - "dev": true - }, - "node_modules/@puppeteer/browsers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", - "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", - "dev": true, - "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=14.1.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@puppeteer/browsers/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@puppeteer/browsers/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz", - "integrity": "sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.8", - "commondir": "^1.0.1", - "estree-walker": "^1.0.1", - "glob": "^7.1.2", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.8" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", - "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@size-limit/file": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-5.0.5.tgz", - "integrity": "sha512-lnrQYRmTt0QzV08R9M61q0+EM7Jkcp1qZ/+BG01OOFA0rZtfHt9aKCdvoSEoMrIxK44A9lWHRmyNVnKKDfKbWA==", - "dev": true, - "dependencies": { - "semver": "7.3.5" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - }, - "peerDependencies": { - "size-limit": "5.0.5" - } - }, - "node_modules/@size-limit/preset-small-lib": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@size-limit/preset-small-lib/-/preset-small-lib-5.0.5.tgz", - "integrity": "sha512-BHZwlSEaxHPqOOienQpgoH+ueWYryXiusFpNKRj1Jmyv6/rlOxww1nTCljNhh9+hOKOsahqGbvl43cr8o7NQiQ==", - "dev": true, - "dependencies": { - "@size-limit/file": "5.0.5", - "@size-limit/webpack": "5.0.5" - }, - "peerDependencies": { - "size-limit": "5.0.5" - } - }, - "node_modules/@size-limit/webpack": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@size-limit/webpack/-/webpack-5.0.5.tgz", - "integrity": "sha512-caLXPNj1iRNeBRoycKTLMLRlLTCjIv80VmBTCag5QZMuNNu4g0weoxjnU7Jbf5YneTuXuEhKSjpc95rB4Biq7Q==", - "dev": true, - "dependencies": { - "css-loader": "^5.2.6", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "mkdirp": "^1.0.4", - "nanoid": "^3.1.28", - "optimize-css-assets-webpack-plugin": "^6.0.1", - "pnp-webpack-plugin": "^1.7.0", - "style-loader": "^2.0.0", - "webpack": "^4.44.1", - "webpack-bundle-analyzer": "^4.4.2" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - }, - "peerDependencies": { - "size-limit": "5.0.5" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@ts-morph/bootstrap": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@ts-morph/bootstrap/-/bootstrap-0.16.0.tgz", - "integrity": "sha512-FYW3bK5EBeAgpHu0qZ57gHbLjzgzC81y5EJmrebzIhXSYg6OgZu5lFHpF5NJ7CwM7ZMhxX1PG+DRA8e+skopKw==", - "dev": true, - "dependencies": { - "@ts-morph/common": "~0.16.0" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.16.0.tgz", - "integrity": "sha512-SgJpzkTgZKLKqQniCjLaE3c2L2sdL7UShvmTmPBejAKd2OKV/yfMpQ2IWpAuA+VY5wy7PkSUaEObIqEK6afFuw==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "minimatch": "^5.1.0", - "mkdirp": "^1.0.4", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.3.tgz", - "integrity": "sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==", - "dev": true, - "dependencies": { - "jest-diff": "^25.2.1", - "pretty-format": "^25.2.1" - } - }, - "node_modules/@types/jest/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@types/jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@types/jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@types/jest/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/libsodium-wrappers": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz", - "integrity": "sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg==" - }, - "node_modules/@types/libsodium-wrappers-sumo": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.6.tgz", - "integrity": "sha512-86R2bYU/DKVWw3q2btxTUlFO3lYKLyodbCsxxSybNQonPzPxmQkNtKCYmkV0dWQ9ZQsGIOzNNPU9RjJUALjoEg==", - "dependencies": { - "@types/libsodium-wrappers": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.198", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", - "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", - "dev": true - }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dev": true, - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", - "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/text-encoding": { - "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@types/text-encoding/-/text-encoding-0.0.36.tgz", - "integrity": "sha512-LfATA7bH+MtAPlOshYgQ1M3n2r0TSB6Ns5ESvKYlVugkKErQg5oFbR2qO7XrKtNsrtzedDvTeqQfyTjdPJH7jw==", - "dev": true - }, - "node_modules/@types/urlsafe-base64": { - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@types/urlsafe-base64/-/urlsafe-base64-1.0.29.tgz", - "integrity": "sha512-RAowJfSG6zhSxDFl7/QC/vGeWIyJLf7pqFoh+iLP0Y/GOsH1ddmZvo2oFug/Z5pGfUM05NMQFCnzw3sSmMA72A==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "dependencies": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, - "node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", - "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.4", - "util": "^0.10.4" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.7.tgz", - "integrity": "sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "optional": true - }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/asyncro": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz", - "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "node_modules/axe-core": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", - "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", - "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.6.4", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-plugin-annotate-pure-calls": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz", - "integrity": "sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA==", - "dev": true, - "peerDependencies": { - "@babel/core": "^6.0.0-0 || 7.x" - } - }, - "node_modules/babel-plugin-dev-expression": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.3.tgz", - "integrity": "sha512-rP5LK9QQTzCW61nVVzw88En1oK8t8gTsIeC6E61oelxNsU842yMjF0G1MxhvUpCkxCEIj7sE8/e5ieTheT//uw==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-transform-rename-import": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-rename-import/-/babel-plugin-transform-rename-import-2.3.0.tgz", - "integrity": "sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ==", - "dev": true - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/blake3": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/blake3/-/blake3-2.1.7.tgz", - "integrity": "sha512-5d+TdKJvju96IyEaGJ0eO6CHbckWi+NBrCezGYM/WsnI3R03aLL2TWfsuZSh1rs0fTv/L3ps/r0vykjYurcIwA==", - "hasInstallScript": true - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "node_modules/bytes-iec": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", - "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001532", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", - "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/chromium-bidi": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", - "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", - "dev": true, - "dependencies": { - "mitt": "3.0.0" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/ci-job-number": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ci-job-number/-/ci-job-number-1.2.2.tgz", - "integrity": "sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collections": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/collections/-/collections-5.1.13.tgz", - "integrity": "sha512-SCb6Qd+d3Z02corWQ7/mqXiXeeTdHvkP6TeFSYfGYdCFp1WrjSNZ3j6y8Y3T/7osGEe0iOcU2g1d346l99m4Lg==", - "dependencies": { - "weak-map": "~1.0.x" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/complex.js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", - "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", - "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.2.tgz", - "integrity": "sha512-Y2rxThOuNywTjnX/PgA5vWM6CZ9QB9sz9oGeCixV8MqXZO70z/5SHzf9EeBrEBK0PN36DnEBBu9O/aGWzKuMZQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-jest-runner": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/create-jest-runner/-/create-jest-runner-0.5.3.tgz", - "integrity": "sha512-a9VY2doMBmzRollJB3Ft3/Y5fBceSWJ4gdyVsg4/d7nP1S4715VG939s2VnITDj79YBmRgKhjGjNRv1c+Kre1g==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "jest-worker": "^24.0.0", - "throat": "^4.1.0" - }, - "bin": { - "create-jest-runner": "generator/index.js" - } - }, - "node_modules/create-jest-runner/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-jest-runner/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-jest-runner/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/create-jest-runner/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-jest-runner/node_modules/jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/create-jest-runner/node_modules/jest-worker/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/create-jest-runner/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/cyclist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", - "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", - "dev": true - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - } - }, - "node_modules/data-urls/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", - "dev": true - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "dependencies": { - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/duplexify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecdsa-secp256r1": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/ecdsa-secp256r1/-/ecdsa-secp256r1-1.3.3.tgz", - "integrity": "sha512-7JkHQ43iv9vT1U9tyGuxcE4+SMF/da+YiIMRpcwmbHmJQmqfFUuT6c7LKMasJ9soEpwFL0b9JyNkRjQ+vjVgpQ==", - "dependencies": { - "asn1.js": "^5.0.1", - "bn.js": "^4.11.8" - } - }, - "node_modules/ecdsa-secp256r1/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.513", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz", - "integrity": "sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/enhanced-resolve/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/enhanced-resolve/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/enhanced-resolve/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", - "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", - "dev": true, - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-latex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz", - "integrity": "sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.6.4", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", - "dev": true, - "dependencies": { - "flatted": "^3.2.7", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/flow-parser": { - "version": "0.216.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.216.1.tgz", - "integrity": "sha512-wstw46/C/8bRv/8RySCl15lK376j8DHxm41xFjD9eVL+jSS1UmVpbdLdA0LzGuS2v5uGgQiBLEj6mgSJQwW+MA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/flush-write-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/flush-write-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fraction.js": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", - "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true, - "optional": true - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.1" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-duration": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz", - "integrity": "sha512-G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==", - "dev": true - }, - "node_modules/husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", - "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.3" - } - }, - "node_modules/javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" - }, - "node_modules/jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", - "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.4", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.6.4" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", - "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.6.3", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", - "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.3", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-cli": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", - "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", - "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.4", - "@jest/types": "^29.6.3", - "babel-jest": "^29.6.4", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.4", - "jest-environment-node": "^29.6.4", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", - "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-docblock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", - "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", - "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-environment-jsdom": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", - "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", - "dev": true, - "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "jsdom": "^15.2.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-environment-jsdom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-environment-jsdom/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jest-environment-jsdom/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-node": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", - "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-fetch-mock": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", - "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", - "dependencies": { - "cross-fetch": "^3.0.4", - "promise-polyfill": "^8.1.3" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", - "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", - "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^25.5.0", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "co": "^4.6.0", - "expect": "^25.5.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^25.5.0", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/globals": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", - "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", - "dev": true, - "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/types": "^25.5.0", - "expect": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/source-map": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", - "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/test-sequencer": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", - "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/transform": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", - "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^25.5.0", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^3.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-regex-util": "^25.2.6", - "jest-util": "^25.5.0", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/babel-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", - "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", - "dev": true, - "dependencies": { - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/babel-plugin-jest-hoist": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", - "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/babel-preset-current-node-syntax": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", - "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/babel-preset-jest": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", - "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^25.5.0", - "babel-preset-current-node-syntax": "^0.1.2" - }, - "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-config": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", - "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.5.4", - "@jest/types": "^25.5.0", - "babel-jest": "^25.5.1", - "chalk": "^3.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^25.5.0", - "jest-environment-node": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-jasmine2": "^25.5.4", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "micromatch": "^4.0.2", - "pretty-format": "^25.5.0", - "realpath-native": "^2.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-docblock": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", - "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-each": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", - "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-environment-node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", - "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", - "dev": true, - "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-haste-map": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", - "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "@types/graceful-fs": "^4.1.2", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-serializer": "^25.5.0", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7", - "which": "^2.0.2" - }, - "engines": { - "node": ">= 8.3" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-leak-detector": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", - "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", - "dev": true, - "dependencies": { - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-resolve": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", - "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.1", - "read-pkg-up": "^7.0.1", - "realpath-native": "^2.0.0", - "resolve": "^1.17.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-runner": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", - "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-docblock": "^25.3.0", - "jest-haste-map": "^25.5.1", - "jest-jasmine2": "^25.5.4", - "jest-leak-detector": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "jest-runtime": "^25.5.4", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-runtime": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", - "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/globals": "^25.5.2", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-snapshot": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", - "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/prettier": "^1.19.0", - "chalk": "^3.0.0", - "expect": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "make-dir": "^3.0.0", - "natural-compare": "^1.4.0", - "pretty-format": "^25.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-validate": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", - "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "leven": "^3.1.0", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-jasmine2/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jest-jasmine2/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/jest-jasmine2/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", - "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", - "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.4", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", - "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-mock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", - "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", - "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", - "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.6.4" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", - "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.4", - "@jest/environment": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.6.3", - "jest-environment-node": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-leak-detector": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-util": "^29.6.3", - "jest-watcher": "^29.6.4", - "jest-worker": "^29.6.4", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", - "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/globals": "^29.6.4", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-serializer": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", - "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-snapshot": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", - "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.4", - "@jest/transform": "^29.6.4", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.4", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.4", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.3", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", - "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", - "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watch-typeahead": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.5.0.tgz", - "integrity": "sha512-4r36w9vU8+rdg48hj0Z7TvcSqVP6Ao8dk04grlHQNgduyCB0SqrI0xWIl85ZhXrzYvxQ0N5H+rRLAejkQzEHeQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-regex-util": "^25.2.1", - "jest-watcher": "^25.2.4", - "slash": "^3.0.0", - "string-length": "^3.1.0", - "strip-ansi": "^6.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watch-typeahead/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", - "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", - "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-util": "^25.5.0", - "string-length": "^3.1.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jest-watch-typeahead/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "dev": true, - "dependencies": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-watcher": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", - "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.4", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", - "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.3", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jpjs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jpjs/-/jpjs-1.2.1.tgz", - "integrity": "sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dev": true, - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/jscodeshift": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.6.4.tgz", - "integrity": "sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.6", - "@babel/parser": "^7.1.6", - "@babel/plugin-proposal-class-properties": "^7.1.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/preset-env": "^7.1.6", - "@babel/preset-flow": "^7.0.0", - "@babel/preset-typescript": "^7.1.0", - "@babel/register": "^7.0.0", - "babel-core": "^7.0.0-bridge.0", - "colors": "^1.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.16.1", - "temp": "^0.8.1", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - } - }, - "node_modules/jscodeshift/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/jsdoc": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", - "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", - "dev": true, - "dependencies": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/jsdom/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json5-writer": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/json5-writer/-/json5-writer-0.1.8.tgz", - "integrity": "sha512-h5sqkk/vSKvESOUTBniGWs8p8nTzHsoDrxPS9enJfQVINqXv3lm+FAyizLwbrCwCn0q7NXqDBb+r8AdUdK3XZw==", - "dev": true, - "dependencies": { - "jscodeshift": "^0.6.3" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "dependencies": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libsodium-sumo": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.11.tgz", - "integrity": "sha512-bY+7ph7xpk51Ez2GbE10lXAQ5sJma6NghcIDaSPbM/G9elfrjLa0COHl/7P6Wb/JizQzl5UQontOOP1z0VwbLA==" - }, - "node_modules/libsodium-wrappers-sumo": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.11.tgz", - "integrity": "sha512-DGypHOmJbB1nZn89KIfGOAkDgfv5N6SBGC3Qvmy/On0P0WD1JQvNRS/e3UL3aFF+xC0m+MYz5M+MnRnK2HMrKQ==", - "dependencies": { - "libsodium-sumo": "^0.7.11" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.invokemap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", - "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.pullall": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", - "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", - "dev": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/lolex/node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "dev": true, - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mathjs": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", - "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", - "dependencies": { - "@babel/runtime": "^7.22.6", - "complex.js": "^2.1.1", - "decimal.js": "^10.4.3", - "escape-latex": "^1.2.0", - "fraction.js": "4.3.4", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^4.1.0" - }, - "bin": { - "mathjs": "bin/cli.js" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mico-spinner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mico-spinner/-/mico-spinner-1.4.0.tgz", - "integrity": "sha512-6fuiQX9qRMJACVlCX6pkbV3KnjSbobr10RLB+0CNk2Z+uKPulL7wMKZSoZEiLCOvzTQc0vghjKXKVGpiMIOABw==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.0" - } - }, - "node_modules/mico-spinner/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minami": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minami/-/minami-1.2.3.tgz", - "integrity": "sha512-3f2QqqbUC1usVux0FkQMFYB73yd9JIxmHSn1dWQacizL6hOUaNu6mA3KxZ9SfiCc4qgcgq+5XP59+hP7URa1Dw==", - "dev": true - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/move-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/msgpack5": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/msgpack5/-/msgpack5-5.3.2.tgz", - "integrity": "sha512-e9jz+6InQIUb2cGzZ/Mi+rQBs1KFLby+gNi+22VwQ1pnC9ieZjysKGmRMjdlf6IyjsltbgY4tGoHwHmyS7l94A==", - "dependencies": { - "bl": "^4.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/node-notifier": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", - "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.5", - "shellwords": "^0.1.1", - "uuid": "^8.3.2", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "engines": { - "node": ">=12.19" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optimize-css-assets-webpack-plugin": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz", - "integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==", - "dev": true, - "dependencies": { - "cssnano": "^5.0.2", - "last-call-webpack-plugin": "^3.0.0", - "postcss": "^8.2.1" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parallel-transform/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/parallel-transform/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/parallel-transform/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "optional": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "node_modules/pnp-webpack-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", - "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", - "dev": true, - "dependencies": { - "ts-pnp": "^1.1.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "dev": true, - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/progress-estimator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/progress-estimator/-/progress-estimator-0.2.2.tgz", - "integrity": "sha512-GF76Ac02MTJD6o2nMNtmtOFjwWCnHcvXyn5HOWPQnEMO8OTLw7LAvNmrwe8LmdsB+eZhwUu9fX/c9iQnBxWaFA==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "cli-spinners": "^1.3.1", - "humanize-duration": "^3.15.3", - "log-update": "^2.3.0" - } - }, - "node_modules/progress-estimator/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/progress-estimator/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-polyfill": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", - "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", - "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@puppeteer/browsers": "0.5.0", - "cosmiconfig": "8.1.3", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.11.1" - } - }, - "node_modules/puppeteer-core": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", - "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", - "dev": true, - "dependencies": { - "@puppeteer/browsers": "0.5.0", - "chromium-bidi": "0.4.7", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.13.0" - }, - "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/puppeteer-core/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/realpath-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", - "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/recast": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.16.2.tgz", - "integrity": "sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A==", - "dev": true, - "dependencies": { - "ast-types": "0.11.7", - "esprima": "~4.0.0", - "private": "~0.1.5", - "source-map": "~0.6.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rollup": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "bin": { - "rollup": "dist/bin/rollup" - } - }, - "node_modules/rollup-plugin-sourcemaps": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", - "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.9", - "source-map-resolve": "^0.6.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "@types/node": ">=10.0.0", - "rollup": ">=0.31.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/rollup-plugin-terser": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", - "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.5.5", - "jest-worker": "^24.9.0", - "rollup-pluginutils": "^2.8.2", - "serialize-javascript": "^4.0.0", - "terser": "^4.6.2" - }, - "peerDependencies": { - "rollup": ">=0.66.0 <3" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/rollup-plugin-typescript2": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz", - "integrity": "sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.17.0", - "tslib": "2.0.1" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", - "dev": true - }, - "node_modules/rollup-plugin-typescript2/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "dev": true, - "dependencies": { - "xmlchars": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "node_modules/shiki": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", - "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", - "dev": true, - "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/size-limit": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-5.0.5.tgz", - "integrity": "sha512-DtblS3Qc1SmtEtAYE6RGmg1UFdIzz2aWhlnzbBc3FYc0XMsTVT0kKB40DMIZ/yU5JztkMetdqB5Q5Pow/iVazg==", - "dev": true, - "dependencies": { - "bytes-iec": "^3.1.1", - "chokidar": "^3.5.2", - "ci-job-number": "^1.2.2", - "globby": "^11.0.4", - "lilconfig": "^2.0.3", - "mico-spinner": "^1.3.0", - "picocolors": "^0.1.0" - }, - "bin": { - "size-limit": "bin.js" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/size-limit/node_modules/picocolors": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.1.0.tgz", - "integrity": "sha512-W+3MFREUEjPt0MnYaR51VkLw8tY8UubrLOqcBmaQocZhM34hQhjg50FQ0c6f0UldPlecieoqUqI6ToM/dNblDw==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-browserify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-browserify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-http/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-http/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-http/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", - "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/structured-headers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.5.0.tgz", - "integrity": "sha512-oLnmXSsjhud+LxRJpvokwP8ImEB2wTg8sg30buwfVViKMuluTv3BlOJHUX9VW9pJ2nQOxmx87Z0kB86O4cphag==" - }, - "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dev": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-encoding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "deprecated": "no longer maintained" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-migrate": { - "version": "0.1.35", - "resolved": "https://registry.npmjs.org/ts-migrate/-/ts-migrate-0.1.35.tgz", - "integrity": "sha512-EmXahqwIP0a6fE1BLKKVMgJEeYn9V+CxJ19qFJ/DzkPL4PjDI/FcgPo8D519amBPy2nnlc/x1V6R6aIeHdD87w==", - "dev": true, - "dependencies": { - "create-jest-runner": "^0.5.3", - "json5": "^2.1.1", - "json5-writer": "^0.1.8", - "ts-migrate-plugins": "^0.1.35", - "ts-migrate-server": "^0.1.33", - "updatable-log": "^0.2.0", - "yargs": "^15.0.2" - }, - "bin": { - "ts-migrate": "build/cli.js", - "ts-migrate-full": "bin/ts-migrate-full.sh" - }, - "peerDependencies": { - "typescript": ">4.0" - } - }, - "node_modules/ts-migrate-plugins": { - "version": "0.1.35", - "resolved": "https://registry.npmjs.org/ts-migrate-plugins/-/ts-migrate-plugins-0.1.35.tgz", - "integrity": "sha512-DUkx7ClKhxKYPWDha9DJTZ6LhwEUszL90uH5I/O11K/6TbA96ytln1O3HL6Pt83i4mAKOlg0mQ6AMsPtL5FFkQ==", - "dev": true, - "dependencies": { - "eslint": "^7.14.0", - "jscodeshift": "^0.13.0", - "json-schema": "^0.4.0", - "ts-migrate-server": "^0.1.33" - }, - "peerDependencies": { - "typescript": ">4.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-migrate-plugins/node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-migrate-plugins/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-migrate-plugins/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-migrate-plugins/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/jscodeshift": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", - "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.20.4", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/ts-migrate-plugins/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/recast": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", - "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", - "dev": true, - "dependencies": { - "ast-types": "0.14.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ts-migrate-plugins/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/ts-migrate-server": { - "version": "0.1.33", - "resolved": "https://registry.npmjs.org/ts-migrate-server/-/ts-migrate-server-0.1.33.tgz", - "integrity": "sha512-MYHy10yzL2fkb2FHFQ9f54gqc5KkaVthTjtpwS4bTroYCONDelp1hbz5nxKWaP3q2oc3kBVeGuAR91RNI+yK+g==", - "dev": true, - "dependencies": { - "@ts-morph/bootstrap": "^0.16.0", - "pretty-ms": "^7.0.1", - "updatable-log": "^0.2.0" - }, - "peerDependencies": { - "typescript": ">4.0" - } - }, - "node_modules/ts-migrate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-migrate/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/ts-migrate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-migrate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-migrate/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-migrate/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-migrate/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ts-mockito": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", - "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.5" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/tsdx/-/tsdx-0.14.1.tgz", - "integrity": "sha512-keHmFdCL2kx5nYFlBdbE3639HQ2v9iGedAFAajobrUTH2wfX0nLPdDhbHv+GHLQZqf0c5ur1XteE8ek/+Eyj5w==", - "dev": true, - "dependencies": { - "@babel/core": "^7.4.4", - "@babel/helper-module-imports": "^7.0.0", - "@babel/parser": "^7.11.5", - "@babel/plugin-proposal-class-properties": "^7.4.4", - "@babel/preset-env": "^7.11.0", - "@babel/traverse": "^7.11.5", - "@rollup/plugin-babel": "^5.1.0", - "@rollup/plugin-commonjs": "^11.0.0", - "@rollup/plugin-json": "^4.0.0", - "@rollup/plugin-node-resolve": "^9.0.0", - "@rollup/plugin-replace": "^2.2.1", - "@types/jest": "^25.2.1", - "@typescript-eslint/eslint-plugin": "^2.12.0", - "@typescript-eslint/parser": "^2.12.0", - "ansi-escapes": "^4.2.1", - "asyncro": "^3.0.0", - "babel-eslint": "^10.0.3", - "babel-plugin-annotate-pure-calls": "^0.4.0", - "babel-plugin-dev-expression": "^0.2.1", - "babel-plugin-macros": "^2.6.1", - "babel-plugin-polyfill-regenerator": "^0.0.4", - "babel-plugin-transform-rename-import": "^2.3.0", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "enquirer": "^2.3.4", - "eslint": "^6.1.0", - "eslint-config-prettier": "^6.0.0", - "eslint-config-react-app": "^5.2.1", - "eslint-plugin-flowtype": "^3.13.0", - "eslint-plugin-import": "^2.18.2", - "eslint-plugin-jsx-a11y": "^6.2.3", - "eslint-plugin-prettier": "^3.1.0", - "eslint-plugin-react": "^7.14.3", - "eslint-plugin-react-hooks": "^2.2.0", - "execa": "^4.0.3", - "fs-extra": "^9.0.0", - "jest": "^25.3.0", - "jest-watch-typeahead": "^0.5.0", - "jpjs": "^1.2.1", - "lodash.merge": "^4.6.2", - "ora": "^4.0.3", - "pascal-case": "^3.1.1", - "prettier": "^1.19.1", - "progress-estimator": "^0.2.2", - "regenerator-runtime": "^0.13.7", - "rollup": "^1.32.1", - "rollup-plugin-sourcemaps": "^0.6.2", - "rollup-plugin-terser": "^5.1.2", - "rollup-plugin-typescript2": "^0.27.3", - "sade": "^1.4.2", - "semver": "^7.1.1", - "shelljs": "^0.8.3", - "tiny-glob": "^0.2.6", - "ts-jest": "^25.3.1", - "tslib": "^1.9.3", - "typescript": "^3.7.3" - }, - "bin": { - "tsdx": "dist/index.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.0.3.tgz", - "integrity": "sha512-dULDd/APiP4JowYDAMosecKOi/1v+UId99qhBGiO3myM29KtAVKS/R3x3OJJNBR0FeYB1BcYb2dCwkhqvxWXXQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/traverse": "^7.11.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/console/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@jest/core": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz", - "integrity": "sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/reporters": "^25.5.1", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^25.5.0", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-resolve-dependencies": "^25.5.4", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "jest-watcher": "^25.5.0", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "realpath-native": "^2.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/core/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tsdx/node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/globals": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", - "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", - "dev": true, - "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/types": "^25.5.0", - "expect": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/reporters": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz", - "integrity": "sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^25.5.1", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^3.1.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^4.1.3" - }, - "engines": { - "node": ">= 8.3" - }, - "optionalDependencies": { - "node-notifier": "^6.0.0" - } - }, - "node_modules/tsdx/node_modules/@jest/reporters/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@jest/source-map": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", - "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/test-sequencer": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", - "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/transform": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", - "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^25.5.0", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^3.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-regex-util": "^25.2.6", - "jest-util": "^25.5.0", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/transform/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/@jest/types/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/tsdx/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "node_modules/tsdx/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/tsdx/node_modules/@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^2.0.0", - "eslint": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tsdx/node_modules/@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "dev": true, - "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tsdx/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tsdx/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/babel-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", - "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", - "dev": true, - "dependencies": { - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/tsdx/node_modules/babel-jest/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/babel-plugin-jest-hoist": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", - "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "node_modules/tsdx/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.0.4.tgz", - "integrity": "sha512-+/uCzO9JTYVZVGCpZpVAQkgPGt2zkR0VYiZvJ4aVoCe4ccgpKvNQqcjzAgQzSsjK64Jhc5hvrCR3l0087BevkA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.0.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tsdx/node_modules/babel-preset-current-node-syntax": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", - "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/tsdx/node_modules/babel-preset-jest": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", - "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^25.5.0", - "babel-preset-current-node-syntax": "^0.1.2" - }, - "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/tsdx/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsdx/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/tsdx/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/tsdx/node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tsdx/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/tsdx/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/tsdx/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/tsdx/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/tsdx/node_modules/eslint-config-react-app": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", - "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", - "dev": true, - "dependencies": { - "confusing-browser-globals": "^1.0.9" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "2.x", - "@typescript-eslint/parser": "2.x", - "babel-eslint": "10.x", - "eslint": "6.x", - "eslint-plugin-flowtype": "3.x || 4.x", - "eslint-plugin-import": "2.x", - "eslint-plugin-jsx-a11y": "6.x", - "eslint-plugin-react": "7.x", - "eslint-plugin-react-hooks": "1.x || 2.x" - } - }, - "node_modules/tsdx/node_modules/eslint-plugin-react-hooks": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz", - "integrity": "sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==", - "dev": true, - "engines": { - "node": ">=7" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/tsdx/node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true, - "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/tsdx/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tsdx/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/tsdx/node_modules/expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/tsdx/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsdx/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsdx/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/tsdx/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/tsdx/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/jest": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz", - "integrity": "sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==", - "dev": true, - "dependencies": { - "@jest/core": "^25.5.4", - "import-local": "^3.0.2", - "jest-cli": "^25.5.4" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-changed-files": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", - "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "execa": "^3.2.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-changed-files/node_modules/execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": "^8.12.0 || >=9.7.0" - } - }, - "node_modules/tsdx/node_modules/jest-cli": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz", - "integrity": "sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==", - "dev": true, - "dependencies": { - "@jest/core": "^25.5.4", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^25.5.4", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "prompts": "^2.0.1", - "realpath-native": "^2.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-cli/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-config": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", - "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.5.4", - "@jest/types": "^25.5.0", - "babel-jest": "^25.5.1", - "chalk": "^3.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^25.5.0", - "jest-environment-node": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-jasmine2": "^25.5.4", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "micromatch": "^4.0.2", - "pretty-format": "^25.5.0", - "realpath-native": "^2.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-config/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-diff/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-docblock": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", - "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-environment-node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", - "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", - "dev": true, - "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-environment-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-haste-map": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", - "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "@types/graceful-fs": "^4.1.2", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-serializer": "^25.5.0", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7", - "which": "^2.0.2" - }, - "engines": { - "node": ">= 8.3" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/tsdx/node_modules/jest-leak-detector": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", - "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", - "dev": true, - "dependencies": { - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-message-util/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-resolve": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", - "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.1", - "read-pkg-up": "^7.0.1", - "realpath-native": "^2.0.0", - "resolve": "^1.17.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-resolve-dependencies": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", - "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-snapshot": "^25.5.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-resolve/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-runner": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", - "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-docblock": "^25.3.0", - "jest-haste-map": "^25.5.1", - "jest-jasmine2": "^25.5.4", - "jest-leak-detector": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "jest-runtime": "^25.5.4", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-runner/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-runtime": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", - "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/globals": "^25.5.2", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-runtime/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-snapshot": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", - "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/prettier": "^1.19.0", - "chalk": "^3.0.0", - "expect": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "make-dir": "^3.0.0", - "natural-compare": "^1.4.0", - "pretty-format": "^25.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-snapshot/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-snapshot/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-util/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-validate": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", - "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "leven": "^3.1.0", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-validate/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/jest-validate/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-watcher": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", - "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", - "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-util": "^25.5.0", - "string-length": "^3.1.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-watcher/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tsdx/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsdx/node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/tsdx/node_modules/node-notifier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz", - "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==", - "dev": true, - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.1.1", - "semver": "^6.3.0", - "shellwords": "^0.1.1", - "which": "^1.3.1" - } - }, - "node_modules/tsdx/node_modules/node-notifier/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/node-notifier/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/tsdx/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tsdx/node_modules/p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tsdx/node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/tsdx/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/tsdx/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tsdx/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tsdx/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/tsdx/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "dev": true, - "dependencies": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tsdx/node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/tsdx/node_modules/ts-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-25.5.1.tgz", - "integrity": "sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "micromatch": "4.x", - "mkdirp": "0.x", - "semver": "6.x", - "yargs-parser": "18.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": ">= 8" - }, - "peerDependencies": { - "jest": ">=25 <26", - "typescript": ">=3.4 <4.0" - } - }, - "node_modules/tsdx/node_modules/ts-jest/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsdx/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tsdx/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/tsdx/node_modules/v8-to-istanbul": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", - "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": "8.x.x || >=10.10.0" - } - }, - "node_modules/tsdx/node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tsdx/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/tsdx/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsdx/node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-function": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", - "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typedoc": { - "version": "0.24.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", - "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", - "dev": true, - "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.0", - "shiki": "^0.14.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 14.14" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" - } - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/updatable-log": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/updatable-log/-/updatable-log-0.2.0.tgz", - "integrity": "sha512-gR48/mTR6YFB+B1sNoap3nx8HFbEvDl0ej9KhlQTFZdmP8yL5fzFiCUfeHCUf1QvNnXowY1pM9iiGkPKrd0XyQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "figures": "^3.0.0", - "log-update": "^3.3.0" - } - }, - "node_modules/updatable-log/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/updatable-log/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/updatable-log/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/updatable-log/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/log-update": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-3.4.0.tgz", - "integrity": "sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.2.0", - "cli-cursor": "^2.1.0", - "wrap-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/updatable-log/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/updatable-log/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/updatable-log/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.2.tgz", - "integrity": "sha512-7yIgNnrST44S7PJ5+jXbdIupfU1nWUdQJBFBeJRclPXiWgCvrSq5Frw8lr/i//n5sqDfzoKmBymMS81l4U/7cg==", - "dev": true, - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.11.2" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/urlsafe-base64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", - "integrity": "sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, - "dependencies": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "node_modules/w3c-xmlserializer/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "optional": true - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, - "node_modules/watchpack-chokidar2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/weak-map": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", - "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "4.47.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", - "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", - "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "is-plain-object": "^5.0.0", - "lodash.debounce": "^4.0.8", - "lodash.escape": "^4.0.1", - "lodash.flatten": "^4.4.0", - "lodash.invokemap": "^4.6.0", - "lodash.pullall": "^4.2.0", - "lodash.uniqby": "^4.7.0", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/webpack/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.19", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", - "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "dependencies": { - "errno": "~0.1.7" - } - }, - "node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", - "dev": true, - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/write/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", - "dev": true - }, - "node_modules/xregexp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.1.tgz", - "integrity": "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg==", - "dependencies": { - "@babel/runtime-corejs3": "^7.16.5" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "name": "signify-ts", + "version": "0.1.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "signify-ts", + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "@types/libsodium-wrappers-sumo": "^0.7.5", + "blake3": "^2.1.7", + "buffer": "^6.0.3", + "cbor": "^8.0.0", + "collections": "^5.1.12", + "ecdsa-secp256r1": "^1.3.3", + "jest-fetch-mock": "^3.0.3", + "libsodium-wrappers-sumo": "^0.7.9", + "lodash": "^4.17.21", + "mathjs": "^11.8.2", + "msgpack5": "^5.3.2", + "structured-headers": "^0.5.0", + "text-encoding": "^0.7.0", + "ts-node": "^10.9.1", + "urlsafe-base64": "^1.0.0", + "whatwg-fetch": "^3.6.17", + "xregexp": "^5.1.0" + }, + "devDependencies": { + "@mermaid-js/mermaid-cli": "^10.3.0", + "@size-limit/preset-small-lib": "^5.0.4", + "@types/lodash": "^4.14.185", + "@types/node": "^18.11.18", + "@types/text-encoding": "^0.0.36", + "@types/urlsafe-base64": "^1.0.28", + "husky": "^7.0.2", + "jest": "^29.3.1", + "jsdoc": "^4.0.2", + "minami": "^1.2.3", + "prettier": "^3.0.3", + "size-limit": "^5.0.4", + "ts-migrate": "^0.1.23", + "ts-mockito": "^2.6.1", + "tsdx": "^0.14.1", + "tslib": "^2.3.1", + "typedoc": "^0.24.8", + "typescript": "^4.9.4" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", + "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.17", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.17", + "@babel/types": "^7.22.17", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", + "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.17.tgz", + "integrity": "sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.17" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.17.tgz", + "integrity": "sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.17" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", + "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", + "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", + "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", + "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", + "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", + "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.15.tgz", + "integrity": "sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.15", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.15", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.15", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.15", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-flow": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", + "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-flow-strip-types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz", + "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-typescript": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", + "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/register/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.15.tgz", + "integrity": "sha512-SAj8oKi8UogVi6eXQXKNPu8qZ78Yzy7zawrlTr0M+IuW/g8Qe9gVDhGcF9h1S69OyACpYoLxEzpjs1M15sI5wQ==", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", + "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.17", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", + "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", + "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", + "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/reporters": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.6.3", + "jest-config": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-resolve-dependencies": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "jest-watcher": "^29.6.4", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/environment": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", + "dev": true, + "dependencies": { + "expect": "^29.6.4", + "jest-snapshot": "^29.6.4" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", + "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", + "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/types": "^29.6.3", + "jest-mock": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", + "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", + "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", + "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", + "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdoc/salty": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", + "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v12.0.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.4.0.tgz", + "integrity": "sha512-sXohfGD6xgR8VEKvLdvSCndFaFNVTlyXjgZlJ3x8U3/J0V2VTfLIZO94Gt8KUPUccFWci8dRYDGG0fQerB+aIA==", + "dev": true, + "dependencies": { + "chalk": "^5.0.1", + "commander": "^10.0.0", + "puppeteer": "^19.0.0" + }, + "bin": { + "mmdc": "src/cli.js" + }, + "engines": { + "node": "^14.13 || >=16.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.23", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", + "dev": true + }, + "node_modules/@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "dev": true, + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz", + "integrity": "sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.8", + "commondir": "^1.0.1", + "estree-walker": "^1.0.1", + "glob": "^7.1.2", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.8" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", + "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@size-limit/file": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-5.0.5.tgz", + "integrity": "sha512-lnrQYRmTt0QzV08R9M61q0+EM7Jkcp1qZ/+BG01OOFA0rZtfHt9aKCdvoSEoMrIxK44A9lWHRmyNVnKKDfKbWA==", + "dev": true, + "dependencies": { + "semver": "7.3.5" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + }, + "peerDependencies": { + "size-limit": "5.0.5" + } + }, + "node_modules/@size-limit/preset-small-lib": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@size-limit/preset-small-lib/-/preset-small-lib-5.0.5.tgz", + "integrity": "sha512-BHZwlSEaxHPqOOienQpgoH+ueWYryXiusFpNKRj1Jmyv6/rlOxww1nTCljNhh9+hOKOsahqGbvl43cr8o7NQiQ==", + "dev": true, + "dependencies": { + "@size-limit/file": "5.0.5", + "@size-limit/webpack": "5.0.5" + }, + "peerDependencies": { + "size-limit": "5.0.5" + } + }, + "node_modules/@size-limit/webpack": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@size-limit/webpack/-/webpack-5.0.5.tgz", + "integrity": "sha512-caLXPNj1iRNeBRoycKTLMLRlLTCjIv80VmBTCag5QZMuNNu4g0weoxjnU7Jbf5YneTuXuEhKSjpc95rB4Biq7Q==", + "dev": true, + "dependencies": { + "css-loader": "^5.2.6", + "escape-string-regexp": "^4.0.0", + "file-loader": "^6.2.0", + "mkdirp": "^1.0.4", + "nanoid": "^3.1.28", + "optimize-css-assets-webpack-plugin": "^6.0.1", + "pnp-webpack-plugin": "^1.7.0", + "style-loader": "^2.0.0", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^4.4.2" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + }, + "peerDependencies": { + "size-limit": "5.0.5" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@ts-morph/bootstrap": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@ts-morph/bootstrap/-/bootstrap-0.16.0.tgz", + "integrity": "sha512-FYW3bK5EBeAgpHu0qZ57gHbLjzgzC81y5EJmrebzIhXSYg6OgZu5lFHpF5NJ7CwM7ZMhxX1PG+DRA8e+skopKw==", + "dev": true, + "dependencies": { + "@ts-morph/common": "~0.16.0" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.16.0.tgz", + "integrity": "sha512-SgJpzkTgZKLKqQniCjLaE3c2L2sdL7UShvmTmPBejAKd2OKV/yfMpQ2IWpAuA+VY5wy7PkSUaEObIqEK6afFuw==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "minimatch": "^5.1.0", + "mkdirp": "^1.0.4", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@ts-morph/common/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@ts-morph/common/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.3.tgz", + "integrity": "sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==", + "dev": true, + "dependencies": { + "jest-diff": "^25.2.1", + "pretty-format": "^25.2.1" + } + }, + "node_modules/@types/jest/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@types/jest/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest/node_modules/@types/yargs": { + "version": "15.0.15", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", + "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@types/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@types/jest/node_modules/diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", + "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@types/jest/node_modules/jest-get-type": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/libsodium-wrappers": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz", + "integrity": "sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg==" + }, + "node_modules/@types/libsodium-wrappers-sumo": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.6.tgz", + "integrity": "sha512-86R2bYU/DKVWw3q2btxTUlFO3lYKLyodbCsxxSybNQonPzPxmQkNtKCYmkV0dWQ9ZQsGIOzNNPU9RjJUALjoEg==", + "dependencies": { + "@types/libsodium-wrappers": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dev": true, + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.17.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", + "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/text-encoding": { + "version": "0.0.36", + "resolved": "https://registry.npmjs.org/@types/text-encoding/-/text-encoding-0.0.36.tgz", + "integrity": "sha512-LfATA7bH+MtAPlOshYgQ1M3n2r0TSB6Ns5ESvKYlVugkKErQg5oFbR2qO7XrKtNsrtzedDvTeqQfyTjdPJH7jw==", + "dev": true + }, + "node_modules/@types/urlsafe-base64": { + "version": "1.0.29", + "resolved": "https://registry.npmjs.org/@types/urlsafe-base64/-/urlsafe-base64-1.0.29.tgz", + "integrity": "sha512-RAowJfSG6zhSxDFl7/QC/vGeWIyJLf7pqFoh+iLP0Y/GOsH1ddmZvo2oFug/Z5pGfUM05NMQFCnzw3sSmMA72A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "dependencies": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals/node_modules/acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.7.tgz", + "integrity": "sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "optional": true + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/asyncro": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz", + "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/axe-core": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", + "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-jest": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", + "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.6.4", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-plugin-annotate-pure-calls": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz", + "integrity": "sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA==", + "dev": true, + "peerDependencies": { + "@babel/core": "^6.0.0-0 || 7.x" + } + }, + "node_modules/babel-plugin-dev-expression": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.3.tgz", + "integrity": "sha512-rP5LK9QQTzCW61nVVzw88En1oK8t8gTsIeC6E61oelxNsU842yMjF0G1MxhvUpCkxCEIj7sE8/e5ieTheT//uw==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-rename-import": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-rename-import/-/babel-plugin-transform-rename-import-2.3.0.tgz", + "integrity": "sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ==", + "dev": true + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/blake3": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/blake3/-/blake3-2.1.7.tgz", + "integrity": "sha512-5d+TdKJvju96IyEaGJ0eO6CHbckWi+NBrCezGYM/WsnI3R03aLL2TWfsuZSh1rs0fTv/L3ps/r0vykjYurcIwA==", + "hasInstallScript": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "node_modules/bytes-iec": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", + "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001532", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", + "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "dev": true, + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/ci-job-number": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ci-job-number/-/ci-job-number-1.2.2.tgz", + "integrity": "sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collections": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/collections/-/collections-5.1.13.tgz", + "integrity": "sha512-SCb6Qd+d3Z02corWQ7/mqXiXeeTdHvkP6TeFSYfGYdCFp1WrjSNZ3j6y8Y3T/7osGEe0iOcU2g1d346l99m4Lg==", + "dependencies": { + "weak-map": "~1.0.x" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/complex.js": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", + "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-concurrently/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", + "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.2.tgz", + "integrity": "sha512-Y2rxThOuNywTjnX/PgA5vWM6CZ9QB9sz9oGeCixV8MqXZO70z/5SHzf9EeBrEBK0PN36DnEBBu9O/aGWzKuMZQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-jest-runner": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/create-jest-runner/-/create-jest-runner-0.5.3.tgz", + "integrity": "sha512-a9VY2doMBmzRollJB3Ft3/Y5fBceSWJ4gdyVsg4/d7nP1S4715VG939s2VnITDj79YBmRgKhjGjNRv1c+Kre1g==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "jest-worker": "^24.0.0", + "throat": "^4.1.0" + }, + "bin": { + "create-jest-runner": "generator/index.js" + } + }, + "node_modules/create-jest-runner/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-jest-runner/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-jest-runner/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/create-jest-runner/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-jest-runner/node_modules/jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/create-jest-runner/node_modules/jest-worker/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/create-jest-runner/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/cyclist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", + "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "dependencies": { + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-secp256r1": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/ecdsa-secp256r1/-/ecdsa-secp256r1-1.3.3.tgz", + "integrity": "sha512-7JkHQ43iv9vT1U9tyGuxcE4+SMF/da+YiIMRpcwmbHmJQmqfFUuT6c7LKMasJ9soEpwFL0b9JyNkRjQ+vjVgpQ==", + "dependencies": { + "asn1.js": "^5.0.1", + "bn.js": "^4.11.8" + } + }, + "node_modules/ecdsa-secp256r1/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.513", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz", + "integrity": "sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enhanced-resolve/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/enhanced-resolve/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/enhanced-resolve/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/enhanced-resolve/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", + "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "dev": true, + "dependencies": { + "get-stdin": "^6.0.0" + }, + "bin": { + "eslint-config-prettier-check": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=3.14.1" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz", + "integrity": "sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/flow-parser": { + "version": "0.216.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.216.1.tgz", + "integrity": "sha512-wstw46/C/8bRv/8RySCl15lK376j8DHxm41xFjD9eVL+jSS1UmVpbdLdA0LzGuS2v5uGgQiBLEj6mgSJQwW+MA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/flush-write-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/flush-write-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/flush-write-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fraction.js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true, + "optional": true + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.1" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-duration": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz", + "integrity": "sha512-G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==", + "dev": true + }, + "node_modules/husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "optional": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", + "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.3" + } + }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" + }, + "node_modules/jest": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", + "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.4", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.6.4" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", + "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", + "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.3", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", + "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", + "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-jest": "^29.6.4", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.4", + "jest-environment-node": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", + "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-docblock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", + "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", + "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-jsdom": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", + "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", + "dev": true, + "dependencies": { + "@jest/environment": "^25.5.0", + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "jsdom": "^15.2.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", + "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", + "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "lolex": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "15.0.15", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", + "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-mock": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", + "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-environment-jsdom/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-environment-jsdom/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-environment-jsdom/node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", + "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-fetch-mock": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", + "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", + "dependencies": { + "cross-fetch": "^3.0.4", + "promise-polyfill": "^8.1.3" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", + "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", + "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^25.5.0", + "@jest/source-map": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "co": "^4.6.0", + "expect": "^25.5.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^25.5.0", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-runtime": "^25.5.4", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "pretty-format": "^25.5.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/console": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", + "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-message-util": "^25.5.0", + "jest-util": "^25.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/environment": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", + "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/fake-timers": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", + "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "lolex": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/globals": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", + "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", + "dev": true, + "dependencies": { + "@jest/environment": "^25.5.0", + "@jest/types": "^25.5.0", + "expect": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/source-map": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", + "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/test-result": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", + "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/types": "^25.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/test-sequencer": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", + "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", + "dev": true, + "dependencies": { + "@jest/test-result": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-runner": "^25.5.4", + "jest-runtime": "^25.5.4" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/transform": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", + "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^25.5.0", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^3.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-regex-util": "^25.2.6", + "jest-util": "^25.5.0", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "15.0.15", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", + "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/babel-jest": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", + "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", + "dev": true, + "dependencies": { + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/babel-plugin-jest-hoist": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", + "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/babel-preset-current-node-syntax": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", + "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/babel-preset-jest": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", + "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^25.5.0", + "babel-preset-current-node-syntax": "^0.1.2" + }, + "engines": { + "node": ">= 8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/expect": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", + "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-config": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", + "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^25.5.4", + "@jest/types": "^25.5.0", + "babel-jest": "^25.5.1", + "chalk": "^3.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^25.5.0", + "jest-environment-node": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-jasmine2": "^25.5.4", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "micromatch": "^4.0.2", + "pretty-format": "^25.5.0", + "realpath-native": "^2.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-diff": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", + "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-docblock": { + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", + "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-each": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", + "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-get-type": "^25.2.6", + "jest-util": "^25.5.0", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-environment-node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", + "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", + "dev": true, + "dependencies": { + "@jest/environment": "^25.5.0", + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-get-type": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-haste-map": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", + "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "@types/graceful-fs": "^4.1.2", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-serializer": "^25.5.0", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7", + "which": "^2.0.2" + }, + "engines": { + "node": ">= 8.3" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-leak-detector": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", + "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", + "dev": true, + "dependencies": { + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", + "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-mock": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", + "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-regex-util": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-resolve": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", + "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "browser-resolve": "^1.11.3", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.1", + "read-pkg-up": "^7.0.1", + "realpath-native": "^2.0.0", + "resolve": "^1.17.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-runner": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", + "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-docblock": "^25.3.0", + "jest-haste-map": "^25.5.1", + "jest-jasmine2": "^25.5.4", + "jest-leak-detector": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "jest-runtime": "^25.5.4", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-runtime": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", + "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/globals": "^25.5.2", + "@jest/source-map": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-haste-map": "^25.5.1", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-snapshot": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", + "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/prettier": "^1.19.0", + "chalk": "^3.0.0", + "expect": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "make-dir": "^3.0.0", + "natural-compare": "^1.4.0", + "pretty-format": "^25.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-validate": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", + "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "jest-get-type": "^25.2.6", + "leven": "^3.1.0", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-jasmine2/node_modules/pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-jasmine2/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-jasmine2/node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/jest-jasmine2/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", + "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-mock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", + "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", + "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.6.4" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", + "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/environment": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.6.3", + "jest-environment-node": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-leak-detector": "^29.6.3", + "jest-message-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-util": "^29.6.3", + "jest-watcher": "^29.6.4", + "jest-worker": "^29.6.4", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", + "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/globals": "^29.6.4", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-serializer": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", + "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-snapshot": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", + "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.3", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", + "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watch-typeahead": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.5.0.tgz", + "integrity": "sha512-4r36w9vU8+rdg48hj0Z7TvcSqVP6Ao8dk04grlHQNgduyCB0SqrI0xWIl85ZhXrzYvxQ0N5H+rRLAejkQzEHeQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "jest-regex-util": "^25.2.1", + "jest-watcher": "^25.2.4", + "slash": "^3.0.0", + "string-length": "^3.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", + "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-message-util": "^25.5.0", + "jest-util": "^25.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", + "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/types": "^25.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "15.0.15", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", + "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watch-typeahead/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", + "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", + "dev": true, + "dependencies": { + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "jest-util": "^25.5.0", + "string-length": "^3.1.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-watch-typeahead/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-watch-typeahead/node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "dev": true, + "dependencies": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-watcher": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", + "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.3", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jpjs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jpjs/-/jpjs-1.2.1.tgz", + "integrity": "sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dev": true, + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jscodeshift": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.6.4.tgz", + "integrity": "sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.6", + "@babel/parser": "^7.1.6", + "@babel/plugin-proposal-class-properties": "^7.1.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/preset-env": "^7.1.6", + "@babel/preset-flow": "^7.0.0", + "@babel/preset-typescript": "^7.1.0", + "@babel/register": "^7.0.0", + "babel-core": "^7.0.0-bridge.0", + "colors": "^1.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.16.1", + "temp": "^0.8.1", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + } + }, + "node_modules/jscodeshift/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jscodeshift/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", + "dev": true, + "dependencies": { + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5-writer": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/json5-writer/-/json5-writer-0.1.8.tgz", + "integrity": "sha512-h5sqkk/vSKvESOUTBniGWs8p8nTzHsoDrxPS9enJfQVINqXv3lm+FAyizLwbrCwCn0q7NXqDBb+r8AdUdK3XZw==", + "dev": true, + "dependencies": { + "jscodeshift": "^0.6.3" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "dev": true, + "dependencies": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libsodium-sumo": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.11.tgz", + "integrity": "sha512-bY+7ph7xpk51Ez2GbE10lXAQ5sJma6NghcIDaSPbM/G9elfrjLa0COHl/7P6Wb/JizQzl5UQontOOP1z0VwbLA==" + }, + "node_modules/libsodium-wrappers-sumo": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.11.tgz", + "integrity": "sha512-DGypHOmJbB1nZn89KIfGOAkDgfv5N6SBGC3Qvmy/On0P0WD1JQvNRS/e3UL3aFF+xC0m+MYz5M+MnRnK2HMrKQ==", + "dependencies": { + "libsodium-sumo": "^0.7.11" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.invokemap": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", + "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.pullall": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", + "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lolex": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", + "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/lolex/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "dev": true, + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/mathjs": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", + "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "4.3.4", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.0" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/memory-fs/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/memory-fs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/memory-fs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mico-spinner": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mico-spinner/-/mico-spinner-1.4.0.tgz", + "integrity": "sha512-6fuiQX9qRMJACVlCX6pkbV3KnjSbobr10RLB+0CNk2Z+uKPulL7wMKZSoZEiLCOvzTQc0vghjKXKVGpiMIOABw==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.0" + } + }, + "node_modules/mico-spinner/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minami": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minami/-/minami-1.2.3.tgz", + "integrity": "sha512-3f2QqqbUC1usVux0FkQMFYB73yd9JIxmHSn1dWQacizL6hOUaNu6mA3KxZ9SfiCc4qgcgq+5XP59+hP7URa1Dw==", + "dev": true + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/move-concurrently/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/msgpack5": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/msgpack5/-/msgpack5-5.3.2.tgz", + "integrity": "sha512-e9jz+6InQIUb2cGzZ/Mi+rQBs1KFLby+gNi+22VwQ1pnC9ieZjysKGmRMjdlf6IyjsltbgY4tGoHwHmyS7l94A==", + "dependencies": { + "bl": "^4.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/node-libs-browser/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/node-notifier": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", + "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.5", + "shellwords": "^0.1.1", + "uuid": "^8.3.2", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "engines": { + "node": ">=12.19" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optimize-css-assets-webpack-plugin": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz", + "integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==", + "dev": true, + "dependencies": { + "cssnano": "^5.0.2", + "last-call-webpack-plugin": "^3.0.0", + "postcss": "^8.2.1" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parallel-transform/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/parallel-transform/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/parallel-transform/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/parallel-transform/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true, + "optional": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "dev": true, + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", + "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/progress-estimator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/progress-estimator/-/progress-estimator-0.2.2.tgz", + "integrity": "sha512-GF76Ac02MTJD6o2nMNtmtOFjwWCnHcvXyn5HOWPQnEMO8OTLw7LAvNmrwe8LmdsB+eZhwUu9fX/c9iQnBxWaFA==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "cli-spinners": "^1.3.1", + "humanize-duration": "^3.15.3", + "log-update": "^2.3.0" + } + }, + "node_modules/progress-estimator/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-estimator/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-estimator/node_modules/cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-estimator/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/progress-estimator/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-estimator/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-polyfill": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "node_modules/puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "dev": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/puppeteer-core/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/pure-rand": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", + "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/realpath-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", + "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/recast": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.16.2.tgz", + "integrity": "sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A==", + "dev": true, + "dependencies": { + "ast-types": "0.11.7", + "esprima": "~4.0.0", + "private": "~0.1.5", + "source-map": "~0.6.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", + "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + }, + "bin": { + "rollup": "dist/bin/rollup" + } + }, + "node_modules/rollup-plugin-sourcemaps": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", + "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.9", + "source-map-resolve": "^0.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "@types/node": ">=10.0.0", + "rollup": ">=0.31.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-terser": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", + "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^4.0.0", + "terser": "^4.6.2" + }, + "peerDependencies": { + "rollup": ">=0.66.0 <3" + } + }, + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/rollup-plugin-typescript2": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz", + "integrity": "sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "8.1.0", + "resolve": "1.17.0", + "tslib": "2.0.1" + }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/tslib": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "dev": true + }, + "node_modules/rollup-plugin-typescript2/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/sane/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/sane/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "dependencies": { + "xmlchars": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "node_modules/shiki": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", + "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/size-limit": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-5.0.5.tgz", + "integrity": "sha512-DtblS3Qc1SmtEtAYE6RGmg1UFdIzz2aWhlnzbBc3FYc0XMsTVT0kKB40DMIZ/yU5JztkMetdqB5Q5Pow/iVazg==", + "dev": true, + "dependencies": { + "bytes-iec": "^3.1.1", + "chokidar": "^3.5.2", + "ci-job-number": "^1.2.2", + "globby": "^11.0.4", + "lilconfig": "^2.0.3", + "mico-spinner": "^1.3.0", + "picocolors": "^0.1.0" + }, + "bin": { + "size-limit": "bin.js" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/size-limit/node_modules/picocolors": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.1.0.tgz", + "integrity": "sha512-W+3MFREUEjPt0MnYaR51VkLw8tY8UubrLOqcBmaQocZhM34hQhjg50FQ0c6f0UldPlecieoqUqI6ToM/dNblDw==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-browserify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-browserify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-http/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-http/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stream-http/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", + "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/structured-headers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.5.0.tgz", + "integrity": "sha512-oLnmXSsjhud+LxRJpvokwP8ImEB2wTg8sg30buwfVViKMuluTv3BlOJHUX9VW9pJ2nQOxmx87Z0kB86O4cphag==" + }, + "node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "dev": true, + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-encoding": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", + "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", + "deprecated": "no longer maintained" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "dependencies": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-migrate": { + "version": "0.1.35", + "resolved": "https://registry.npmjs.org/ts-migrate/-/ts-migrate-0.1.35.tgz", + "integrity": "sha512-EmXahqwIP0a6fE1BLKKVMgJEeYn9V+CxJ19qFJ/DzkPL4PjDI/FcgPo8D519amBPy2nnlc/x1V6R6aIeHdD87w==", + "dev": true, + "dependencies": { + "create-jest-runner": "^0.5.3", + "json5": "^2.1.1", + "json5-writer": "^0.1.8", + "ts-migrate-plugins": "^0.1.35", + "ts-migrate-server": "^0.1.33", + "updatable-log": "^0.2.0", + "yargs": "^15.0.2" + }, + "bin": { + "ts-migrate": "build/cli.js", + "ts-migrate-full": "bin/ts-migrate-full.sh" + }, + "peerDependencies": { + "typescript": ">4.0" + } + }, + "node_modules/ts-migrate-plugins": { + "version": "0.1.35", + "resolved": "https://registry.npmjs.org/ts-migrate-plugins/-/ts-migrate-plugins-0.1.35.tgz", + "integrity": "sha512-DUkx7ClKhxKYPWDha9DJTZ6LhwEUszL90uH5I/O11K/6TbA96ytln1O3HL6Pt83i4mAKOlg0mQ6AMsPtL5FFkQ==", + "dev": true, + "dependencies": { + "eslint": "^7.14.0", + "jscodeshift": "^0.13.0", + "json-schema": "^0.4.0", + "ts-migrate-server": "^0.1.33" + }, + "peerDependencies": { + "typescript": ">4.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-migrate-plugins/node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-migrate-plugins/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-migrate-plugins/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-migrate-plugins/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/jscodeshift": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", + "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.4", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/ts-migrate-plugins/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "dev": true, + "dependencies": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ts-migrate-plugins/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-migrate-plugins/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/ts-migrate-server": { + "version": "0.1.33", + "resolved": "https://registry.npmjs.org/ts-migrate-server/-/ts-migrate-server-0.1.33.tgz", + "integrity": "sha512-MYHy10yzL2fkb2FHFQ9f54gqc5KkaVthTjtpwS4bTroYCONDelp1hbz5nxKWaP3q2oc3kBVeGuAR91RNI+yK+g==", + "dev": true, + "dependencies": { + "@ts-morph/bootstrap": "^0.16.0", + "pretty-ms": "^7.0.1", + "updatable-log": "^0.2.0" + }, + "peerDependencies": { + "typescript": ">4.0" + } + }, + "node_modules/ts-migrate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-migrate/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/ts-migrate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-migrate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-migrate/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-migrate/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-migrate/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-mockito": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", + "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.5" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/tsdx/-/tsdx-0.14.1.tgz", + "integrity": "sha512-keHmFdCL2kx5nYFlBdbE3639HQ2v9iGedAFAajobrUTH2wfX0nLPdDhbHv+GHLQZqf0c5ur1XteE8ek/+Eyj5w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.4.4", + "@babel/helper-module-imports": "^7.0.0", + "@babel/parser": "^7.11.5", + "@babel/plugin-proposal-class-properties": "^7.4.4", + "@babel/preset-env": "^7.11.0", + "@babel/traverse": "^7.11.5", + "@rollup/plugin-babel": "^5.1.0", + "@rollup/plugin-commonjs": "^11.0.0", + "@rollup/plugin-json": "^4.0.0", + "@rollup/plugin-node-resolve": "^9.0.0", + "@rollup/plugin-replace": "^2.2.1", + "@types/jest": "^25.2.1", + "@typescript-eslint/eslint-plugin": "^2.12.0", + "@typescript-eslint/parser": "^2.12.0", + "ansi-escapes": "^4.2.1", + "asyncro": "^3.0.0", + "babel-eslint": "^10.0.3", + "babel-plugin-annotate-pure-calls": "^0.4.0", + "babel-plugin-dev-expression": "^0.2.1", + "babel-plugin-macros": "^2.6.1", + "babel-plugin-polyfill-regenerator": "^0.0.4", + "babel-plugin-transform-rename-import": "^2.3.0", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "enquirer": "^2.3.4", + "eslint": "^6.1.0", + "eslint-config-prettier": "^6.0.0", + "eslint-config-react-app": "^5.2.1", + "eslint-plugin-flowtype": "^3.13.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-prettier": "^3.1.0", + "eslint-plugin-react": "^7.14.3", + "eslint-plugin-react-hooks": "^2.2.0", + "execa": "^4.0.3", + "fs-extra": "^9.0.0", + "jest": "^25.3.0", + "jest-watch-typeahead": "^0.5.0", + "jpjs": "^1.2.1", + "lodash.merge": "^4.6.2", + "ora": "^4.0.3", + "pascal-case": "^3.1.1", + "prettier": "^1.19.1", + "progress-estimator": "^0.2.2", + "regenerator-runtime": "^0.13.7", + "rollup": "^1.32.1", + "rollup-plugin-sourcemaps": "^0.6.2", + "rollup-plugin-terser": "^5.1.2", + "rollup-plugin-typescript2": "^0.27.3", + "sade": "^1.4.2", + "semver": "^7.1.1", + "shelljs": "^0.8.3", + "tiny-glob": "^0.2.6", + "ts-jest": "^25.3.1", + "tslib": "^1.9.3", + "typescript": "^3.7.3" + }, + "bin": { + "tsdx": "dist/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.0.3.tgz", + "integrity": "sha512-dULDd/APiP4JowYDAMosecKOi/1v+UId99qhBGiO3myM29KtAVKS/R3x3OJJNBR0FeYB1BcYb2dCwkhqvxWXXQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/traverse": "^7.11.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/@jest/console": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", + "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-message-util": "^25.5.0", + "jest-util": "^25.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/console/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@jest/core": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz", + "integrity": "sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/reporters": "^25.5.1", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^25.5.0", + "jest-config": "^25.5.4", + "jest-haste-map": "^25.5.1", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-resolve-dependencies": "^25.5.4", + "jest-runner": "^25.5.4", + "jest-runtime": "^25.5.4", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "jest-watcher": "^25.5.0", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "realpath-native": "^2.0.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/core/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@jest/core/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tsdx/node_modules/@jest/core/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@jest/environment": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", + "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/fake-timers": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", + "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "lolex": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/globals": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", + "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", + "dev": true, + "dependencies": { + "@jest/environment": "^25.5.0", + "@jest/types": "^25.5.0", + "expect": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/reporters": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz", + "integrity": "sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^25.5.1", + "jest-resolve": "^25.5.1", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^3.1.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^4.1.3" + }, + "engines": { + "node": ">= 8.3" + }, + "optionalDependencies": { + "node-notifier": "^6.0.0" + } + }, + "node_modules/tsdx/node_modules/@jest/reporters/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@jest/source-map": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", + "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/test-result": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", + "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/types": "^25.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/test-sequencer": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", + "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", + "dev": true, + "dependencies": { + "@jest/test-result": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-runner": "^25.5.4", + "jest-runtime": "^25.5.4" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/transform": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", + "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^25.5.0", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^3.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-regex-util": "^25.2.6", + "jest-util": "^25.5.0", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/transform/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/@jest/types/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/tsdx/node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/tsdx/node_modules/@types/yargs": { + "version": "15.0.15", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", + "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/tsdx/node_modules/@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^2.0.0", + "eslint": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tsdx/node_modules/@typescript-eslint/parser": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", + "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "dev": true, + "dependencies": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tsdx/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tsdx/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/babel-jest": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", + "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", + "dev": true, + "dependencies": { + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/tsdx/node_modules/babel-jest/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/babel-plugin-jest-hoist": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", + "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "node_modules/tsdx/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.0.4.tgz", + "integrity": "sha512-+/uCzO9JTYVZVGCpZpVAQkgPGt2zkR0VYiZvJ4aVoCe4ccgpKvNQqcjzAgQzSsjK64Jhc5hvrCR3l0087BevkA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.0.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tsdx/node_modules/babel-preset-current-node-syntax": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", + "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/tsdx/node_modules/babel-preset-jest": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", + "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^25.5.0", + "babel-preset-current-node-syntax": "^0.1.2" + }, + "engines": { + "node": ">= 8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/tsdx/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsdx/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tsdx/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/tsdx/node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tsdx/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/tsdx/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/tsdx/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/tsdx/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/tsdx/node_modules/eslint-config-react-app": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.9" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "2.x", + "@typescript-eslint/parser": "2.x", + "babel-eslint": "10.x", + "eslint": "6.x", + "eslint-plugin-flowtype": "3.x || 4.x", + "eslint-plugin-import": "2.x", + "eslint-plugin-jsx-a11y": "6.x", + "eslint-plugin-react": "7.x", + "eslint-plugin-react-hooks": "1.x || 2.x" + } + }, + "node_modules/tsdx/node_modules/eslint-plugin-react-hooks": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz", + "integrity": "sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==", + "dev": true, + "engines": { + "node": ">=7" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/tsdx/node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/eslint/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/tsdx/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tsdx/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/tsdx/node_modules/expect": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", + "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/tsdx/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsdx/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsdx/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/tsdx/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/tsdx/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/jest": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz", + "integrity": "sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==", + "dev": true, + "dependencies": { + "@jest/core": "^25.5.4", + "import-local": "^3.0.2", + "jest-cli": "^25.5.4" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-changed-files": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", + "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "execa": "^3.2.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-changed-files/node_modules/execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/tsdx/node_modules/jest-cli": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz", + "integrity": "sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==", + "dev": true, + "dependencies": { + "@jest/core": "^25.5.4", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^25.5.4", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "prompts": "^2.0.1", + "realpath-native": "^2.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-cli/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-config": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", + "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^25.5.4", + "@jest/types": "^25.5.0", + "babel-jest": "^25.5.1", + "chalk": "^3.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^25.5.0", + "jest-environment-node": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-jasmine2": "^25.5.4", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "micromatch": "^4.0.2", + "pretty-format": "^25.5.0", + "realpath-native": "^2.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-config/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-diff": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", + "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-diff/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-docblock": { + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", + "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-environment-node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", + "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", + "dev": true, + "dependencies": { + "@jest/environment": "^25.5.0", + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-environment-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/jest-get-type": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-haste-map": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", + "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "@types/graceful-fs": "^4.1.2", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-serializer": "^25.5.0", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7", + "which": "^2.0.2" + }, + "engines": { + "node": ">= 8.3" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/tsdx/node_modules/jest-leak-detector": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", + "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", + "dev": true, + "dependencies": { + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-matcher-utils": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", + "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-message-util/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-mock": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", + "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-regex-util": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "dev": true, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-resolve": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", + "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "browser-resolve": "^1.11.3", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.1", + "read-pkg-up": "^7.0.1", + "realpath-native": "^2.0.0", + "resolve": "^1.17.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-resolve-dependencies": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", + "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-snapshot": "^25.5.1" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-resolve/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-runner": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", + "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-docblock": "^25.3.0", + "jest-haste-map": "^25.5.1", + "jest-jasmine2": "^25.5.4", + "jest-leak-detector": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "jest-runtime": "^25.5.4", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-runner/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-runtime": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", + "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", + "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/globals": "^25.5.2", + "@jest/source-map": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-haste-map": "^25.5.1", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-runtime/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-snapshot": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", + "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/prettier": "^1.19.0", + "chalk": "^3.0.0", + "expect": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "make-dir": "^3.0.0", + "natural-compare": "^1.4.0", + "pretty-format": "^25.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-snapshot/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-snapshot/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-util/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-validate": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", + "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "jest-get-type": "^25.2.6", + "leven": "^3.1.0", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-validate/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/jest-validate/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-watcher": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", + "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", + "dev": true, + "dependencies": { + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "jest-util": "^25.5.0", + "string-length": "^3.1.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/jest-watcher/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tsdx/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsdx/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/tsdx/node_modules/node-notifier": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz", + "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==", + "dev": true, + "optional": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.1.1", + "semver": "^6.3.0", + "shellwords": "^0.1.1", + "which": "^1.3.1" + } + }, + "node_modules/tsdx/node_modules/node-notifier/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/node-notifier/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/tsdx/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tsdx/node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tsdx/node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/tsdx/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/tsdx/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/tsdx/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tsdx/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tsdx/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/tsdx/node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "dev": true, + "dependencies": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tsdx/node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/tsdx/node_modules/ts-jest": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-25.5.1.tgz", + "integrity": "sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "micromatch": "4.x", + "mkdirp": "0.x", + "semver": "6.x", + "yargs-parser": "18.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": ">= 8" + }, + "peerDependencies": { + "jest": ">=25 <26", + "typescript": ">=3.4 <4.0" + } + }, + "node_modules/tsdx/node_modules/ts-jest/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tsdx/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsdx/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tsdx/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/tsdx/node_modules/v8-to-istanbul": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", + "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": "8.x.x || >=10.10.0" + } + }, + "node_modules/tsdx/node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tsdx/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/tsdx/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsdx/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsdx/node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-function": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", + "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedoc": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", + "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", + "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.0", + "shiki": "^0.14.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 14.14" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/updatable-log": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/updatable-log/-/updatable-log-0.2.0.tgz", + "integrity": "sha512-gR48/mTR6YFB+B1sNoap3nx8HFbEvDl0ej9KhlQTFZdmP8yL5fzFiCUfeHCUf1QvNnXowY1pM9iiGkPKrd0XyQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "figures": "^3.0.0", + "log-update": "^3.3.0" + } + }, + "node_modules/updatable-log/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/updatable-log/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/updatable-log/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/updatable-log/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/log-update": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-3.4.0.tgz", + "integrity": "sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.2.0", + "cli-cursor": "^2.1.0", + "wrap-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/updatable-log/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/updatable-log/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/updatable-log/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/updatable-log/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.2.tgz", + "integrity": "sha512-7yIgNnrST44S7PJ5+jXbdIupfU1nWUdQJBFBeJRclPXiWgCvrSq5Frw8lr/i//n5sqDfzoKmBymMS81l4U/7cg==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/urlsafe-base64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", + "integrity": "sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "dependencies": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "node_modules/w3c-xmlserializer/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weak-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", + "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", + "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", + "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "is-plain-object": "^5.0.0", + "lodash.debounce": "^4.0.8", + "lodash.escape": "^4.0.1", + "lodash.flatten": "^4.4.0", + "lodash.invokemap": "^4.6.0", + "lodash.pullall": "^4.2.0", + "lodash.uniqby": "^4.7.0", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/webpack/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.19", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/write/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true + }, + "node_modules/xregexp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.1.tgz", + "integrity": "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg==", + "dependencies": { + "@babel/runtime-corejs3": "^7.16.5" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } + } } diff --git a/package.json b/package.json index 6e4655e4..e4d5deab 100644 --- a/package.json +++ b/package.json @@ -1,78 +1,78 @@ { - "version": "0.1.1", - "license": "Apache-2.0", - "main": "dist/index.js", - "typings": "dist/index.d.ts", - "files": [ - "dist", - "src" - ], - "scripts": { - "start": "tsdx watch", - "build": "tsdx build", - "test": "tsdx test", - "lint": "tsdx lint", - "prepare": "tsdx build", - "size": "size-limit", - "analyze": "size-limit --why", - "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", - "pretty": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' 'examples/**/*.ts' --write" - }, - "husky": { - "hooks": { - "pre-commit": "tsdx lint" - } - }, - "name": "signify-ts", - "author": "Phil Feairheller", - "module": "dist/signify-ts.esm.js", - "size-limit": [ - { - "path": "dist/signify-ts.cjs.production.min.js", - "limit": "10 KB" - }, - { - "path": "dist/signify-ts.esm.js", - "limit": "10 KB" - } - ], - "devDependencies": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/lodash": "^4.14.185", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "ts-migrate": "^0.1.23", - "ts-mockito": "^2.6.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.4" + "version": "0.1.1", + "license": "Apache-2.0", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "files": [ + "dist", + "src" + ], + "scripts": { + "start": "tsdx watch", + "build": "tsdx build", + "test": "tsdx test", + "lint": "tsdx lint", + "prepare": "tsdx build", + "size": "size-limit", + "analyze": "size-limit --why", + "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", + "pretty": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' 'examples/**/*.ts' --write" + }, + "husky": { + "hooks": { + "pre-commit": "tsdx lint" + } + }, + "name": "signify-ts", + "author": "Phil Feairheller", + "module": "dist/signify-ts.esm.js", + "size-limit": [ + { + "path": "dist/signify-ts.cjs.production.min.js", + "limit": "10 KB" }, - "dependencies": { - "@types/libsodium-wrappers-sumo": "^0.7.5", - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", - "ecdsa-secp256r1": "^1.3.3", - "jest-fetch-mock": "^3.0.3", - "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", - "mathjs": "^11.8.2", - "msgpack5": "^5.3.2", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "ts-node": "^10.9.1", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" + { + "path": "dist/signify-ts.esm.js", + "limit": "10 KB" } + ], + "devDependencies": { + "@mermaid-js/mermaid-cli": "^10.3.0", + "@size-limit/preset-small-lib": "^5.0.4", + "@types/lodash": "^4.14.185", + "@types/node": "^18.11.18", + "@types/text-encoding": "^0.0.36", + "@types/urlsafe-base64": "^1.0.28", + "husky": "^7.0.2", + "jest": "^29.3.1", + "jsdoc": "^4.0.2", + "minami": "^1.2.3", + "prettier": "^3.0.3", + "size-limit": "^5.0.4", + "ts-migrate": "^0.1.23", + "ts-mockito": "^2.6.1", + "tsdx": "^0.14.1", + "tslib": "^2.3.1", + "typedoc": "^0.24.8", + "typescript": "^4.9.4" + }, + "dependencies": { + "@types/libsodium-wrappers-sumo": "^0.7.5", + "blake3": "^2.1.7", + "buffer": "^6.0.3", + "cbor": "^8.0.0", + "collections": "^5.1.12", + "ecdsa-secp256r1": "^1.3.3", + "jest-fetch-mock": "^3.0.3", + "libsodium-wrappers-sumo": "^0.7.9", + "lodash": "^4.17.21", + "mathjs": "^11.8.2", + "msgpack5": "^5.3.2", + "structured-headers": "^0.5.0", + "text-encoding": "^0.7.0", + "ts-node": "^10.9.1", + "urlsafe-base64": "^1.0.0", + "whatwg-fetch": "^3.6.17", + "xregexp": "^5.1.0" + } } From d5964f72936130a188bd401f968ba4e43c8046b7 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 18 Oct 2023 14:52:18 -0300 Subject: [PATCH 070/186] add end role --- examples/integration-scripts/multisig.ts | 162 +++++++++++++++++- .../integration-scripts/package-lock.json | 2 + src/keri/app/aiding.ts | 8 +- src/keri/app/exchanging.ts | 2 +- src/keri/core/eventing.ts | 4 +- 5 files changed, 168 insertions(+), 10 deletions(-) diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index 99e97d29..3a096c05 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -366,7 +366,6 @@ async function run() { await new Promise((resolve) => setTimeout(resolve, 1000)); } console.log('Multisig created!'); - const identifiers1 = await client1.identifiers().list(); assert.equal(identifiers1.aids.length, 2); assert.equal(identifiers1.aids[0].name, 'member1'); @@ -406,6 +405,160 @@ async function run() { let multisig = identifiers3.aids[1].prefix; + + // Multisig end role + // for brevity, this script authorize only the agent of member 1 + // a full implementation should repeat the process to authorize all agents + + let members = await client1.identifiers().members('multisig'); + let hab = await client1.identifiers().get('multisig'); + let aid = hab['prefix']; + let signing = members['signing']; + let eid1 = Object.keys(signing[0].ends.agent)[0]; //agent of member 1 + // other agent eids can be obtained with + // let eid2 = Object.keys(signing[1].ends.agent)[0]; + // let eid3 = Object.keys(signing[2].ends.agent)[0]; + console.log(`Starting multisig end role authorization for agent ${eid1}`); + + // initial stamp for the event that will be passed in the exn message + // to the other members + let stamp = new Date().toISOString().replace('Z', '000+00:00'); + + let endRoleRes = await client1.identifiers().addEndRole('multisig','agent',eid1,stamp); + op1 = await endRoleRes.op(); + let rpy = endRoleRes.serder; + sigs = endRoleRes.sigs; + let mstate = hab["state"]; + let seal = ['SealEvent', {i: hab['prefix'], s: mstate["ee"]["s"], d: mstate["ee"]["d"]}]; + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); + let roleims = signify.d(signify.messagize(rpy, sigers, seal, undefined, undefined, false)); + atc = roleims.substring(rpy.size); + let roleembeds: any = { + rpy: [rpy, atc] + } + recp = [aid2['state'], aid3['state']].map((state) => state['i']); + res = await client1.exchanges().send( + 'member1', + 'multisig', + aid1, + '/multisig/rpy', + {gid: aid}, + roleembeds, + recp + ); + console.log(`Member1 authorized agent role to ${eid1}, waiting for others to authorize...`); + + //Member2 check for notifications and join the authorization + msgSaid = ''; + while (msgSaid == '') { + let notifications = await client2.notifications().list(1); + for (let notif of notifications.notes) { + if (notif.a.r == '/multisig/rpy') { + msgSaid = notif.a.d; + await client2.notifications().mark(notif.i); + console.log( + 'Member2 received exchange message to join the end role authorization' + ); + } + } + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + res = await client2.groups().getRequest(msgSaid); + exn = res[0].exn; + // stamp, eid and role are provided in the exn message + let rpystamp = exn.e.rpy.dt; + let rpyrole = exn.e.rpy.a.role; + let rpyeid = exn.e.rpy.a.eid; + endRoleRes = await client2.identifiers().addEndRole('multisig',rpyrole,rpyeid,rpystamp); + op2 = await endRoleRes.op() + rpy = endRoleRes.serder; + sigs = endRoleRes.sigs; + + hab = await client2.identifiers().get('multisig'); + mstate = hab["state"] + seal = ['SealEvent', {i: hab['prefix'], s: mstate["ee"]["s"], d: mstate["ee"]["d"]}]; + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); + roleims = signify.d(signify.messagize(rpy, sigers, seal, undefined, undefined, false)); + atc = roleims.substring(rpy.size); + roleembeds = { + rpy: [rpy, atc] + } + recp = [aid1['state'], aid3['state']].map((state) => state['i']); + res = await client2.exchanges().send( + 'member2', + 'multisig', + aid2, + '/multisig/rpy', + {gid: aid}, + roleembeds, + recp + ); + console.log(`Member2 authorized agent role to ${eid1}, waiting for others to authorize...`); + + //Member3 check for notifications and join the authorization + msgSaid = ''; + while (msgSaid == '') { + let notifications = await client3.notifications().list(1); + for (let notif of notifications.notes) { + if (notif.a.r == '/multisig/rpy') { + msgSaid = notif.a.d; + await client3.notifications().mark(notif.i); + console.log( + 'Member3 received exchange message to join the end role authorization' + ); + } + } + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + res = await client3.groups().getRequest(msgSaid); + exn = res[0].exn; + rpystamp = exn.e.rpy.dt; + rpyrole = exn.e.rpy.a.role; + rpyeid = exn.e.rpy.a.eid; + endRoleRes = await client3.identifiers().addEndRole('multisig',rpyrole,rpyeid,rpystamp); + + op3 = await endRoleRes.op() + rpy = endRoleRes.serder; + sigs = endRoleRes.sigs; + hab = await client3.identifiers().get('multisig'); + mstate = hab["state"] + seal = ['SealEvent', {i: hab['prefix'], s: mstate["ee"]["s"], d: mstate["ee"]["d"]}]; + sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); + roleims = signify.d(signify.messagize(rpy, sigers, seal, undefined, undefined, false)); + atc = roleims.substring(rpy.size); + roleembeds = { + rpy: [rpy, atc] + } + recp = [aid1['state'], aid2['state']].map((state) => state['i']); + res = await client3.exchanges().send( + 'member3', + 'multisig', + aid3, + '/multisig/rpy', + {gid: aid}, + roleembeds, + recp + ); + console.log(`Member3 authorized agent role to ${eid1}, waiting for others to authorize...`); + + + // Check for completion + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + + while (!op2['done']) { + op2 = await client2.operations().get(op2.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + + while (!op3['done']) { + op3 = await client3.operations().get(op3.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + console.log(`End role authorization for agent ${eid1}completed!`); + // MultiSig Interaction // Member1 initiates an interaction event @@ -767,6 +920,8 @@ async function run() { } console.log('Multisig rotation completed!'); + // Multisig Registry creation + console.log('Starting multisig registry creation'); let vcpRes1 = await client1.registries().create({ @@ -854,7 +1009,7 @@ async function run() { regbeds, recp ); - console.log('Member2 joins rotation event, waiting for others...'); + console.log('Member2 joins registry event, waiting for others...'); // Member3 check for notifications and join the create registry event msgSaid = ''; @@ -923,5 +1078,6 @@ async function run() { op3 = await client3.operations().get(op3.name); await new Promise((resolve) => setTimeout(resolve, 1000)); } - // console.log("Multisig create registry completed!") + console.log("Multisig create registry completed!"); + } diff --git a/examples/integration-scripts/package-lock.json b/examples/integration-scripts/package-lock.json index 55c1e052..e1c90b16 100644 --- a/examples/integration-scripts/package-lock.json +++ b/examples/integration-scripts/package-lock.json @@ -29,6 +29,7 @@ "buffer": "^6.0.3", "cbor": "^8.0.0", "collections": "^5.1.12", + "ecdsa-secp256r1": "^1.3.3", "jest-fetch-mock": "^3.0.3", "libsodium-wrappers-sumo": "^0.7.9", "lodash": "^4.17.21", @@ -52,6 +53,7 @@ "jest": "^29.3.1", "jsdoc": "^4.0.2", "minami": "^1.2.3", + "prettier": "^3.0.3", "size-limit": "^5.0.4", "ts-migrate": "^0.1.23", "ts-mockito": "^2.6.1", diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index 09e95de9..4797479d 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -361,7 +361,7 @@ export class Identifier { return new EventResult(serder, sigs, res); } - /** + /** * Authorize an endpoint provider in a given role for a managed identifier * @remarks * Typically used to authorize the agent to be the endpoint provider for the identifier in the role of `agent` @@ -370,7 +370,7 @@ export class Identifier { * @param {string} role Authorized role for eid * @param {string} [eid] Optional qb64 of endpoint provider to be authorized * @param {string} [stamp=now] Optional date-time-stamp RFC-3339 profile of iso8601 datetime. Now is the default if not provided - * @returns {Promise} A promise to the result of the authorization + * @returns {Promise} A promise to the result of the authorization */ async addEndRole( name: string, @@ -390,12 +390,12 @@ export class Identifier { sigs: sigs, }; - let res = await this.client.fetch( + let res = this.client.fetch( '/identifiers/' + name + '/endroles', 'POST', jsondata ); - return await res.json(); + return new EventResult(rpy,sigs, res); } /** diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts index cf15306c..a9d5e1c3 100644 --- a/src/keri/app/exchanging.ts +++ b/src/keri/app/exchanging.ts @@ -134,7 +134,7 @@ export function exchange( ): [Serder, Uint8Array] { const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); const ilk = Ilks.exn; - const dt = date !== undefined ? date : nowUTC().toISOString(); + const dt = date !== undefined ? date : nowUTC().toISOString().replace('Z', '000+00:00'); const p = dig !== undefined ? dig : ''; const q = modifiers !== undefined ? modifiers : {}; const ems = embeds != undefined ? embeds : {}; diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index 28ddad57..5983d01f 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -432,9 +432,9 @@ export function messagize( new Counter({ code: CtrDex.TransIdxSigGroups, count: 1 }) .qb64b ); - atc = concat(atc, seal.i.encode('utf-8')); + atc = concat(atc, new TextEncoder().encode(seal[1].i)); atc = concat(atc, new Seqner(seal[1].s).qb64b); - atc = concat(atc, seal.d.encode('utf-8')); + atc = concat(atc, new TextEncoder().encode(seal[1].d)); } else if (seal[0] == 'SealLast') { atc = concat( atc, From d354555d86819c75cc99b59b85bc9577e3f0171c Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 18 Oct 2023 14:53:37 -0300 Subject: [PATCH 071/186] prettyfied --- .../integration-scripts/externalModule.ts | 12 +- examples/integration-scripts/multisig.ts | 138 +++++++++++------- examples/integration-scripts/salty.ts | 16 +- src/keri/app/aiding.ts | 4 +- src/keri/app/exchanging.ts | 5 +- 5 files changed, 102 insertions(+), 73 deletions(-) diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts index 4329e6b0..9765c2a9 100644 --- a/examples/integration-scripts/externalModule.ts +++ b/examples/integration-scripts/externalModule.ts @@ -32,13 +32,11 @@ async function run() { state1.agent.i ); let words = new BIP39Shim(0, {}).generateMnemonic(256); - let icpResult = await client1 - .identifiers() - .create('aid1', { - algo: signify.Algos.extern, - extern_type: 'bip39_shim', - extern: { mnemonics: words }, - }); + let icpResult = await client1.identifiers().create('aid1', { + algo: signify.Algos.extern, + extern_type: 'bip39_shim', + extern: { mnemonics: words }, + }); let op = await icpResult.op(); assert.equal(op['done'], true); } diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index 3a096c05..252e6c57 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -405,7 +405,6 @@ async function run() { let multisig = identifiers3.aids[1].prefix; - // Multisig end role // for brevity, this script authorize only the agent of member 1 // a full implementation should repeat the process to authorize all agents @@ -424,29 +423,40 @@ async function run() { // to the other members let stamp = new Date().toISOString().replace('Z', '000+00:00'); - let endRoleRes = await client1.identifiers().addEndRole('multisig','agent',eid1,stamp); + let endRoleRes = await client1 + .identifiers() + .addEndRole('multisig', 'agent', eid1, stamp); op1 = await endRoleRes.op(); let rpy = endRoleRes.serder; sigs = endRoleRes.sigs; - let mstate = hab["state"]; - let seal = ['SealEvent', {i: hab['prefix'], s: mstate["ee"]["s"], d: mstate["ee"]["d"]}]; - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); - let roleims = signify.d(signify.messagize(rpy, sigers, seal, undefined, undefined, false)); + let mstate = hab['state']; + let seal = [ + 'SealEvent', + { i: hab['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, + ]; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + let roleims = signify.d( + signify.messagize(rpy, sigers, seal, undefined, undefined, false) + ); atc = roleims.substring(rpy.size); let roleembeds: any = { - rpy: [rpy, atc] - } + rpy: [rpy, atc], + }; recp = [aid2['state'], aid3['state']].map((state) => state['i']); - res = await client1.exchanges().send( - 'member1', - 'multisig', - aid1, - '/multisig/rpy', - {gid: aid}, - roleembeds, - recp + res = await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/rpy', + { gid: aid }, + roleembeds, + recp + ); + console.log( + `Member1 authorized agent role to ${eid1}, waiting for others to authorize...` ); - console.log(`Member1 authorized agent role to ${eid1}, waiting for others to authorize...`); //Member2 check for notifications and join the authorization msgSaid = ''; @@ -469,31 +479,42 @@ async function run() { let rpystamp = exn.e.rpy.dt; let rpyrole = exn.e.rpy.a.role; let rpyeid = exn.e.rpy.a.eid; - endRoleRes = await client2.identifiers().addEndRole('multisig',rpyrole,rpyeid,rpystamp); - op2 = await endRoleRes.op() + endRoleRes = await client2 + .identifiers() + .addEndRole('multisig', rpyrole, rpyeid, rpystamp); + op2 = await endRoleRes.op(); rpy = endRoleRes.serder; sigs = endRoleRes.sigs; hab = await client2.identifiers().get('multisig'); - mstate = hab["state"] - seal = ['SealEvent', {i: hab['prefix'], s: mstate["ee"]["s"], d: mstate["ee"]["d"]}]; - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); - roleims = signify.d(signify.messagize(rpy, sigers, seal, undefined, undefined, false)); + mstate = hab['state']; + seal = [ + 'SealEvent', + { i: hab['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, + ]; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + roleims = signify.d( + signify.messagize(rpy, sigers, seal, undefined, undefined, false) + ); atc = roleims.substring(rpy.size); roleembeds = { - rpy: [rpy, atc] - } + rpy: [rpy, atc], + }; recp = [aid1['state'], aid3['state']].map((state) => state['i']); - res = await client2.exchanges().send( - 'member2', - 'multisig', - aid2, - '/multisig/rpy', - {gid: aid}, - roleembeds, - recp + res = await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/rpy', + { gid: aid }, + roleembeds, + recp + ); + console.log( + `Member2 authorized agent role to ${eid1}, waiting for others to authorize...` ); - console.log(`Member2 authorized agent role to ${eid1}, waiting for others to authorize...`); //Member3 check for notifications and join the authorization msgSaid = ''; @@ -515,32 +536,42 @@ async function run() { rpystamp = exn.e.rpy.dt; rpyrole = exn.e.rpy.a.role; rpyeid = exn.e.rpy.a.eid; - endRoleRes = await client3.identifiers().addEndRole('multisig',rpyrole,rpyeid,rpystamp); + endRoleRes = await client3 + .identifiers() + .addEndRole('multisig', rpyrole, rpyeid, rpystamp); - op3 = await endRoleRes.op() + op3 = await endRoleRes.op(); rpy = endRoleRes.serder; sigs = endRoleRes.sigs; hab = await client3.identifiers().get('multisig'); - mstate = hab["state"] - seal = ['SealEvent', {i: hab['prefix'], s: mstate["ee"]["s"], d: mstate["ee"]["d"]}]; - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); - roleims = signify.d(signify.messagize(rpy, sigers, seal, undefined, undefined, false)); + mstate = hab['state']; + seal = [ + 'SealEvent', + { i: hab['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, + ]; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + roleims = signify.d( + signify.messagize(rpy, sigers, seal, undefined, undefined, false) + ); atc = roleims.substring(rpy.size); roleembeds = { - rpy: [rpy, atc] - } + rpy: [rpy, atc], + }; recp = [aid1['state'], aid2['state']].map((state) => state['i']); - res = await client3.exchanges().send( - 'member3', - 'multisig', - aid3, - '/multisig/rpy', - {gid: aid}, - roleembeds, - recp + res = await client3 + .exchanges() + .send( + 'member3', + 'multisig', + aid3, + '/multisig/rpy', + { gid: aid }, + roleembeds, + recp + ); + console.log( + `Member3 authorized agent role to ${eid1}, waiting for others to authorize...` ); - console.log(`Member3 authorized agent role to ${eid1}, waiting for others to authorize...`); - // Check for completion while (!op1['done']) { @@ -1078,6 +1109,5 @@ async function run() { op3 = await client3.operations().get(op3.name); await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Multisig create registry completed!"); - + console.log('Multisig create registry completed!'); } diff --git a/examples/integration-scripts/salty.ts b/examples/integration-scripts/salty.ts index e25bb563..281881e3 100644 --- a/examples/integration-scripts/salty.ts +++ b/examples/integration-scripts/salty.ts @@ -55,15 +55,13 @@ async function run() { assert.equal(salt.stem, 'signify:aid'); assert.equal(aid.prefix, icp.pre); - icpResult = await client1 - .identifiers() - .create('aid2', { - count: 3, - ncount: 3, - isith: '2', - nsith: '2', - bran: '0123456789lmnopqrstuv', - }); + icpResult = await client1.identifiers().create('aid2', { + count: 3, + ncount: 3, + isith: '2', + nsith: '2', + bran: '0123456789lmnopqrstuv', + }); op = await icpResult.op(); assert.equal(op['done'], true); const aid2 = op['response']; diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index 4797479d..594ca7cc 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -361,7 +361,7 @@ export class Identifier { return new EventResult(serder, sigs, res); } - /** + /** * Authorize an endpoint provider in a given role for a managed identifier * @remarks * Typically used to authorize the agent to be the endpoint provider for the identifier in the role of `agent` @@ -395,7 +395,7 @@ export class Identifier { 'POST', jsondata ); - return new EventResult(rpy,sigs, res); + return new EventResult(rpy, sigs, res); } /** diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts index a9d5e1c3..fdea31cb 100644 --- a/src/keri/app/exchanging.ts +++ b/src/keri/app/exchanging.ts @@ -134,7 +134,10 @@ export function exchange( ): [Serder, Uint8Array] { const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); const ilk = Ilks.exn; - const dt = date !== undefined ? date : nowUTC().toISOString().replace('Z', '000+00:00'); + const dt = + date !== undefined + ? date + : nowUTC().toISOString().replace('Z', '000+00:00'); const p = dig !== undefined ? dig : ''; const q = modifiers !== undefined ? modifiers : {}; const ems = embeds != undefined ? embeds : {}; From e72da5e34dc4999849402774c11248a3be0f25f4 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 18 Oct 2023 15:14:47 -0300 Subject: [PATCH 072/186] test coverage --- test/core/eventing.test.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/core/eventing.test.ts b/test/core/eventing.test.ts index 6f3664dd..b0b18452 100644 --- a/test/core/eventing.test.ts +++ b/test/core/eventing.test.ts @@ -172,5 +172,18 @@ describe('key event function', () => { '"nt":1,"n":["EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":0,"b":[],"c":[],"a":[]}' + '-AABAABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I' ); + let seal = [ + 'SealEvent', + { i: 'EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL', s: '0', d: 'EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL' }, + ]; + let msgseal = messagize(serder0, [siger], seal); + assert.equal( + d(msgseal), + '{"v":"KERI10JSON000125_","t":"icp","d":"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","i"'+ + ':"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","s":"0","kt":1,"k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"]'+ + ',"nt":1,"n":["EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":0,"b":[],"c":[],"a"'+ + ':[]}-FABEIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL0AAAAAAAAAAAAAAAAAAAAAAAEIflL4H4134zYoRM6ls6Q086RLC_'+ + 'BhfNFh5uk-WxvhsL-AABAABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I' + ); }); }); From 92451623cc2d075c5177ae155ac8d0bc96cdc983 Mon Sep 17 00:00:00 2001 From: Kevin Griffin Date: Wed, 25 Oct 2023 12:44:35 -0400 Subject: [PATCH 073/186] adds IPEX admit Signed-off-by: Kevin Griffin --- src/keri/app/credentialing.ts | 31 +++++++++++++++++++++++++++++++ test/app/credentialing.test.ts | 25 +++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index a2b13733..79555fc7 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -759,4 +759,35 @@ export class Ipex { ); } + /** + * Create an IPEX admit EXN message + * @async + * @param {string} name Name or alias of the identifier + * @param {string} message accompany human readable description of the credential being admitted + * @param {string} grant qb64 SAID of grant message this admit is responding to + * @param {string} datetime Optional datetime to set for the credential + * @returns {Promise<[Serder, string[], string]>} A promise to the long-running operation + */ + async admit( + name: string, + message: string, + grant: string, + datetime?: string, + ): Promise<[Serder, string[], string]> { + let hab = await this.client.identifiers().get(name); + let data: any = { + m: message, + } + + return this.client.exchanges().createExchangeMessage( + hab, + '/ipex/admit', + data, + {}, + undefined, + datetime, + grant + ); + } + } diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index c5a0c00f..7d6d16a0 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -414,5 +414,30 @@ describe("Ipex", () => { ) assert.equal(end, "-LAD4AACA-e-acdc-LAD5AACAA-e-iss-LAE5AACAA-e-anc-vtest") + + let [admit, asigs, aend] = await ipex.admit( + 'holder', + '', + grant.ked.d, + mockCredential.sad.a.dt) + + assert.deepStrictEqual(admit.ked, { + v: 'KERI10JSON000111_', + t: 'exn', + d: 'EB7FkJBteJSZVV_dsjd0dmx6ORoRO6hJY91HR0z-x9tF', + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + p: 'ECO262mMZcwP94aY0cUl5IL6LOK_R_Md1irVDdQEwtHl', + dt: '2023-08-23T15:16:07.553000+00:00', + r: '/ipex/admit', + q: {}, + a: {'m': ''}, + e: {}, + }) + + assert.deepStrictEqual(asigs, [ + 'AAD6NAWzEr_KonMJhKL32JLTVZ2_xwVNMqlr-ovAwoIQS5IEWZ8POd4rbWO49-8NqK8GedjUyii3y9o1b0QkYzQJ' + ]) + + assert.equal(aend, "") }) }) \ No newline at end of file From 628205259fd0eed76eeff9d0a7177e2fb82e85e6 Mon Sep 17 00:00:00 2001 From: Kevin Griffin Date: Wed, 25 Oct 2023 13:01:56 -0400 Subject: [PATCH 074/186] pretty Signed-off-by: Kevin Griffin --- .../scripts/multisig-create-credential.ts | 159 ++++++++------ src/keri/app/clienting.ts | 3 +- src/keri/app/credentialing.ts | 70 ++++--- test/app/credentialing.test.ts | 194 +++++++++--------- test/core/eventing.test.ts | 16 +- 5 files changed, 242 insertions(+), 200 deletions(-) diff --git a/examples/scripts/multisig-create-credential.ts b/examples/scripts/multisig-create-credential.ts index 052431c2..1d4b9b90 100644 --- a/examples/scripts/multisig-create-credential.ts +++ b/examples/scripts/multisig-create-credential.ts @@ -37,7 +37,7 @@ async function connect() { const exchanges = client.exchanges(); let salt = '0123456789lmnopqrstuv'; - let res = await identifiers.create('agent0', {bran: salt}); + let res = await identifiers.create('agent0', { bran: salt }); let op = await res.op(); let aid = op['response']; @@ -90,7 +90,7 @@ async function connect() { let serder = ires.serder; let sigs = ires.sigs; - let sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); + let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); let ims = signify.d(signify.messagize(serder, sigers)); let atc = ims.substring(serder.size); @@ -106,22 +106,22 @@ async function connect() { 'multisig', aid, '/multisig/icp', - {gid: serder.pre, smids: smids, rmids: smids}, + { gid: serder.pre, smids: smids, rmids: smids }, embeds, recp ); - let multisigAID = serder.pre - console.log("Waiting for multisig AID to be created") + let multisigAID = serder.pre; + console.log('Waiting for multisig AID to be created'); - op = await ires.op() + op = await ires.op(); while (!op['done']) { op = await operations.get(op['name']); await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second } console.log('done.'); - console.log("Resolving schema...") + console.log('Resolving schema...'); op = await oobis.resolve( 'http://127.0.0.1:7723/oobi/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', 'schema' @@ -131,10 +131,9 @@ async function connect() { await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second } console.log('done.'); - let schemaSAID = "EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao" + let schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; - - console.log("Creating registry...") + console.log('Creating registry...'); let vcpRes1 = await client.registries().create({ name: 'multisig', registryName: 'vLEI Registry', @@ -143,11 +142,11 @@ async function connect() { let op1 = await vcpRes1.op(); serder = vcpRes1.regser; - let regk = serder.pre + let regk = serder.pre; let anc = vcpRes1.serder; sigs = vcpRes1.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({qb64: sig})); + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(anc, sigers)); atc = ims.substring(anc.size); @@ -156,16 +155,21 @@ async function connect() { anc: [anc, atc], }; - recp = ["EKYLUMmNPZeEs77Zvclf0bSN5IN-mLfLpx2ySb-HDlk4", "EJccSRTfXYF6wrUVuenAIHzwcx3hJugeiJsEKmndi5q1"] - await client.exchanges().send( - 'agent0', - 'multisig', - aid, - '/multisig/vcp', - {gid: multisigAID, usage: 'Issue vLEIs'}, - regbeds, - recp - ); + recp = [ + 'EKYLUMmNPZeEs77Zvclf0bSN5IN-mLfLpx2ySb-HDlk4', + 'EJccSRTfXYF6wrUVuenAIHzwcx3hJugeiJsEKmndi5q1', + ]; + await client + .exchanges() + .send( + 'agent0', + 'multisig', + aid, + '/multisig/vcp', + { gid: multisigAID, usage: 'Issue vLEIs' }, + regbeds, + recp + ); while (!op1['done']) { op1 = await operations.get(op1['name']); @@ -173,24 +177,34 @@ async function connect() { } console.log('done.'); - console.log("Creating credential from multisig...") + console.log('Creating credential from multisig...'); // Issue credential const vcdata = { LEI: '5493001KJTIIGC8Y1R17', }; - let holder = "ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k" - - let TIME = "2023-09-25T16:01:37.000000+00:00" - let credRes = await client.credentials().issue('multisig', regk, schemaSAID, holder, vcdata, - undefined, undefined, TIME); - op1 = await credRes.op() - - let acdc = new signify.Serder(credRes.acdc) - let iss = credRes.iserder - let ianc = credRes.anc - let isigs = credRes.sigs - - sigers = isigs.map((sig: any) => new signify.Siger({qb64: sig})); + let holder = 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k'; + + let TIME = '2023-09-25T16:01:37.000000+00:00'; + let credRes = await client + .credentials() + .issue( + 'multisig', + regk, + schemaSAID, + holder, + vcdata, + undefined, + undefined, + TIME + ); + op1 = await credRes.op(); + + let acdc = new signify.Serder(credRes.acdc); + let iss = credRes.iserder; + let ianc = credRes.anc; + let isigs = credRes.sigs; + + sigers = isigs.map((sig: any) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(ianc, sigers)); atc = ims.substring(anc.size); @@ -200,47 +214,58 @@ async function connect() { anc: [ianc, atc], }; - await client.exchanges().send( - 'agent0', - 'multisig', - aid, - '/multisig/iss', - {gid: multisigAID}, - vcembeds, - recp - ); + await client + .exchanges() + .send( + 'agent0', + 'multisig', + aid, + '/multisig/iss', + { gid: multisigAID }, + vcembeds, + recp + ); while (!op1['done']) { op1 = await client.operations().get(op1.name); await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log("Creating IPEX grant message to send...") + console.log('Creating IPEX grant message to send...'); - let [grant, gsigs, end] = await client.ipex().grant("multisig", holder, "", acdc, iss, ianc, atc, undefined, TIME) - let m = await client.identifiers().get("multisig") + let [grant, gsigs, end] = await client + .ipex() + .grant('multisig', holder, '', acdc, iss, ianc, atc, undefined, TIME); + let m = await client.identifiers().get('multisig'); - let mstate = m["state"] - let seal = ['SealEvent', {i: m['prefix'], s: mstate["ee"]["s"], d: mstate["ee"]["d"]}]; - sigers = gsigs.map((sig: any) => new signify.Siger({qb64: sig})); + let mstate = m['state']; + let seal = [ + 'SealEvent', + { i: m['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, + ]; + sigers = gsigs.map((sig: any) => new signify.Siger({ qb64: sig })); - let gims = signify.d(signify.messagize(grant, sigers, seal, undefined, undefined, true)); - atc = gims.substring(grant.size) - atc += end + let gims = signify.d( + signify.messagize(grant, sigers, seal, undefined, undefined, true) + ); + atc = gims.substring(grant.size); + atc += end; let gembeds: any = { - exn: [grant, atc] - } - - await client.exchanges().send( - 'agent0', - 'multisig', - aid, - '/multisig/exn', - {gid: multisigAID}, - gembeds, - recp - ); + exn: [grant, atc], + }; - console.log("... done!") + await client + .exchanges() + .send( + 'agent0', + 'multisig', + aid, + '/multisig/exn', + { gid: multisigAID }, + gembeds, + recp + ); + + console.log('... done!'); } diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 730c7417..10790592 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -6,7 +6,7 @@ import { ExternalModule, KeyManager } from '../core/keeping'; import { Identifier } from './aiding'; import { Contacts, Challenges } from './contacting'; import { Oobis, Operations, KeyEvents, KeyStates } from './coring'; -import {Credentials, Ipex, Registries, Schemas} from './credentialing'; +import { Credentials, Ipex, Registries, Schemas } from './credentialing'; import { Notifications } from './notifying'; import { Escrows } from './escrowing'; import { Groups } from './grouping'; @@ -417,7 +417,6 @@ export class SignifyClient { return new Credentials(this); } - /** * Get IPEX resource * @returns {Ipex} diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 79555fc7..7c44f281 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -61,7 +61,7 @@ export class CredentialResult { } get anc() { - return this._anc + return this._anc; } get sigs() { @@ -165,7 +165,10 @@ export class Credentials { let hab = await this.client.identifiers().get(name); let pre: string = hab.prefix; - const dt = datetime === undefined ? new Date().toISOString().replace('Z', '000+00:00') : datetime; + const dt = + datetime === undefined + ? new Date().toISOString().replace('Z', '000+00:00') + : datetime; const vsacdc = versify(Ident.ACDC, undefined, Serials.JSON, 0); const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); @@ -213,7 +216,7 @@ export class Credentials { }; let [, iss] = Saider.saidify(_iss); - let iserder = new Serder(iss) + let iserder = new Serder(iss); // Create paths and sign let keeper = this.client!.manager!.get(hab); @@ -255,9 +258,8 @@ export class Credentials { ixn = anc.ked; } - let res = this.issueFromEvents(hab,name, vc, iss, ixn, sigs) - return new CredentialResult(vc, iserder, anc, sigs, res) - + let res = this.issueFromEvents(hab, name, vc, iss, ixn, sigs); + return new CredentialResult(vc, iserder, anc, sigs, res); } issueFromEvents( @@ -696,7 +698,6 @@ export class Schemas { } } - /** * Ipex */ @@ -731,16 +732,16 @@ export class Ipex { message: string, acdc: Serder, iss: Serder, - anc:Serder, + anc: Serder, atc: string, - agree?:string, - datetime?: string, + agree?: string, + datetime?: string ): Promise<[Serder, string[], string]> { let hab = await this.client.identifiers().get(name); let data: any = { m: message, - i: recp - } + i: recp, + }; let embeds: any = { acdc: [acdc, ''], @@ -748,15 +749,17 @@ export class Ipex { anc: [anc, atc], }; - return this.client.exchanges().createExchangeMessage( - hab, - '/ipex/grant', - data, - embeds, - undefined, - datetime, - agree - ); + return this.client + .exchanges() + .createExchangeMessage( + hab, + '/ipex/grant', + data, + embeds, + undefined, + datetime, + agree + ); } /** @@ -772,22 +775,23 @@ export class Ipex { name: string, message: string, grant: string, - datetime?: string, + datetime?: string ): Promise<[Serder, string[], string]> { let hab = await this.client.identifiers().get(name); let data: any = { m: message, - } + }; - return this.client.exchanges().createExchangeMessage( - hab, - '/ipex/admit', - data, - {}, - undefined, - datetime, - grant - ); + return this.client + .exchanges() + .createExchangeMessage( + hab, + '/ipex/admit', + data, + {}, + undefined, + datetime, + grant + ); } - } diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index 7d6d16a0..87a79c68 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -1,12 +1,20 @@ -import {strict as assert} from 'assert'; -import {SignifyClient} from '../../src/keri/app/clienting'; +import { strict as assert } from 'assert'; +import { SignifyClient } from '../../src/keri/app/clienting'; -import {Authenticater} from '../../src/keri/core/authing'; -import {Salter, Tier} from '../../src/keri/core/salter'; +import { Authenticater } from '../../src/keri/core/authing'; +import { Salter, Tier } from '../../src/keri/core/salter'; import libsodium from 'libsodium-wrappers-sumo'; import fetchMock from 'jest-fetch-mock'; import 'whatwg-fetch'; -import {Ident, Ilks, interact, Saider, Serder, Serials, versify} from "../../src"; +import { + Ident, + Ilks, + interact, + Saider, + Serder, + Serials, + versify, +} from '../../src'; fetchMock.enableMocks(); @@ -105,7 +113,7 @@ const mockCredential = { d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', ra: {}, - a: {s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt'}, + a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, dt: '2023-08-23T15:16:07.553000+00:00', et: 'iss', }, @@ -113,9 +121,9 @@ const mockCredential = { fetchMock.mockResponse((req) => { if (req.url.startsWith(url + '/agent')) { - return Promise.resolve({body: mockConnect, init: {status: 202}}); + return Promise.resolve({ body: mockConnect, init: { status: 202 } }); } else if (req.url == boot_url + '/boot') { - return Promise.resolve({body: '', init: {status: 202}}); + return Promise.resolve({ body: '', init: { status: 202 } }); } else { let headers = new Headers(); let signed_headers = new Headers(); @@ -131,7 +139,7 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm'}); + let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); let signer = salter.signer( 'A', true, @@ -151,7 +159,7 @@ fetchMock.mockResponse((req) => { return Promise.resolve({ body: JSON.stringify(body), - init: {status: 202, headers: signed_headers}, + init: { status: 202, headers: signed_headers }, }); } }); @@ -170,9 +178,9 @@ describe('Credentialing', () => { let kargs = { filter: { - '-i': {$eq: 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX'}, + '-i': { $eq: 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' }, }, - sort: [{'-s': 1}], + sort: [{ '-s': 1 }], limit: 25, skip: 5, }; @@ -192,7 +200,7 @@ describe('Credentialing', () => { assert.equal( lastCall[0]!, url + - '/identifiers/aid1/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + '/identifiers/aid1/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' ); assert.equal(lastCall[1]!.method, 'GET'); @@ -204,7 +212,7 @@ describe('Credentialing', () => { registry, schema, isuee, - {LEI: '1234'}, + { LEI: '1234' }, {}, {}, undefined, @@ -270,9 +278,9 @@ describe('Credentialing', () => { assert.equal( lastCall[0]!, url + - '/identifiers/aid1/credentials/' + - credential + - '/presentations' + '/identifiers/aid1/credentials/' + + credential + + '/presentations' ); assert.equal(lastCall[1]!.method, 'POST'); assert.equal(lastBody.exn.t, 'exn'); @@ -314,8 +322,7 @@ describe('Credentialing', () => { }); }); - -describe("Ipex", () => { +describe('Ipex', () => { it('Ipex', async () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; @@ -326,8 +333,8 @@ describe("Ipex", () => { let ipex = client.ipex(); - let holder = "ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k" - let acdc = new Serder(mockCredential.sad) + let holder = 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k'; + let acdc = new Serder(mockCredential.sad); // Create iss const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); let _iss = { @@ -341,103 +348,106 @@ describe("Ipex", () => { }; let [, iss] = Saider.saidify(_iss); - let iserder = new Serder(iss) + let iserder = new Serder(iss); let anc = interact({ pre: mockCredential.sad.i, sn: 1, data: [{}], dig: mockCredential.sad.d, version: undefined, - kind: undefined,}) + kind: undefined, + }); let [grant, gsigs, end] = await ipex.grant( - "multisig", + 'multisig', holder, - "", + '', acdc, iserder, anc, - "-vtest", + '-vtest', undefined, - mockCredential.sad.a.dt) + mockCredential.sad.a.dt + ); assert.deepStrictEqual(grant.ked, { - v: 'KERI10JSON0004b1_', - t: 'exn', - d: 'ECO262mMZcwP94aY0cUl5IL6LOK_R_Md1irVDdQEwtHl', - i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', - p: '', - dt: '2023-08-23T15:16:07.553000+00:00', - r: '/ipex/grant', - q: {}, - a: { m: '', i: 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k' }, - e: { - acdc: { - v: 'ACDC10JSON000197_', - d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', - i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', - ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', - s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', - a: { - d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', - i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', - dt: '2023-08-23T15:16:07.553000+00:00', - LEI: '5493001KJTIIGC8Y1R17' - } - }, - iss: { - v: 'KERI10JSON0000ed_', - t: 'iss', - d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', - i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', - s: '0', - ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', - dt: '2023-08-23T15:16:07.553000+00:00' - }, - anc: { - v: 'KERI10JSON0000cd_', - t: 'ixn', - d: 'ECVCyxNpB4PJkpLbWqI02WXs1wf7VUxPNY2W28SN2qqm', - i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', - s: '1', - p: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', - a: [{}] + v: 'KERI10JSON0004b1_', + t: 'exn', + d: 'ECO262mMZcwP94aY0cUl5IL6LOK_R_Md1irVDdQEwtHl', + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + p: '', + dt: '2023-08-23T15:16:07.553000+00:00', + r: '/ipex/grant', + q: {}, + a: { m: '', i: 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k' }, + e: { + acdc: { + v: 'ACDC10JSON000197_', + d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', + a: { + d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', + i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', + dt: '2023-08-23T15:16:07.553000+00:00', + LEI: '5493001KJTIIGC8Y1R17', }, - d: 'EGpSjqjavdzgjQiyt0AtrOutWfKrj5gR63lOUUq-1sL-' - } - - }) + }, + iss: { + v: 'KERI10JSON0000ed_', + t: 'iss', + d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', + i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + s: '0', + ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', + dt: '2023-08-23T15:16:07.553000+00:00', + }, + anc: { + v: 'KERI10JSON0000cd_', + t: 'ixn', + d: 'ECVCyxNpB4PJkpLbWqI02WXs1wf7VUxPNY2W28SN2qqm', + i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', + s: '1', + p: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', + a: [{}], + }, + d: 'EGpSjqjavdzgjQiyt0AtrOutWfKrj5gR63lOUUq-1sL-', + }, + }); assert.deepStrictEqual(gsigs, [ - 'AAAebNnWRghQuqDS0nXjy1MYht4D1_Sk_tozU0dikS-bOmmGV4AB3Ekt_sl04D7fIgkFGPQJ9gNhqNNS_uxsjNQE' - ] - ) - assert.equal(end, "-LAD4AACA-e-acdc-LAD5AACAA-e-iss-LAE5AACAA-e-anc-vtest") - + 'AAAebNnWRghQuqDS0nXjy1MYht4D1_Sk_tozU0dikS-bOmmGV4AB3Ekt_sl04D7fIgkFGPQJ9gNhqNNS_uxsjNQE', + ]); + assert.equal( + end, + '-LAD4AACA-e-acdc-LAD5AACAA-e-iss-LAE5AACAA-e-anc-vtest' + ); let [admit, asigs, aend] = await ipex.admit( 'holder', '', grant.ked.d, - mockCredential.sad.a.dt) + mockCredential.sad.a.dt + ); assert.deepStrictEqual(admit.ked, { v: 'KERI10JSON000111_', - t: 'exn', - d: 'EB7FkJBteJSZVV_dsjd0dmx6ORoRO6hJY91HR0z-x9tF', - i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', - p: 'ECO262mMZcwP94aY0cUl5IL6LOK_R_Md1irVDdQEwtHl', - dt: '2023-08-23T15:16:07.553000+00:00', - r: '/ipex/admit', - q: {}, - a: {'m': ''}, - e: {}, - }) + t: 'exn', + d: 'EB7FkJBteJSZVV_dsjd0dmx6ORoRO6hJY91HR0z-x9tF', + i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', + p: 'ECO262mMZcwP94aY0cUl5IL6LOK_R_Md1irVDdQEwtHl', + dt: '2023-08-23T15:16:07.553000+00:00', + r: '/ipex/admit', + q: {}, + a: { m: '' }, + e: {}, + }); assert.deepStrictEqual(asigs, [ - 'AAD6NAWzEr_KonMJhKL32JLTVZ2_xwVNMqlr-ovAwoIQS5IEWZ8POd4rbWO49-8NqK8GedjUyii3y9o1b0QkYzQJ' - ]) + 'AAD6NAWzEr_KonMJhKL32JLTVZ2_xwVNMqlr-ovAwoIQS5IEWZ8POd4rbWO49-8NqK8GedjUyii3y9o1b0QkYzQJ', + ]); - assert.equal(aend, "") - }) -}) \ No newline at end of file + assert.equal(aend, ''); + }); +}); diff --git a/test/core/eventing.test.ts b/test/core/eventing.test.ts index b0b18452..41e52d63 100644 --- a/test/core/eventing.test.ts +++ b/test/core/eventing.test.ts @@ -174,16 +174,20 @@ describe('key event function', () => { ); let seal = [ 'SealEvent', - { i: 'EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL', s: '0', d: 'EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL' }, + { + i: 'EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL', + s: '0', + d: 'EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL', + }, ]; let msgseal = messagize(serder0, [siger], seal); assert.equal( d(msgseal), - '{"v":"KERI10JSON000125_","t":"icp","d":"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","i"'+ - ':"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","s":"0","kt":1,"k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"]'+ - ',"nt":1,"n":["EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":0,"b":[],"c":[],"a"'+ - ':[]}-FABEIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL0AAAAAAAAAAAAAAAAAAAAAAAEIflL4H4134zYoRM6ls6Q086RLC_'+ - 'BhfNFh5uk-WxvhsL-AABAABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I' + '{"v":"KERI10JSON000125_","t":"icp","d":"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","i"' + + ':"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","s":"0","kt":1,"k":["DFs8BBx86uytIM0D2BhsE5rrqVIT8ef8mflpNceHo4XH"]' + + ',"nt":1,"n":["EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":0,"b":[],"c":[],"a"' + + ':[]}-FABEIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL0AAAAAAAAAAAAAAAAAAAAAAAEIflL4H4134zYoRM6ls6Q086RLC_' + + 'BhfNFh5uk-WxvhsL-AABAABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I' ); }); }); From 82f82e0490c2db866563a5be2bcec5f4a750ad4c Mon Sep 17 00:00:00 2001 From: Nuttawut Kongsuwan <58167639+nkongsuwan@users.noreply.github.com> Date: Thu, 2 Nov 2023 09:30:25 +0700 Subject: [PATCH 075/186] Update challenge.ts --- examples/integration-scripts/challenge.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/integration-scripts/challenge.ts b/examples/integration-scripts/challenge.ts index 57004b3f..d67ad5bd 100644 --- a/examples/integration-scripts/challenge.ts +++ b/examples/integration-scripts/challenge.ts @@ -104,7 +104,7 @@ async function run() { // List Client 1 contacts let contacts1 = await client1.contacts().list(); - assert.equal(contacts1[0].alias, 'bob'); + assert.equal(contacts1[3].alias, 'bob'); // Bob responds to Alice challenge await client2.challenges().respond('bob', aid1.i, challenge1_small.words); From cd67213fd59bc29d78903fef559c235eb671467b Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 2 Nov 2023 14:48:57 +0100 Subject: [PATCH 076/186] add script for single issuer and single holder ipex --- .../single-issuer-holder.ts | 271 ++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 examples/integration-scripts/single-issuer-holder.ts diff --git a/examples/integration-scripts/single-issuer-holder.ts b/examples/integration-scripts/single-issuer-holder.ts new file mode 100644 index 00000000..176efaf7 --- /dev/null +++ b/examples/integration-scripts/single-issuer-holder.ts @@ -0,0 +1,271 @@ +import { strict as assert } from 'assert'; +import signify, { + CredentialResult, + Serder, + Siger, + SignifyClient, + d, + messagize, +} from 'signify-ts'; + +const URL = 'http://127.0.0.1:3901'; +const BOOT_URL = 'http://127.0.0.1:3903'; +const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const SCHEMA_OOBI = + 'http://127.0.0.1:7723/oobi/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; + +await run(); + +function createTimestamp() { + const dt = new Date().toISOString().replace('Z', '000+00:00'); + return dt; +} + +async function connect() { + const client = new signify.SignifyClient( + URL, + signify.randomPasscode(), + signify.Tier.low, + BOOT_URL + ); + + await client.boot(); + await client.connect(); + + return client; +} + +async function createIdentifier(client: signify.SignifyClient, name: string) { + const icpResult1 = await client.identifiers().create(name, { + toad: 0, + wits: [], + }); + let op = await icpResult1.op(); + while (!op.done) { + op = await client.operations().get(op.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + const aid = await client.identifiers().get(name); + + if (!client.agent) { + throw new Error('No agent on client'); + } + + await client.identifiers().addEndRole(name, 'agent', client.agent.pre); + + return aid.prefix; +} + +async function getAgentOobi( + client: SignifyClient, + name: string +): Promise { + const result = await client.oobis().get(name, 'agent'); + return result.oobis[0]; +} + +async function resolveOobi( + client: SignifyClient, + oobi: string, + alias: string +): Promise { + console.log(`Resolve ${alias} -> ${oobi}`); + let op = await client.oobis().resolve(oobi, alias); + while (!op['done']) { + op = await client.operations().get(op.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } +} + +async function createRegistry( + client: SignifyClient, + name: string, + registryName: string +) { + const result = await client.registries().create({ name, registryName }); + let op = await result.op(); + while (!op['done']) { + op = await client.operations().get(op.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + + const registries = await client.registries().list(name); + assert.equal(registries.length, 1); + assert.equal(registries[0].name, registryName); + + return registries[0]; + // const schema = await client.schemas().get(SCHEMA_SAID); + // assert.equal(schema.$id, SCHEMA_SAID); + // const schemas = await client.schemas().list(); + // assert.equal(schemas.length, 1); + // assert.equal(schemas[0].$id, SCHEMA_SAID); + // console.log('Registry created'); +} + +async function issueCredential( + client: SignifyClient, + name: string, + args: { registry: string; schema: string; recipient: string; data: unknown } +) { + const result: CredentialResult = await client + .credentials() + .issue(name, args.registry, args.schema, args.recipient, args.data); + + let op = await result.op(); + while (!op['done']) { + op = await client.operations().get(op.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + + const creds = await client.credentials().list(name); + assert.equal(creds.length, 1); + assert.equal(creds[0].sad.s, SCHEMA_SAID); + assert.equal(creds[0].status.s, '0'); + + const acdc = new Serder(result.acdc); + const iss = result.iserder; + const ianc = result.anc; + + const sigers = result.sigs.map((sig: string) => new Siger({ qb64: sig })); + const ims = d(messagize(ianc, sigers)); + + const atc = ims.substring(result.anc.size); + const dt = createTimestamp(); + + const [grant, gsigs, end] = await client + .ipex() + .grant( + name, + args.recipient, + '', + acdc, + iss, + result.anc, + atc, + undefined, + dt + ); + await client + .exchanges() + .sendFromEvents(name, 'credential', grant, gsigs, end, [ + args.recipient, + ]); + + console.log('Grant message sent'); + + return creds[0]; +} + +interface Notification { + i: string; + dt: string; + r: boolean; + a: { r: string; d?: string; m?: string }; +} + +async function waitForNotification( + client: SignifyClient, + route: string +): Promise { + while (true) { + let notifications = await client.notifications().list(); + for (let notif of notifications.notes) { + if (notif.a.r == route) { + return notif; + } + } + + await new Promise((resolve) => setTimeout(resolve, 1000)); + } +} + +async function admitCredential( + client: SignifyClient, + name: string, + said: string +) { + const dt = createTimestamp(); + + const [admit, sigs, end] = await client.ipex().admit(name, '', said, dt); + + const response = await client + .exchanges() + .sendFromEvents(name, 'credential', admit, sigs, end, []); + + return response; +} + +async function run() { + await signify.ready(); + // Boot three clients + const issuerClient = await connect(); + const holderClient = await connect(); + + const issuerState = await issuerClient.state(); + const holderState = await holderClient.state(); + console.log( + 'Issuer connected. Client AID:', + issuerState.controller.state.i, + 'Agent AID: ', + issuerState.agent.i + ); + console.log( + 'Holder connected. Client AID:', + holderState.controller.state.i, + 'Agent AID: ', + holderState.agent.i + ); + + // Create two identifiers, one for each client + const issuerPrefix = await createIdentifier(issuerClient, 'issuer'); + const holderPrefix = await createIdentifier(holderClient, 'holder'); + console.log("Issuer's AID: ", issuerPrefix); + console.log("Holder's AID: ", holderPrefix); + + // Exchange OOBIs + console.log('Resolving OOBIs...'); + const issuerOobi = await getAgentOobi(issuerClient, 'issuer'); + const holderOobi = await getAgentOobi(holderClient, 'holder'); + await resolveOobi(issuerClient, holderOobi, 'holder'); + await resolveOobi(issuerClient, SCHEMA_OOBI, 'schema'); + await resolveOobi(holderClient, issuerOobi, 'issuer'); + await resolveOobi(holderClient, SCHEMA_OOBI, 'schema'); + + console.log('Resolved oobis'); + + await createRegistry(issuerClient, 'issuer', 'vLEI'); + + // Issue credential + const registires = await issuerClient.registries().list('issuer'); + const creds = await issueCredential(issuerClient, 'issuer', { + registry: registires[0].regk, + schema: SCHEMA_SAID, + recipient: holderPrefix, + data: { + LEI: '5493001KJTIIGC8Y1R17', + }, + }); + + console.log('Credential issued', creds); + // await grantCredential(issuerClient, 'issuer'); + + const grantNotification = await waitForNotification( + holderClient, + '/exn/ipex/grant' + ); + + console.log(grantNotification); + + await admitCredential(holderClient, 'holder', grantNotification.a.d!); + await holderClient.notifications().mark(grantNotification.i); + + // TODO: Do we need to do something more before this step? + + let credentials = await holderClient.credentials().list('holder'); + while (credentials.length < 1) { + console.log('No credentials yet...'); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + + console.log('Succeeded'); +} From 7694a0d892c2cdb8e22f0987bd019cf34ea2e4f1 Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 2 Nov 2023 16:17:50 +0100 Subject: [PATCH 077/186] remove comment --- examples/integration-scripts/single-issuer-holder.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/integration-scripts/single-issuer-holder.ts b/examples/integration-scripts/single-issuer-holder.ts index 176efaf7..60f94b83 100644 --- a/examples/integration-scripts/single-issuer-holder.ts +++ b/examples/integration-scripts/single-issuer-holder.ts @@ -247,7 +247,6 @@ async function run() { }); console.log('Credential issued', creds); - // await grantCredential(issuerClient, 'issuer'); const grantNotification = await waitForNotification( holderClient, From a05b58ad2ed492bb6f6dcf9fab2b833f01853612 Mon Sep 17 00:00:00 2001 From: lenkan Date: Mon, 6 Nov 2023 12:13:56 +0100 Subject: [PATCH 078/186] use /ipex/admit endpoint --- .../single-issuer-holder.ts | 31 ++++++++++--------- src/keri/app/credentialing.ts | 23 ++++++++++++++ 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/examples/integration-scripts/single-issuer-holder.ts b/examples/integration-scripts/single-issuer-holder.ts index 60f94b83..cc7b4dbe 100644 --- a/examples/integration-scripts/single-issuer-holder.ts +++ b/examples/integration-scripts/single-issuer-holder.ts @@ -11,6 +11,7 @@ import signify, { const URL = 'http://127.0.0.1:3901'; const BOOT_URL = 'http://127.0.0.1:3903'; const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const WITNESS_AIDS = []; // ['BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha']; const SCHEMA_OOBI = 'http://127.0.0.1:7723/oobi/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; @@ -37,8 +38,8 @@ async function connect() { async function createIdentifier(client: signify.SignifyClient, name: string) { const icpResult1 = await client.identifiers().create(name, { - toad: 0, - wits: [], + toad: WITNESS_AIDS.length, + wits: WITNESS_AIDS, }); let op = await icpResult1.op(); while (!op.done) { @@ -94,12 +95,6 @@ async function createRegistry( assert.equal(registries[0].name, registryName); return registries[0]; - // const schema = await client.schemas().get(SCHEMA_SAID); - // assert.equal(schema.$id, SCHEMA_SAID); - // const schemas = await client.schemas().list(); - // assert.equal(schemas.length, 1); - // assert.equal(schemas[0].$id, SCHEMA_SAID); - // console.log('Registry created'); } async function issueCredential( @@ -182,17 +177,14 @@ async function waitForNotification( async function admitCredential( client: SignifyClient, name: string, - said: string + said: string, + recipient: string ) { const dt = createTimestamp(); const [admit, sigs, end] = await client.ipex().admit(name, '', said, dt); - const response = await client - .exchanges() - .sendFromEvents(name, 'credential', admit, sigs, end, []); - - return response; + await client.ipex().submitAdmit(name, admit, sigs, end, [recipient]); } async function run() { @@ -255,11 +247,20 @@ async function run() { console.log(grantNotification); - await admitCredential(holderClient, 'holder', grantNotification.a.d!); + const repsonse = await admitCredential( + holderClient, + 'holder', + grantNotification.a.d!, + issuerPrefix + ); + console.log('Admit sent!'); + await holderClient.notifications().mark(grantNotification.i); + console.log('Notification marked!'); // TODO: Do we need to do something more before this step? + console.log('Listing credentials...'); let credentials = await holderClient.credentials().list('holder'); while (credentials.length < 1) { console.log('No credentials yet...'); diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 7c44f281..6664cae0 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -794,4 +794,27 @@ export class Ipex { grant ); } + + async submitAdmit( + name: string, + exn: Serder, + sigs: string[], + atc: string, + recp: string[] + ): Promise { + const body = { + exn: exn.ked, + sigs: sigs, + atc: atc, + rec: recp, + }; + + const response = await this.client.fetch( + `/identifiers/${name}/ipex/admit`, + 'POST', + body + ); + + return response.json(); + } } From bcda205c11cb85a458f5069b26a97253130c8bc8 Mon Sep 17 00:00:00 2001 From: lenkan Date: Mon, 6 Nov 2023 12:44:24 +0100 Subject: [PATCH 079/186] fix ts error --- examples/integration-scripts/single-issuer-holder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/integration-scripts/single-issuer-holder.ts b/examples/integration-scripts/single-issuer-holder.ts index cc7b4dbe..3ac3aaa7 100644 --- a/examples/integration-scripts/single-issuer-holder.ts +++ b/examples/integration-scripts/single-issuer-holder.ts @@ -247,7 +247,7 @@ async function run() { console.log(grantNotification); - const repsonse = await admitCredential( + await admitCredential( holderClient, 'holder', grantNotification.a.d!, From c3c641da66cce40588a4ee6bcf0b28fafe4af0df Mon Sep 17 00:00:00 2001 From: lenkan Date: Mon, 6 Nov 2023 12:45:18 +0100 Subject: [PATCH 080/186] fix ts error --- examples/integration-scripts/single-issuer-holder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/integration-scripts/single-issuer-holder.ts b/examples/integration-scripts/single-issuer-holder.ts index 3ac3aaa7..c1d2f6ff 100644 --- a/examples/integration-scripts/single-issuer-holder.ts +++ b/examples/integration-scripts/single-issuer-holder.ts @@ -11,7 +11,7 @@ import signify, { const URL = 'http://127.0.0.1:3901'; const BOOT_URL = 'http://127.0.0.1:3903'; const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; -const WITNESS_AIDS = []; // ['BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha']; +const WITNESS_AIDS: string[] = []; // ['BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha']; const SCHEMA_OOBI = 'http://127.0.0.1:7723/oobi/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; From 48f4a8cf9775ff3e8132807d693c10acc12c4ea4 Mon Sep 17 00:00:00 2001 From: Kent Bull Date: Tue, 7 Nov 2023 15:25:03 -0700 Subject: [PATCH 081/186] Add in attachment serialization functions For ACDCs and anchors --- .../single-issuer-holder.ts | 2 + src/keri/app/credentialing.ts | 44 +++++++++--- src/keri/core/serder.ts | 9 +++ src/keri/core/utils.ts | 67 +++++++++++++++++++ 4 files changed, 113 insertions(+), 9 deletions(-) diff --git a/examples/integration-scripts/single-issuer-holder.ts b/examples/integration-scripts/single-issuer-holder.ts index c1d2f6ff..16b5058e 100644 --- a/examples/integration-scripts/single-issuer-holder.ts +++ b/examples/integration-scripts/single-issuer-holder.ts @@ -134,7 +134,9 @@ async function issueCredential( args.recipient, '', acdc, + result.acdcSaider, iss, + result.issExnSaider, result.anc, atc, undefined, diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 6664cae0..10d8df1f 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -3,19 +3,22 @@ import { Salter } from '../core/salter'; import { interact, messagize } from '../core/eventing'; import { vdr } from '../core/vdring'; import { - b, + b, d, Dict, Ident, Ilks, Serials, versify, - Versionage, -} from '../core/core'; + Versionage +} from "../core/core"; import { Saider } from '../core/saider'; import { Serder } from '../core/serder'; import { Siger } from '../core/siger'; import { TextDecoder } from 'util'; import { TraitDex } from './habery'; +import { Prefixer } from "../core/prefixer"; +import { Seqner } from "../core/seqner"; +import { serializeACDCAttachment, serializeIssExnAttachment } from "../core/utils"; /** Types of credentials */ export class CredentialTypes { @@ -36,6 +39,8 @@ export class CredentialResult { private readonly _iserder: Serder; private readonly _anc: Serder; private readonly _sigs: string[]; + private readonly _acdcSaider: Saider; + private readonly _issExnSaider: Saider; private readonly promise: Promise; constructor( @@ -43,12 +48,16 @@ export class CredentialResult { iserder: Serder, anc: Serder, sigs: any[], + acdcSaider: Saider, + issExnSaider: Saider, promise: Promise ) { this._acdc = acdc; this._iserder = iserder; this._anc = anc; this._sigs = sigs; + this._acdcSaider = acdcSaider; + this._issExnSaider = issExnSaider; this.promise = promise; } @@ -60,6 +69,14 @@ export class CredentialResult { return this._iserder; } + get acdcSaider() { + return this._acdcSaider + } + + get issExnSaider() { + return this._issExnSaider; + } + get anc() { return this._anc; } @@ -202,7 +219,7 @@ export class Credentials { if (rules !== undefined) { cred.r = rules; } - const [, vc] = Saider.saidify(cred); + const [vcSaider, vc] = Saider.saidify(cred); // Create iss let _iss = { @@ -215,7 +232,7 @@ export class Credentials { dt: dt, }; - let [, iss] = Saider.saidify(_iss); + let [issSaider, iss] = Saider.saidify(_iss); let iserder = new Serder(iss); // Create paths and sign @@ -259,7 +276,7 @@ export class Credentials { } let res = this.issueFromEvents(hab, name, vc, iss, ixn, sigs); - return new CredentialResult(vc, iserder, anc, sigs, res); + return new CredentialResult(vc, iserder, anc, sigs, vcSaider, issSaider, res); } issueFromEvents( @@ -719,7 +736,9 @@ export class Ipex { * @param {string} recp qb64 AID of recipient of the grant * @param {string} message accompany human readable description of the credential being issued * @param {Serder} acdc Credential + * @param acdcSaider The Saider instance of an ACDC. Typically comes from the Creder instance yet Creder is not yet ported to SignifyTS * @param {Serder} iss TEL issuance event + * @param issSaider The Saider instance of the iss EXN interaction event for an ACDC. ypically comes from the Creder instance yet Creder is not yet ported to SignifyTS * @param {Serder} anc Anchoring event * @param {string} atc attachments for the anchoring event * @param {string} agree Option qb64 SAID of agree message this grant is responding to @@ -731,11 +750,13 @@ export class Ipex { recp: string, message: string, acdc: Serder, + acdcSaider: Saider, iss: Serder, + issSaider: Saider, anc: Serder, atc: string, agree?: string, - datetime?: string + datetime?: string, ): Promise<[Serder, string[], string]> { let hab = await this.client.identifiers().get(name); let data: any = { @@ -743,9 +764,14 @@ export class Ipex { i: recp, }; + let prefixer = new Prefixer({raw: b(acdc.raw)}) + let seqner = new Seqner({sn: acdc.sn}) + let acdcAtc = d(serializeACDCAttachment(prefixer, seqner, acdcSaider)) + let issAtc = d(serializeIssExnAttachment(anc, issSaider)) + let embeds: any = { - acdc: [acdc, ''], - iss: [iss, ''], + acdc: [acdc, acdcAtc], + iss: [iss, issAtc], anc: [anc, atc], }; diff --git a/src/keri/core/serder.ts b/src/keri/core/serder.ts index ef20fe7a..82ff7b13 100644 --- a/src/keri/core/serder.ts +++ b/src/keri/core/serder.ts @@ -10,6 +10,7 @@ import { } from './core'; import { Verfer } from './verfer'; import { Diger } from './diger'; +import { CesrNumber } from "./number"; export class Serder { private _kind: Serials; @@ -57,6 +58,14 @@ export class Serder { return this._raw; } + get sner(): CesrNumber { + return new CesrNumber({ }, this.ked["s"] ); + } + + get sn(): number { + return this.sner.num + } + get kind(): Serials { return this._kind; } diff --git a/src/keri/core/utils.ts b/src/keri/core/utils.ts index 47e1e978..88ff4fea 100644 --- a/src/keri/core/utils.ts +++ b/src/keri/core/utils.ts @@ -1,3 +1,9 @@ +import { Counter, CtrDex } from "./counter"; +import { Seqner } from "./seqner"; +import { Prefixer } from "./prefixer"; +import { Saider } from "./saider"; +import { Serder } from "./serder"; + export function pad(n: any, width = 3, z = 0) { return (String(z).repeat(width) + String(n)).slice(String(n).length); } @@ -109,3 +115,64 @@ export function bytesToInt(ar: Uint8Array): number { return value; } + +export function serialize(creder: any, prefixer: any, seqner: any, saider: any) { + let craw = creder.raw; + let ctr = new Counter({ code: CtrDex.SealSourceTriples, count: 1 }).qb64b; + let prefix = prefixer.qb64b; + let seq = seqner.qb64b; + let said = saider.qb64b; + let newCraw = new Uint8Array( + craw.length + ctr.length + prefix.length + seq.length + said.length + ); + newCraw.set(craw); + newCraw.set(ctr, craw.length); + newCraw.set(prefix, craw.length + ctr.length); + newCraw.set(seq, craw.length + ctr.length + prefix.length); + newCraw.set(said, craw.length + ctr.length + prefix.length + seq.length); + return newCraw; +} + +export function serializeACDCAttachment(prefixer: Prefixer, seqner: Seqner, saider: Saider): Uint8Array { + let craw = new Uint8Array(); + let ctr = new Counter({ code: CtrDex.SealSourceTriples, count: 1 }).qb64b; + let prefix = prefixer.qb64b; + let seq = seqner.qb64b; + let said = saider.qb64b; + let newCraw = new Uint8Array( + craw.length + ctr.length + prefix.length + seq.length + said.length + ); + newCraw.set(craw); + newCraw.set(ctr, craw.length); + newCraw.set(prefix, craw.length + ctr.length); + newCraw.set(seq, craw.length + ctr.length + prefix.length); + newCraw.set(said, craw.length + ctr.length + prefix.length + seq.length); + return newCraw; +} + +export function serializeIssExnAttachment(anc: Serder, ancSaider: Saider): Uint8Array { + let seqner = new Seqner({sn: anc.sn}) + let coupleArray = new Uint8Array(seqner.qb64b.length + ancSaider.qb64b.length) + coupleArray.set(seqner.qb64b) + coupleArray.set(ancSaider.qb64b, seqner.qb64b.length) + let counter = new Counter({ + code: CtrDex.SealSourceCouples, + count:1}) + let counterQb64b = counter.qb64b + let atc = new Uint8Array(counter.qb64b.length + coupleArray.length) + atc.set(counterQb64b) + atc.set(coupleArray, counterQb64b.length) + + if(atc.length % 4 !== 0){ + throw new Error(`Invalid attachments size: ${atc.length}, non-integral quadlets detected.`) + } + let pcnt = new Counter({ + code: CtrDex.AttachedMaterialQuadlets, + count: Math.floor(atc.length / 4) + }) + let msg = new Uint8Array(pcnt.qb64b.length + atc.length) + msg.set(pcnt.qb64b) + msg.set(atc, pcnt.qb64b.length) + + return msg +} From 30324cc81e0eaf1fb5ec514abce38d67413ddc30 Mon Sep 17 00:00:00 2001 From: lenkan Date: Wed, 8 Nov 2023 09:46:09 +0100 Subject: [PATCH 082/186] add credentials query and print credential --- examples/integration-scripts/single-issuer-holder.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/integration-scripts/single-issuer-holder.ts b/examples/integration-scripts/single-issuer-holder.ts index 16b5058e..3fc83006 100644 --- a/examples/integration-scripts/single-issuer-holder.ts +++ b/examples/integration-scripts/single-issuer-holder.ts @@ -260,14 +260,14 @@ async function run() { await holderClient.notifications().mark(grantNotification.i); console.log('Notification marked!'); - // TODO: Do we need to do something more before this step? - console.log('Listing credentials...'); let credentials = await holderClient.credentials().list('holder'); while (credentials.length < 1) { console.log('No credentials yet...'); await new Promise((resolve) => setTimeout(resolve, 1000)); + credentials = await holderClient.credentials().list('holder'); } console.log('Succeeded'); + console.dir(credentials, { depth: 15 }); } From f10b8bbb898b26876d79fde37d8969fb0f065a9d Mon Sep 17 00:00:00 2001 From: lenkan Date: Wed, 8 Nov 2023 09:46:20 +0100 Subject: [PATCH 083/186] fix formatting with prettier --- src/keri/app/credentialing.ts | 38 +++++++++++------- src/keri/core/serder.ts | 6 +-- src/keri/core/utils.ts | 73 +++++++++++++++++++++-------------- 3 files changed, 73 insertions(+), 44 deletions(-) diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 10d8df1f..44d14131 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -3,22 +3,26 @@ import { Salter } from '../core/salter'; import { interact, messagize } from '../core/eventing'; import { vdr } from '../core/vdring'; import { - b, d, + b, + d, Dict, Ident, Ilks, Serials, versify, - Versionage -} from "../core/core"; + Versionage, +} from '../core/core'; import { Saider } from '../core/saider'; import { Serder } from '../core/serder'; import { Siger } from '../core/siger'; import { TextDecoder } from 'util'; import { TraitDex } from './habery'; -import { Prefixer } from "../core/prefixer"; -import { Seqner } from "../core/seqner"; -import { serializeACDCAttachment, serializeIssExnAttachment } from "../core/utils"; +import { Prefixer } from '../core/prefixer'; +import { Seqner } from '../core/seqner'; +import { + serializeACDCAttachment, + serializeIssExnAttachment, +} from '../core/utils'; /** Types of credentials */ export class CredentialTypes { @@ -70,7 +74,7 @@ export class CredentialResult { } get acdcSaider() { - return this._acdcSaider + return this._acdcSaider; } get issExnSaider() { @@ -276,7 +280,15 @@ export class Credentials { } let res = this.issueFromEvents(hab, name, vc, iss, ixn, sigs); - return new CredentialResult(vc, iserder, anc, sigs, vcSaider, issSaider, res); + return new CredentialResult( + vc, + iserder, + anc, + sigs, + vcSaider, + issSaider, + res + ); } issueFromEvents( @@ -756,7 +768,7 @@ export class Ipex { anc: Serder, atc: string, agree?: string, - datetime?: string, + datetime?: string ): Promise<[Serder, string[], string]> { let hab = await this.client.identifiers().get(name); let data: any = { @@ -764,10 +776,10 @@ export class Ipex { i: recp, }; - let prefixer = new Prefixer({raw: b(acdc.raw)}) - let seqner = new Seqner({sn: acdc.sn}) - let acdcAtc = d(serializeACDCAttachment(prefixer, seqner, acdcSaider)) - let issAtc = d(serializeIssExnAttachment(anc, issSaider)) + let prefixer = new Prefixer({ raw: b(acdc.raw) }); + let seqner = new Seqner({ sn: acdc.sn }); + let acdcAtc = d(serializeACDCAttachment(prefixer, seqner, acdcSaider)); + let issAtc = d(serializeIssExnAttachment(anc, issSaider)); let embeds: any = { acdc: [acdc, acdcAtc], diff --git a/src/keri/core/serder.ts b/src/keri/core/serder.ts index 82ff7b13..2a346fa1 100644 --- a/src/keri/core/serder.ts +++ b/src/keri/core/serder.ts @@ -10,7 +10,7 @@ import { } from './core'; import { Verfer } from './verfer'; import { Diger } from './diger'; -import { CesrNumber } from "./number"; +import { CesrNumber } from './number'; export class Serder { private _kind: Serials; @@ -59,11 +59,11 @@ export class Serder { } get sner(): CesrNumber { - return new CesrNumber({ }, this.ked["s"] ); + return new CesrNumber({}, this.ked['s']); } get sn(): number { - return this.sner.num + return this.sner.num; } get kind(): Serials { diff --git a/src/keri/core/utils.ts b/src/keri/core/utils.ts index 88ff4fea..76952896 100644 --- a/src/keri/core/utils.ts +++ b/src/keri/core/utils.ts @@ -1,8 +1,8 @@ -import { Counter, CtrDex } from "./counter"; -import { Seqner } from "./seqner"; -import { Prefixer } from "./prefixer"; -import { Saider } from "./saider"; -import { Serder } from "./serder"; +import { Counter, CtrDex } from './counter'; +import { Seqner } from './seqner'; +import { Prefixer } from './prefixer'; +import { Saider } from './saider'; +import { Serder } from './serder'; export function pad(n: any, width = 3, z = 0) { return (String(z).repeat(width) + String(n)).slice(String(n).length); @@ -116,14 +116,19 @@ export function bytesToInt(ar: Uint8Array): number { return value; } -export function serialize(creder: any, prefixer: any, seqner: any, saider: any) { +export function serialize( + creder: any, + prefixer: any, + seqner: any, + saider: any +) { let craw = creder.raw; let ctr = new Counter({ code: CtrDex.SealSourceTriples, count: 1 }).qb64b; let prefix = prefixer.qb64b; let seq = seqner.qb64b; let said = saider.qb64b; let newCraw = new Uint8Array( - craw.length + ctr.length + prefix.length + seq.length + said.length + craw.length + ctr.length + prefix.length + seq.length + said.length ); newCraw.set(craw); newCraw.set(ctr, craw.length); @@ -133,14 +138,18 @@ export function serialize(creder: any, prefixer: any, seqner: any, saider: any) return newCraw; } -export function serializeACDCAttachment(prefixer: Prefixer, seqner: Seqner, saider: Saider): Uint8Array { +export function serializeACDCAttachment( + prefixer: Prefixer, + seqner: Seqner, + saider: Saider +): Uint8Array { let craw = new Uint8Array(); let ctr = new Counter({ code: CtrDex.SealSourceTriples, count: 1 }).qb64b; let prefix = prefixer.qb64b; let seq = seqner.qb64b; let said = saider.qb64b; let newCraw = new Uint8Array( - craw.length + ctr.length + prefix.length + seq.length + said.length + craw.length + ctr.length + prefix.length + seq.length + said.length ); newCraw.set(craw); newCraw.set(ctr, craw.length); @@ -150,29 +159,37 @@ export function serializeACDCAttachment(prefixer: Prefixer, seqner: Seqner, said return newCraw; } -export function serializeIssExnAttachment(anc: Serder, ancSaider: Saider): Uint8Array { - let seqner = new Seqner({sn: anc.sn}) - let coupleArray = new Uint8Array(seqner.qb64b.length + ancSaider.qb64b.length) - coupleArray.set(seqner.qb64b) - coupleArray.set(ancSaider.qb64b, seqner.qb64b.length) +export function serializeIssExnAttachment( + anc: Serder, + ancSaider: Saider +): Uint8Array { + let seqner = new Seqner({ sn: anc.sn }); + let coupleArray = new Uint8Array( + seqner.qb64b.length + ancSaider.qb64b.length + ); + coupleArray.set(seqner.qb64b); + coupleArray.set(ancSaider.qb64b, seqner.qb64b.length); let counter = new Counter({ code: CtrDex.SealSourceCouples, - count:1}) - let counterQb64b = counter.qb64b - let atc = new Uint8Array(counter.qb64b.length + coupleArray.length) - atc.set(counterQb64b) - atc.set(coupleArray, counterQb64b.length) - - if(atc.length % 4 !== 0){ - throw new Error(`Invalid attachments size: ${atc.length}, non-integral quadlets detected.`) + count: 1, + }); + let counterQb64b = counter.qb64b; + let atc = new Uint8Array(counter.qb64b.length + coupleArray.length); + atc.set(counterQb64b); + atc.set(coupleArray, counterQb64b.length); + + if (atc.length % 4 !== 0) { + throw new Error( + `Invalid attachments size: ${atc.length}, non-integral quadlets detected.` + ); } let pcnt = new Counter({ code: CtrDex.AttachedMaterialQuadlets, - count: Math.floor(atc.length / 4) - }) - let msg = new Uint8Array(pcnt.qb64b.length + atc.length) - msg.set(pcnt.qb64b) - msg.set(atc, pcnt.qb64b.length) + count: Math.floor(atc.length / 4), + }); + let msg = new Uint8Array(pcnt.qb64b.length + atc.length); + msg.set(pcnt.qb64b); + msg.set(atc, pcnt.qb64b.length); - return msg + return msg; } From c0137c9c9bac9044fb1e13c8c58b6d2a466a4e47 Mon Sep 17 00:00:00 2001 From: lenkan Date: Wed, 8 Nov 2023 10:49:47 +0100 Subject: [PATCH 084/186] fix credentialing test --- test/app/credentialing.test.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index 87a79c68..a44190b4 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -334,7 +334,8 @@ describe('Ipex', () => { let ipex = client.ipex(); let holder = 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k'; - let acdc = new Serder(mockCredential.sad); + let [acdcSaider, acdc] = Saider.saidify(mockCredential.sad); + // Create iss const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); let _iss = { @@ -347,7 +348,7 @@ describe('Ipex', () => { dt: mockCredential.sad.a.dt, }; - let [, iss] = Saider.saidify(_iss); + let [issSaider, iss] = Saider.saidify(_iss); let iserder = new Serder(iss); let anc = interact({ pre: mockCredential.sad.i, @@ -362,8 +363,10 @@ describe('Ipex', () => { 'multisig', holder, '', - acdc, + new Serder(acdc), + acdcSaider, iserder, + issSaider, anc, '-vtest', undefined, @@ -421,7 +424,10 @@ describe('Ipex', () => { ]); assert.equal( end, - '-LAD4AACA-e-acdc-LAD5AACAA-e-iss-LAE5AACAA-e-anc-vtest' + '-LAg4AACA' + + '-e-acdc-IABBHsidiI6IkFDREMxMEpTT04wMDAxOTdfIiwiZCI6IkVN0AAAAAAAAAAAAAAAAAAAAAAAEMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo-LAW5AACAA' + + '-e-iss-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAAAENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW-LAE5AACAA' + + '-e-anc-vtest' ); let [admit, asigs, aend] = await ipex.admit( From 244aafa968c18600e99aab9a8c207d8aeff38782 Mon Sep 17 00:00:00 2001 From: lenkan Date: Wed, 8 Nov 2023 11:14:40 +0100 Subject: [PATCH 085/186] add tests for utils serializers --- src/keri/app/credentialing.ts | 6 +----- src/keri/core/utils.ts | 28 ++++---------------------- test/core/utils.test.ts | 38 +++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 29 deletions(-) create mode 100644 test/core/utils.test.ts diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 44d14131..ee74415b 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -17,8 +17,6 @@ import { Serder } from '../core/serder'; import { Siger } from '../core/siger'; import { TextDecoder } from 'util'; import { TraitDex } from './habery'; -import { Prefixer } from '../core/prefixer'; -import { Seqner } from '../core/seqner'; import { serializeACDCAttachment, serializeIssExnAttachment, @@ -776,9 +774,7 @@ export class Ipex { i: recp, }; - let prefixer = new Prefixer({ raw: b(acdc.raw) }); - let seqner = new Seqner({ sn: acdc.sn }); - let acdcAtc = d(serializeACDCAttachment(prefixer, seqner, acdcSaider)); + let acdcAtc = d(serializeACDCAttachment(acdc, acdcSaider)); let issAtc = d(serializeIssExnAttachment(anc, issSaider)); let embeds: any = { diff --git a/src/keri/core/utils.ts b/src/keri/core/utils.ts index 76952896..07d5d3d0 100644 --- a/src/keri/core/utils.ts +++ b/src/keri/core/utils.ts @@ -3,6 +3,7 @@ import { Seqner } from './seqner'; import { Prefixer } from './prefixer'; import { Saider } from './saider'; import { Serder } from './serder'; +import { b } from './core'; export function pad(n: any, width = 3, z = 0) { return (String(z).repeat(width) + String(n)).slice(String(n).length); @@ -116,33 +117,12 @@ export function bytesToInt(ar: Uint8Array): number { return value; } -export function serialize( - creder: any, - prefixer: any, - seqner: any, - saider: any -) { - let craw = creder.raw; - let ctr = new Counter({ code: CtrDex.SealSourceTriples, count: 1 }).qb64b; - let prefix = prefixer.qb64b; - let seq = seqner.qb64b; - let said = saider.qb64b; - let newCraw = new Uint8Array( - craw.length + ctr.length + prefix.length + seq.length + said.length - ); - newCraw.set(craw); - newCraw.set(ctr, craw.length); - newCraw.set(prefix, craw.length + ctr.length); - newCraw.set(seq, craw.length + ctr.length + prefix.length); - newCraw.set(said, craw.length + ctr.length + prefix.length + seq.length); - return newCraw; -} - export function serializeACDCAttachment( - prefixer: Prefixer, - seqner: Seqner, + acdc: Serder, saider: Saider ): Uint8Array { + let prefixer = new Prefixer({ raw: b(acdc.raw) }); + let seqner = new Seqner({ sn: acdc.sn }); let craw = new Uint8Array(); let ctr = new Counter({ code: CtrDex.SealSourceTriples, count: 1 }).qb64b; let prefix = prefixer.qb64b; diff --git a/test/core/utils.test.ts b/test/core/utils.test.ts new file mode 100644 index 00000000..40b294c2 --- /dev/null +++ b/test/core/utils.test.ts @@ -0,0 +1,38 @@ +import { Ident, Saider, Serder, Serials, d, versify } from '../../src'; +import { + serializeACDCAttachment, + serializeIssExnAttachment, +} from '../../src/keri/core/utils'; + +describe(serializeIssExnAttachment, () => { + it('serializes iss data', () => { + const [saider, data] = Saider.saidify({ + d: '', + v: versify(Ident.KERI, undefined, Serials.JSON, 0), + }); + + const result = serializeIssExnAttachment(new Serder(data), saider); + + expect(d(result)).toEqual( + '-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAAAEKZPmzJqhx76bcC2ftPQgeRirmOd8ZBOtGVqHJrSm7F1' + ); + }); +}); + +describe(serializeACDCAttachment, () => { + it('serializes acdc data', () => { + const [saider, data] = Saider.saidify({ + d: '', + v: versify(Ident.ACDC, undefined, Serials.JSON, 0), + a: { + LEI: '123', + }, + }); + + const result = serializeACDCAttachment(new Serder(data), saider); + + expect(d(result)).toEqual( + '-IABBHsiZCI6IkVORTZzbWw4X1NMZVIzdk9NajRJRExLX2Nn0AAAAAAAAAAAAAAAAAAAAAAAENE6sml8_SLeR3vOMj4IDLK_cgd-A-vtg0Jnu7ozdBjW' + ); + }); +}); From 8cd2ad4f86161a13dfb42a82de546c4220c7e77a Mon Sep 17 00:00:00 2001 From: lenkan Date: Fri, 3 Nov 2023 15:20:16 +0100 Subject: [PATCH 086/186] remove unused dependencies, move dev dependencies --- .../bip39_shim/package-lock.json | 1768 +--------- .../bip39_shim/package.json | 9 - .../integration-scripts/package-lock.json | 1923 +---------- examples/integration-scripts/package.json | 27 +- examples/scripts/package-lock.json | 3042 +---------------- examples/scripts/package.json | 29 +- examples/signify-react-ts/package-lock.json | 22 +- package-lock.json | 2262 +++--------- package.json | 19 +- 9 files changed, 855 insertions(+), 8246 deletions(-) diff --git a/examples/integration-scripts/bip39_shim/package-lock.json b/examples/integration-scripts/bip39_shim/package-lock.json index 2a5b45bd..a302ef89 100644 --- a/examples/integration-scripts/bip39_shim/package-lock.json +++ b/examples/integration-scripts/bip39_shim/package-lock.json @@ -11,1438 +11,132 @@ "bip39": "^3.1.0", "bip39-light": "^1.0.7", "signify-ts": "file:../../../" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2" } }, "../../..": { "version": "0.1.1", "license": "Apache-2.0", "dependencies": { - "@types/libsodium-wrappers-sumo": "^0.7.5", "blake3": "^2.1.7", "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", - "jest-fetch-mock": "^3.0.3", + "ecdsa-secp256r1": "^1.3.3", "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", "mathjs": "^11.8.2", - "msgpack5": "^5.3.2", "structured-headers": "^0.5.0", "text-encoding": "^0.7.0", - "ts-node": "^10.9.1", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" + "urlsafe-base64": "^1.0.0" }, "devDependencies": { "@mermaid-js/mermaid-cli": "^10.3.0", "@size-limit/preset-small-lib": "^5.0.4", - "@types/lodash": "^4.14.185", + "@types/libsodium-wrappers-sumo": "^0.7.5", "@types/node": "^18.11.18", "@types/text-encoding": "^0.0.36", "@types/urlsafe-base64": "^1.0.28", "husky": "^7.0.2", "jest": "^29.3.1", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "size-limit": "^5.0.4", - "ts-migrate": "^0.1.23", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.4" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", - "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", - "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/bip39": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", - "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", - "dependencies": { - "@noble/hashes": "^1.2.0" - } - }, - "node_modules/bip39-light": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", - "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", - "dependencies": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", - "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.50.0", - "@humanwhocodes/config-array": "^0.11.11", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", - "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", - "dev": true, - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", - "dev": true, - "dependencies": { - "flatted": "^3.2.7", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" + "jest-fetch-mock": "^3.0.3", + "jsdoc": "^4.0.2", + "minami": "^1.2.3", + "prettier": "^3.0.3", + "size-limit": "^5.0.4", + "ts-mockito": "^2.6.1", + "ts-node": "^10.9.1", + "tsdx": "^0.14.1", + "tslib": "^2.3.1", + "typedoc": "^0.24.8", + "typescript": "^5.1.0", + "whatwg-fetch": "^3.6.19" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "engines": { - "node": ">=10" + "node": ">= 16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/bip39": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", + "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" + "@noble/hashes": "^1.2.0" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, + "node_modules/bip39-light": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", + "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dependencies": { - "wrappy": "1" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/p-limit": { + "node_modules/hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dependencies": { - "yocto-queue": "^0.1.0" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "node_modules/pbkdf2": { @@ -1460,56 +154,6 @@ "node": ">=0.12" } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -1523,40 +167,6 @@ "node": ">= 6" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", @@ -1566,29 +176,6 @@ "inherits": "^2.0.1" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1608,21 +195,6 @@ } ] }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -1635,40 +207,10 @@ "sha.js": "bin.js" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/signify-ts": { "resolved": "../../..", "link": true }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -1677,170 +219,10 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } } } } diff --git a/examples/integration-scripts/bip39_shim/package.json b/examples/integration-scripts/bip39_shim/package.json index c556ee30..e1cf3690 100644 --- a/examples/integration-scripts/bip39_shim/package.json +++ b/examples/integration-scripts/bip39_shim/package.json @@ -3,18 +3,9 @@ "type": "module", "private": true, "version": "0.0.1", - "scripts": {}, "dependencies": { "bip39": "^3.1.0", "bip39-light": "^1.0.7", "signify-ts": "file:../../../" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2" } } diff --git a/examples/integration-scripts/package-lock.json b/examples/integration-scripts/package-lock.json index e1c90b16..e638adf4 100644 --- a/examples/integration-scripts/package-lock.json +++ b/examples/integration-scripts/package-lock.json @@ -1,1845 +1,96 @@ { - "name": "integration-scripts", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "integration-scripts", - "version": "0.0.0", - "dependencies": { - "signify-ts": "file:../../", - "ts-node": "^10.9.1" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2" - } - }, - "../..": { - "version": "0.1.1", - "license": "Apache-2.0", - "dependencies": { - "@types/libsodium-wrappers-sumo": "^0.7.5", - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", - "ecdsa-secp256r1": "^1.3.3", - "jest-fetch-mock": "^3.0.3", - "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", - "mathjs": "^11.8.2", - "msgpack5": "^5.3.2", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "ts-node": "^10.9.1", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" - }, - "devDependencies": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/lodash": "^4.14.185", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "ts-migrate": "^0.1.23", - "ts-mockito": "^2.6.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.4" - } - }, - "bip39_shim": { - "version": "0.0.1", - "extraneous": true, - "dependencies": { - "bip39-light": "^1.0.7", - "signify-ts": "file:../../../" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2" - } - }, - "bip39_shim/src/bip39_shim": { - "extraneous": true - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", - "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz", - "integrity": "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==", - "peer": true - }, - "node_modules/@types/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", - "@humanwhocodes/config-array": "^0.11.11", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", - "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", - "dev": true, - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", - "dev": true, - "dependencies": { - "flatted": "^3.2.7", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "name": "integration-scripts", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "integration-scripts", + "dependencies": { + "signify-ts": "file:../../" + }, + "devDependencies": { + "@types/prompt-sync": "^4.2.2", + "typescript": "^5.2.2" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "../..": { + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "blake3": "^2.1.7", + "buffer": "^6.0.3", + "ecdsa-secp256r1": "^1.3.3", + "libsodium-wrappers-sumo": "^0.7.9", + "mathjs": "^11.8.2", + "structured-headers": "^0.5.0", + "text-encoding": "^0.7.0", + "urlsafe-base64": "^1.0.0" + }, + "devDependencies": { + "@mermaid-js/mermaid-cli": "^10.3.0", + "@size-limit/preset-small-lib": "^5.0.4", + "@types/libsodium-wrappers-sumo": "^0.7.5", + "@types/node": "^18.11.18", + "@types/text-encoding": "^0.0.36", + "@types/urlsafe-base64": "^1.0.28", + "husky": "^7.0.2", + "jest": "^29.3.1", + "jest-fetch-mock": "^3.0.3", + "jsdoc": "^4.0.2", + "minami": "^1.2.3", + "prettier": "^3.0.3", + "size-limit": "^5.0.4", + "ts-mockito": "^2.6.1", + "ts-node": "^10.9.1", + "tsdx": "^0.14.1", + "tslib": "^2.3.1", + "typedoc": "^0.24.8", + "typescript": "^4.9.5", + "whatwg-fetch": "^3.6.19" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "bip39_shim": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "bip39-light": "^1.0.7", + "signify-ts": "file:../../../" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "bip39_shim/src/bip39_shim": { + "extraneous": true }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signify-ts": { - "resolved": "../..", - "link": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true + "node_modules/@types/prompt-sync": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.2.tgz", + "integrity": "sha512-S8GBVdrchd7egtwrWtnhzZ3mFKgwlFpOCsiemzYgd5Bg75SwR5RquDlE7G4ijPbbNtAATpdn/Km3u5PEAnTsAw==", + "dev": true + }, + "node_modules/signify-ts": { + "resolved": "../..", + "link": true }, - "@swc/wasm": { - "optional": true + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } } - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } } - } } diff --git a/examples/integration-scripts/package.json b/examples/integration-scripts/package.json index c7086375..fb39f2c3 100644 --- a/examples/integration-scripts/package.json +++ b/examples/integration-scripts/package.json @@ -1,19 +1,12 @@ { - "name": "integration-scripts", - "type": "module", - "private": true, - "version": "0.0.0", - "scripts": {}, - "dependencies": { - "signify-ts": "file:../../", - "ts-node": "^10.9.1" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2" - } + "name": "integration-scripts", + "type": "module", + "private": true, + "dependencies": { + "signify-ts": "file:../../" + }, + "devDependencies": { + "@types/prompt-sync": "^4.2.2", + "typescript": "^5.2.2" + } } diff --git a/examples/scripts/package-lock.json b/examples/scripts/package-lock.json index 527b1741..1edbd5b3 100644 --- a/examples/scripts/package-lock.json +++ b/examples/scripts/package-lock.json @@ -1,2891 +1,175 @@ { - "name": "signify-scripts-ts", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "signify-scripts-ts", - "version": "0.0.0", - "dependencies": { - "prompt-sync": "^4.2.0", - "signify-ts": "file:../../" - }, - "devDependencies": { - "@types/prompt-sync": "^4.2.0", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2" - } - }, - "../..": { - "version": "0.1.1", - "license": "Apache-2.0", - "dependencies": { - "@types/libsodium-wrappers-sumo": "^0.7.5", - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", - "ecdsa-secp256r1": "^1.3.3", - "jest-fetch-mock": "^3.0.3", - "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", - "mathjs": "^11.8.2", - "msgpack5": "^5.3.2", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "ts-node": "^10.9.1", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" - }, - "devDependencies": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/lodash": "^4.14.185", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "ts-migrate": "^0.1.23", - "ts-mockito": "^2.6.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.4" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/prompt-sync": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.0.tgz", - "integrity": "sha512-5RPQYDT7MNkt+vq6xp58tSPx4THANyQcBSaw3Ni+KV7MUAgvUUbmCsQmcPVrcc8dwuURSPixz2qTJdJF6ABSKw==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", - "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", - "dev": true, - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prompt-sync": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", - "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", - "dependencies": { - "strip-ansi": "^5.0.0" - } - }, - "node_modules/prompt-sync/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/prompt-sync/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "name": "signify-scripts-ts", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "signify-scripts-ts", + "dependencies": { + "prompt-sync": "^4.2.0", + "signify-ts": "file:../../" + }, + "devDependencies": { + "@types/prompt-sync": "^4.2.2", + "typescript": "^5.2.2" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "../..": { + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "blake3": "^2.1.7", + "buffer": "^6.0.3", + "ecdsa-secp256r1": "^1.3.3", + "libsodium-wrappers-sumo": "^0.7.9", + "mathjs": "^11.8.2", + "structured-headers": "^0.5.0", + "text-encoding": "^0.7.0", + "urlsafe-base64": "^1.0.0" + }, + "devDependencies": { + "@mermaid-js/mermaid-cli": "^10.3.0", + "@size-limit/preset-small-lib": "^5.0.4", + "@types/libsodium-wrappers-sumo": "^0.7.5", + "@types/node": "^18.11.18", + "@types/text-encoding": "^0.0.36", + "@types/urlsafe-base64": "^1.0.28", + "husky": "^7.0.2", + "jest": "^29.3.1", + "jest-fetch-mock": "^3.0.3", + "jsdoc": "^4.0.2", + "minami": "^1.2.3", + "prettier": "^3.0.3", + "size-limit": "^5.0.4", + "ts-mockito": "^2.6.1", + "ts-node": "^10.9.1", + "tsdx": "^0.14.1", + "tslib": "^2.3.1", + "typedoc": "^0.24.8", + "typescript": "^4.9.5", + "whatwg-fetch": "^3.6.19" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "node_modules/@types/prompt-sync": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.2.tgz", + "integrity": "sha512-S8GBVdrchd7egtwrWtnhzZ3mFKgwlFpOCsiemzYgd5Bg75SwR5RquDlE7G4ijPbbNtAATpdn/Km3u5PEAnTsAw==", + "dev": true }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "node_modules/prompt-sync": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", + "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", + "dependencies": { + "strip-ansi": "^5.0.0" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signify-ts": { - "resolved": "../..", - "link": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "@types/prompt-sync": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.0.tgz", - "integrity": "sha512-5RPQYDT7MNkt+vq6xp58tSPx4THANyQcBSaw3Ni+KV7MUAgvUUbmCsQmcPVrcc8dwuURSPixz2qTJdJF6ABSKw==", - "dev": true - }, - "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } + "node_modules/prompt-sync/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} - }, - "eslint-plugin-react-refresh": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", - "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true - }, - "espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", - "dev": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } + "node_modules/prompt-sync/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/signify-ts": { + "resolved": "../..", + "link": true + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prompt-sync": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", - "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", - "requires": { - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + "dependencies": { + "@types/prompt-sync": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.2.tgz", + "integrity": "sha512-S8GBVdrchd7egtwrWtnhzZ3mFKgwlFpOCsiemzYgd5Bg75SwR5RquDlE7G4ijPbbNtAATpdn/Km3u5PEAnTsAw==", + "dev": true + }, + "prompt-sync": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", + "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", + "requires": { + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "signify-ts": { + "version": "file:../..", + "requires": { + "@mermaid-js/mermaid-cli": "^10.3.0", + "@size-limit/preset-small-lib": "^5.0.4", + "@types/libsodium-wrappers-sumo": "^0.7.5", + "@types/node": "^18.11.18", + "@types/text-encoding": "^0.0.36", + "@types/urlsafe-base64": "^1.0.28", + "blake3": "^2.1.7", + "buffer": "^6.0.3", + "ecdsa-secp256r1": "^1.3.3", + "husky": "^7.0.2", + "jest": "^29.3.1", + "jest-fetch-mock": "^3.0.3", + "jsdoc": "^4.0.2", + "libsodium-wrappers-sumo": "^0.7.9", + "mathjs": "^11.8.2", + "minami": "^1.2.3", + "prettier": "^3.0.3", + "size-limit": "^5.0.4", + "structured-headers": "^0.5.0", + "text-encoding": "^0.7.0", + "ts-mockito": "^2.6.1", + "ts-node": "^10.9.1", + "tsdx": "^0.14.1", + "tslib": "^2.3.1", + "typedoc": "^0.24.8", + "typescript": "^4.9.5", + "urlsafe-base64": "^1.0.0", + "whatwg-fetch": "^3.6.19" + } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true } - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signify-ts": { - "version": "file:../..", - "requires": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/libsodium-wrappers-sumo": "^0.7.5", - "@types/lodash": "^4.14.185", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", - "ecdsa-secp256r1": "^1.3.3", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jest-fetch-mock": "^3.0.3", - "jsdoc": "^4.0.2", - "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", - "mathjs": "^11.8.2", - "minami": "^1.2.3", - "msgpack5": "^5.3.2", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "ts-migrate": "^0.1.23", - "ts-mockito": "^2.6.1", - "ts-node": "^10.9.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.4", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true } - } } diff --git a/examples/scripts/package.json b/examples/scripts/package.json index 9de00e60..b1622553 100644 --- a/examples/scripts/package.json +++ b/examples/scripts/package.json @@ -1,20 +1,13 @@ { - "name": "signify-scripts-ts", - "type": "module", - "private": true, - "version": "0.0.0", - "scripts": {}, - "dependencies": { - "prompt-sync": "^4.2.0", - "signify-ts": "file:../../" - }, - "devDependencies": { - "@types/prompt-sync": "^4.2.0", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2" - } + "name": "signify-scripts-ts", + "type": "module", + "private": true, + "dependencies": { + "prompt-sync": "^4.2.0", + "signify-ts": "file:../../" + }, + "devDependencies": { + "@types/prompt-sync": "^4.2.2", + "typescript": "^5.2.2" + } } diff --git a/examples/signify-react-ts/package-lock.json b/examples/signify-react-ts/package-lock.json index 4195e459..52ef3a37 100644 --- a/examples/signify-react-ts/package-lock.json +++ b/examples/signify-react-ts/package-lock.json @@ -37,40 +37,36 @@ "version": "0.1.1", "license": "Apache-2.0", "dependencies": { - "@types/libsodium-wrappers-sumo": "^0.7.5", "blake3": "^2.1.7", "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", - "jest-fetch-mock": "^3.0.3", + "ecdsa-secp256r1": "^1.3.3", "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", "mathjs": "^11.8.2", - "msgpack5": "^5.3.2", "structured-headers": "^0.5.0", "text-encoding": "^0.7.0", - "ts-node": "^10.9.1", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" + "urlsafe-base64": "^1.0.0" }, "devDependencies": { "@mermaid-js/mermaid-cli": "^10.3.0", "@size-limit/preset-small-lib": "^5.0.4", - "@types/lodash": "^4.14.185", + "@types/libsodium-wrappers-sumo": "^0.7.5", "@types/node": "^18.11.18", "@types/text-encoding": "^0.0.36", "@types/urlsafe-base64": "^1.0.28", "husky": "^7.0.2", "jest": "^29.3.1", + "jest-fetch-mock": "^3.0.3", "jsdoc": "^4.0.2", "minami": "^1.2.3", + "prettier": "^3.0.3", "size-limit": "^5.0.4", - "ts-migrate": "^0.1.23", + "ts-mockito": "^2.6.1", + "ts-node": "^10.9.1", "tsdx": "^0.14.1", "tslib": "^2.3.1", "typedoc": "^0.24.8", - "typescript": "^4.9.4" + "typescript": "^5.1.0", + "whatwg-fetch": "^3.6.19" } }, "node_modules/@ampproject/remapping": { diff --git a/package-lock.json b/package-lock.json index 7fef9cec..6ebc9f82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,43 +9,36 @@ "version": "0.1.1", "license": "Apache-2.0", "dependencies": { - "@types/libsodium-wrappers-sumo": "^0.7.5", "blake3": "^2.1.7", "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", "ecdsa-secp256r1": "^1.3.3", - "jest-fetch-mock": "^3.0.3", "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", "mathjs": "^11.8.2", - "msgpack5": "^5.3.2", "structured-headers": "^0.5.0", "text-encoding": "^0.7.0", - "ts-node": "^10.9.1", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" + "urlsafe-base64": "^1.0.0" }, "devDependencies": { "@mermaid-js/mermaid-cli": "^10.3.0", "@size-limit/preset-small-lib": "^5.0.4", - "@types/lodash": "^4.14.185", + "@types/libsodium-wrappers-sumo": "^0.7.5", "@types/node": "^18.11.18", "@types/text-encoding": "^0.0.36", "@types/urlsafe-base64": "^1.0.28", "husky": "^7.0.2", "jest": "^29.3.1", + "jest-fetch-mock": "^3.0.3", "jsdoc": "^4.0.2", "minami": "^1.2.3", "prettier": "^3.0.3", "size-limit": "^5.0.4", - "ts-migrate": "^0.1.23", "ts-mockito": "^2.6.1", + "ts-node": "^10.9.1", "tsdx": "^0.14.1", "tslib": "^2.3.1", "typedoc": "^0.24.8", - "typescript": "^4.9.4" + "typescript": "^4.9.5", + "whatwg-fetch": "^3.6.19" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -53,6 +46,7 @@ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -685,61 +679,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", @@ -827,21 +766,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", @@ -1290,22 +1214,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", @@ -1769,24 +1677,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", - "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", @@ -1953,23 +1843,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/preset-flow": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", - "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -1984,76 +1857,6 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/preset-typescript": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz", - "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-typescript": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", - "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/register/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", @@ -2071,18 +1874,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.15.tgz", - "integrity": "sha512-SAj8oKi8UogVi6eXQXKNPu8qZ78Yzy7zawrlTr0M+IuW/g8Qe9gVDhGcF9h1S69OyACpYoLxEzpjs1M15sI5wQ==", - "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", @@ -2158,6 +1949,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2169,6 +1961,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2188,6 +1981,7 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, + "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -2208,6 +2002,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, + "peer": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -2223,6 +2018,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, + "peer": true, "engines": { "node": ">= 4" } @@ -2232,6 +2028,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -2244,6 +2041,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, + "peer": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", @@ -2257,7 +2055,8 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -2285,16 +2084,16 @@ } }, "node_modules/@jest/console": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", - "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -2351,15 +2150,15 @@ "dev": true }, "node_modules/@jest/core": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", - "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { - "@jest/console": "^29.6.4", - "@jest/reporters": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", @@ -2367,21 +2166,21 @@ "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.6.3", - "jest-config": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-resolve-dependencies": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "jest-watcher": "^29.6.4", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -2447,37 +2246,37 @@ "dev": true }, "node_modules/@jest/environment": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", - "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.6.4", + "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.3" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "dependencies": { - "expect": "^29.6.4", - "jest-snapshot": "^29.6.4" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", - "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { "jest-get-type": "^29.6.3" @@ -2487,47 +2286,47 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", - "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", - "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", "@jest/types": "^29.6.3", - "jest-mock": "^29.6.3" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", - "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", @@ -2541,9 +2340,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -2637,12 +2436,12 @@ } }, "node_modules/@jest/test-result": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", - "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "dependencies": { - "@jest/console": "^29.6.4", + "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" @@ -2652,14 +2451,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", - "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.4", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -2667,9 +2466,9 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", - "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -2680,9 +2479,9 @@ "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", + "jest-haste-map": "^29.7.0", "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -2825,6 +2624,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -2841,7 +2641,8 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.19", @@ -3171,67 +2972,29 @@ "node": ">=10.13.0" } }, - "node_modules/@ts-morph/bootstrap": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@ts-morph/bootstrap/-/bootstrap-0.16.0.tgz", - "integrity": "sha512-FYW3bK5EBeAgpHu0qZ57gHbLjzgzC81y5EJmrebzIhXSYg6OgZu5lFHpF5NJ7CwM7ZMhxX1PG+DRA8e+skopKw==", - "dev": true, - "dependencies": { - "@ts-morph/common": "~0.16.0" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.16.0.tgz", - "integrity": "sha512-SgJpzkTgZKLKqQniCjLaE3c2L2sdL7UShvmTmPBejAKd2OKV/yfMpQ2IWpAuA+VY5wy7PkSUaEObIqEK6afFuw==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "minimatch": "^5.1.0", - "mkdirp": "^1.0.4", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true }, "node_modules/@types/babel__core": { "version": "7.20.1", @@ -3478,12 +3241,14 @@ "node_modules/@types/libsodium-wrappers": { "version": "0.7.11", "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz", - "integrity": "sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg==" + "integrity": "sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg==", + "dev": true }, "node_modules/@types/libsodium-wrappers-sumo": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.6.tgz", "integrity": "sha512-86R2bYU/DKVWw3q2btxTUlFO3lYKLyodbCsxxSybNQonPzPxmQkNtKCYmkV0dWQ9ZQsGIOzNNPU9RjJUALjoEg==", + "dev": true, "dependencies": { "@types/libsodium-wrappers": "*" } @@ -3494,12 +3259,6 @@ "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", "dev": true }, - "node_modules/@types/lodash": { - "version": "4.14.198", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", - "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", - "dev": true - }, "node_modules/@types/markdown-it": { "version": "12.2.3", "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", @@ -3519,7 +3278,8 @@ "node_modules/@types/node": { "version": "18.17.15", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", - "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==" + "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==", + "dev": true }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -3549,9 +3309,9 @@ } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", + "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", "dev": true }, "node_modules/@types/text-encoding": { @@ -3901,6 +3661,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -4024,7 +3785,8 @@ "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "node_modules/argparse": { "version": "1.0.10", @@ -4284,15 +4046,6 @@ "node": ">=0.10.0" } }, - "node_modules/ast-types": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.7.tgz", - "integrity": "sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -4304,6 +4057,7 @@ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -4408,15 +4162,6 @@ "dequal": "^2.0.3" } }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/babel-eslint": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", @@ -4448,12 +4193,12 @@ } }, "node_modules/babel-jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", - "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "dependencies": { - "@jest/transform": "^29.6.4", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", "babel-preset-jest": "^29.6.3", @@ -4591,41 +4336,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", @@ -4815,6 +4525,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -4825,6 +4536,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -5262,17 +4974,6 @@ "node": ">= 10" } }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, "node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", @@ -5595,20 +5296,6 @@ "node": ">=0.8" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -5638,14 +5325,6 @@ "node": ">=0.10.0" } }, - "node_modules/collections": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/collections/-/collections-5.1.13.tgz", - "integrity": "sha512-SCb6Qd+d3Z02corWQ7/mqXiXeeTdHvkP6TeFSYfGYdCFp1WrjSNZ3j6y8Y3T/7osGEe0iOcU2g1d346l99m4Lg==", - "dependencies": { - "weak-map": "~1.0.x" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -5667,15 +5346,6 @@ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -5850,16 +5520,6 @@ "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-pure": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.2.tgz", - "integrity": "sha512-Y2rxThOuNywTjnX/PgA5vWM6CZ9QB9sz9oGeCixV8MqXZO70z/5SHzf9EeBrEBK0PN36DnEBBu9O/aGWzKuMZQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -5945,110 +5605,87 @@ "sha.js": "^2.4.8" } }, - "node_modules/create-jest-runner": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/create-jest-runner/-/create-jest-runner-0.5.3.tgz", - "integrity": "sha512-a9VY2doMBmzRollJB3Ft3/Y5fBceSWJ4gdyVsg4/d7nP1S4715VG939s2VnITDj79YBmRgKhjGjNRv1c+Kre1g==", + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "jest-worker": "^24.0.0", - "throat": "^4.1.0" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" }, "bin": { - "create-jest-runner": "generator/index.js" - } - }, - "node_modules/create-jest-runner/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" + "create-jest": "bin/create-jest.js" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/create-jest-runner/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/create-jest-runner/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/create-jest-runner/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-jest-runner/node_modules/jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" + "node": ">=8" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/create-jest-runner/node_modules/jest-worker/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/create-jest-runner/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/create-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, + "node_modules/create-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, "node_modules/cross-fetch": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dev": true, "dependencies": { "node-fetch": "^2.6.12" } @@ -6512,6 +6149,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, "engines": { "node": ">=0.3.1" } @@ -7112,6 +6750,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", @@ -7486,6 +7125,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "peer": true, "engines": { "node": ">=10" } @@ -7495,6 +7135,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, + "peer": true, "dependencies": { "@babel/highlight": "^7.10.4" } @@ -7504,6 +7145,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -7519,6 +7161,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7535,6 +7178,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -7546,13 +7190,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/eslint/node_modules/globals": { "version": "13.21.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, + "peer": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -7568,6 +7214,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, + "peer": true, "engines": { "node": ">= 4" } @@ -7577,6 +7224,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -7589,6 +7237,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, + "peer": true, "dependencies": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", @@ -7603,6 +7252,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -7881,16 +7531,16 @@ "dev": true }, "node_modules/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.6.4", + "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3" + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -8127,6 +7777,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "peer": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -8300,6 +7951,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, + "peer": true, "dependencies": { "flatted": "^3.2.7", "keyv": "^4.5.3", @@ -8314,6 +7966,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -8328,16 +7981,8 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/flow-parser": { - "version": "0.216.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.216.1.tgz", - "integrity": "sha512-wstw46/C/8bRv/8RySCl15lK376j8DHxm41xFjD9eVL+jSS1UmVpbdLdA0LzGuS2v5uGgQiBLEj6mgSJQwW+MA==", "dev": true, - "engines": { - "node": ">=0.4.0" - } + "peer": true }, "node_modules/flush-write-stream": { "version": "1.1.1", @@ -9913,9 +9558,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -10020,15 +9665,15 @@ "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" }, "node_modules/jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", - "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "dependencies": { - "@jest/core": "^29.6.4", + "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.6.4" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" @@ -10046,13 +9691,13 @@ } }, "node_modules/jest-changed-files": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", - "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { "execa": "^5.0.0", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" }, "engines": { @@ -10060,28 +9705,28 @@ } }, "node_modules/jest-circus": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", - "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", - "@jest/test-result": "^29.6.4", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -10140,22 +9785,21 @@ "dev": true }, "node_modules/jest-cli": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", - "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "dependencies": { - "@jest/core": "^29.6.4", - "@jest/test-result": "^29.6.4", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "bin": { @@ -10223,31 +9867,31 @@ "dev": true }, "node_modules/jest-config": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", - "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.4", + "@jest/test-sequencer": "^29.7.0", "@jest/types": "^29.6.3", - "babel-jest": "^29.6.4", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.4", - "jest-environment-node": "^29.6.4", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", "jest-get-type": "^29.6.3", "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -10317,15 +9961,15 @@ "dev": true }, "node_modules/jest-diff": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", - "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10381,9 +10025,9 @@ "dev": true }, "node_modules/jest-docblock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", - "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" @@ -10393,16 +10037,16 @@ } }, "node_modules/jest-each": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", - "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", "jest-get-type": "^29.6.3", - "jest-util": "^29.6.3", - "pretty-format": "^29.6.3" + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10683,17 +10327,17 @@ } }, "node_modules/jest-environment-node": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", - "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10703,6 +10347,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", + "dev": true, "dependencies": { "cross-fetch": "^3.0.4", "promise-polyfill": "^8.1.3" @@ -10718,9 +10363,9 @@ } }, "node_modules/jest-haste-map": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", - "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", @@ -10730,8 +10375,8 @@ "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -11594,28 +11239,28 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", - "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", - "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.6.4", + "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -11671,9 +11316,9 @@ "dev": true }, "node_modules/jest-message-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", - "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", @@ -11682,7 +11327,7 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -11740,14 +11385,14 @@ "dev": true }, "node_modules/jest-mock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", - "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.6.3" + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -11780,17 +11425,17 @@ } }, "node_modules/jest-resolve": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", - "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -11800,13 +11445,13 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", - "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.6.4" + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -11862,30 +11507,30 @@ "dev": true }, "node_modules/jest-runner": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", - "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "@jest/console": "^29.6.4", - "@jest/environment": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.6.3", - "jest-environment-node": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-leak-detector": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-util": "^29.6.3", - "jest-watcher": "^29.6.4", - "jest-worker": "^29.6.4", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -11943,17 +11588,17 @@ "dev": true }, "node_modules/jest-runtime": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", - "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/globals": "^29.6.4", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", @@ -11961,13 +11606,13 @@ "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -12037,9 +11682,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", - "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -12047,20 +11692,20 @@ "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.6.4", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.4", + "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "semver": "^7.5.3" }, "engines": { @@ -12150,9 +11795,9 @@ "dev": true }, "node_modules/jest-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", - "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", @@ -12216,9 +11861,9 @@ "dev": true }, "node_modules/jest-validate": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", - "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", @@ -12226,7 +11871,7 @@ "chalk": "^4.0.0", "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -12575,18 +12220,18 @@ } }, "node_modules/jest-watcher": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", - "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.4", + "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { @@ -12643,13 +12288,13 @@ "dev": true }, "node_modules/jest-worker": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", - "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -12712,266 +12357,96 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, - "node_modules/jscodeshift": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.6.4.tgz", - "integrity": "sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ==", + "node_modules/jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", "dev": true, "dependencies": { - "@babel/core": "^7.1.6", - "@babel/parser": "^7.1.6", - "@babel/plugin-proposal-class-properties": "^7.1.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/preset-env": "^7.1.6", - "@babel/preset-flow": "^7.0.0", - "@babel/preset-typescript": "^7.1.0", - "@babel/register": "^7.0.0", - "babel-core": "^7.0.0-bridge.0", - "colors": "^1.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.16.1", - "temp": "^0.8.1", - "write-file-atomic": "^2.3.0" + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" }, "bin": { - "jscodeshift": "bin/jscodeshift.js" - } - }, - "node_modules/jscodeshift/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "jsdoc": "jsdoc.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=12.0.0" } }, - "node_modules/jscodeshift/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/jscodeshift/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" + "node": ">=8" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/jscodeshift/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/jsdom/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/jsdoc": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", - "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", - "dev": true, - "dependencies": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" + "dependencies": { + "punycode": "^2.1.0" } }, "node_modules/jsdom/node_modules/webidl-conversions": { @@ -13028,7 +12503,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/json-parse-better-errors": { "version": "1.0.2", @@ -13078,15 +12554,6 @@ "node": ">=6" } }, - "node_modules/json5-writer": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/json5-writer/-/json5-writer-0.1.8.tgz", - "integrity": "sha512-h5sqkk/vSKvESOUTBniGWs8p8nTzHsoDrxPS9enJfQVINqXv3lm+FAyizLwbrCwCn0q7NXqDBb+r8AdUdK3XZw==", - "dev": true, - "dependencies": { - "jscodeshift": "^0.6.3" - } - }, "node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", @@ -13140,6 +12607,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "dev": true, + "peer": true, "dependencies": { "json-buffer": "3.0.1" } @@ -13210,6 +12678,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "peer": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -13293,7 +12762,8 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -13347,7 +12817,8 @@ "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/lodash.uniq": { "version": "4.5.0", @@ -13612,7 +13083,8 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "node_modules/makeerror": { "version": "1.0.12", @@ -14017,17 +13489,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/msgpack5": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/msgpack5/-/msgpack5-5.3.2.tgz", - "integrity": "sha512-e9jz+6InQIUb2cGzZ/Mi+rQBs1KFLby+gNi+22VwQ1pnC9ieZjysKGmRMjdlf6IyjsltbgY4tGoHwHmyS7l94A==", - "dependencies": { - "bl": "^4.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.0", - "safe-buffer": "^5.1.2" - } - }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -14109,22 +13570,11 @@ "tslib": "^2.0.3" } }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -14236,61 +13686,12 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/node-notifier": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", - "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.5", - "shellwords": "^0.1.1", - "uuid": "^8.3.2", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "engines": { - "node": ">=12.19" - } - }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -14651,6 +14052,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "peer": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -14914,15 +14316,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/parse5": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", @@ -14948,12 +14341,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -15622,6 +15009,7 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "peer": true, "engines": { "node": ">= 0.8.0" } @@ -15654,9 +15042,9 @@ } }, "node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -15667,30 +15055,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "dev": true, - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -15801,7 +15165,8 @@ "node_modules/promise-polyfill": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", - "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==" + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", + "dev": true }, "node_modules/prompts": { "version": "2.4.2", @@ -15986,9 +15351,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true, "funding": [ { @@ -16124,6 +15489,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16154,21 +15520,6 @@ "node": ">=8" } }, - "node_modules/recast": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.16.2.tgz", - "integrity": "sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A==", - "dev": true, - "dependencies": { - "ast-types": "0.11.7", - "esprima": "~4.0.0", - "private": "~0.1.5", - "source-map": "~0.6.1" - }, - "engines": { - "node": ">= 4" - } - }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -16451,6 +15802,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -16890,6 +16242,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -17365,18 +16718,6 @@ "sha.js": "bin.js" } }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -17515,6 +16856,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -17532,6 +16874,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -17547,6 +16890,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -17558,7 +16902,8 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/snapdragon": { "version": "0.8.2", @@ -18162,6 +17507,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -18427,6 +17773,7 @@ "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, + "peer": true, "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -18443,6 +17790,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -18458,7 +17806,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "peer": true }, "node_modules/tapable": { "version": "1.1.3", @@ -18497,18 +17846,6 @@ "node": ">=6" } }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dev": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -18611,12 +17948,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==", - "dev": true - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -18761,447 +18092,54 @@ "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-migrate": { - "version": "0.1.35", - "resolved": "https://registry.npmjs.org/ts-migrate/-/ts-migrate-0.1.35.tgz", - "integrity": "sha512-EmXahqwIP0a6fE1BLKKVMgJEeYn9V+CxJ19qFJ/DzkPL4PjDI/FcgPo8D519amBPy2nnlc/x1V6R6aIeHdD87w==", - "dev": true, - "dependencies": { - "create-jest-runner": "^0.5.3", - "json5": "^2.1.1", - "json5-writer": "^0.1.8", - "ts-migrate-plugins": "^0.1.35", - "ts-migrate-server": "^0.1.33", - "updatable-log": "^0.2.0", - "yargs": "^15.0.2" - }, - "bin": { - "ts-migrate": "build/cli.js", - "ts-migrate-full": "bin/ts-migrate-full.sh" - }, - "peerDependencies": { - "typescript": ">4.0" - } - }, - "node_modules/ts-migrate-plugins": { - "version": "0.1.35", - "resolved": "https://registry.npmjs.org/ts-migrate-plugins/-/ts-migrate-plugins-0.1.35.tgz", - "integrity": "sha512-DUkx7ClKhxKYPWDha9DJTZ6LhwEUszL90uH5I/O11K/6TbA96ytln1O3HL6Pt83i4mAKOlg0mQ6AMsPtL5FFkQ==", - "dev": true, - "dependencies": { - "eslint": "^7.14.0", - "jscodeshift": "^0.13.0", - "json-schema": "^0.4.0", - "ts-migrate-server": "^0.1.33" - }, - "peerDependencies": { - "typescript": ">4.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-migrate-plugins/node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-migrate-plugins/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-migrate-plugins/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-migrate-plugins/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/jscodeshift": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", - "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.20.4", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/ts-migrate-plugins/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/recast": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", - "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", - "dev": true, - "dependencies": { - "ast-types": "0.14.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ts-migrate-plugins/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-migrate-plugins/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/ts-migrate-server": { - "version": "0.1.33", - "resolved": "https://registry.npmjs.org/ts-migrate-server/-/ts-migrate-server-0.1.33.tgz", - "integrity": "sha512-MYHy10yzL2fkb2FHFQ9f54gqc5KkaVthTjtpwS4bTroYCONDelp1hbz5nxKWaP3q2oc3kBVeGuAR91RNI+yK+g==", - "dev": true, - "dependencies": { - "@ts-morph/bootstrap": "^0.16.0", - "pretty-ms": "^7.0.1", - "updatable-log": "^0.2.0" - }, - "peerDependencies": { - "typescript": ">4.0" - } - }, - "node_modules/ts-migrate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-migrate/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/ts-migrate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/ts-migrate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-migrate/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0" } }, - "node_modules/ts-migrate/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/ts-migrate/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "node_modules/tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { "node": ">=6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "node_modules/ts-mockito": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", @@ -19215,6 +18153,7 @@ "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -19257,6 +18196,7 @@ "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -21650,6 +20590,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "peer": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -21815,6 +20756,7 @@ "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -22040,209 +20982,6 @@ "yarn": "*" } }, - "node_modules/updatable-log": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/updatable-log/-/updatable-log-0.2.0.tgz", - "integrity": "sha512-gR48/mTR6YFB+B1sNoap3nx8HFbEvDl0ej9KhlQTFZdmP8yL5fzFiCUfeHCUf1QvNnXowY1pM9iiGkPKrd0XyQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "figures": "^3.0.0", - "log-update": "^3.3.0" - } - }, - "node_modules/updatable-log/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/updatable-log/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/updatable-log/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/updatable-log/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/log-update": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-3.4.0.tgz", - "integrity": "sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.2.0", - "cli-cursor": "^2.1.0", - "wrap-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/updatable-log/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/updatable-log/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/updatable-log/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/updatable-log/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -22331,7 +21070,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/util/node_modules/inherits": { "version": "2.0.3", @@ -22358,28 +21098,23 @@ "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -22805,15 +21540,11 @@ "defaults": "^1.0.3" } }, - "node_modules/weak-map": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", - "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==" - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true }, "node_modules/webpack": { "version": "4.47.0", @@ -23175,7 +21906,8 @@ "node_modules/whatwg-fetch": { "version": "3.6.19", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", - "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==", + "dev": true }, "node_modules/whatwg-mimetype": { "version": "2.3.0", @@ -23187,6 +21919,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -23445,14 +22178,6 @@ "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", "dev": true }, - "node_modules/xregexp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.1.tgz", - "integrity": "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg==", - "dependencies": { - "@babel/runtime-corejs3": "^7.16.5" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -23533,6 +22258,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "engines": { "node": ">=6" } diff --git a/package.json b/package.json index e4d5deab..3c064f03 100644 --- a/package.json +++ b/package.json @@ -39,40 +39,33 @@ "devDependencies": { "@mermaid-js/mermaid-cli": "^10.3.0", "@size-limit/preset-small-lib": "^5.0.4", - "@types/lodash": "^4.14.185", + "@types/libsodium-wrappers-sumo": "^0.7.5", "@types/node": "^18.11.18", "@types/text-encoding": "^0.0.36", "@types/urlsafe-base64": "^1.0.28", "husky": "^7.0.2", "jest": "^29.3.1", + "jest-fetch-mock": "^3.0.3", "jsdoc": "^4.0.2", "minami": "^1.2.3", "prettier": "^3.0.3", "size-limit": "^5.0.4", - "ts-migrate": "^0.1.23", "ts-mockito": "^2.6.1", + "ts-node": "^10.9.1", "tsdx": "^0.14.1", "tslib": "^2.3.1", "typedoc": "^0.24.8", - "typescript": "^4.9.4" + "typescript": "^4.9.5", + "whatwg-fetch": "^3.6.19" }, "dependencies": { - "@types/libsodium-wrappers-sumo": "^0.7.5", "blake3": "^2.1.7", "buffer": "^6.0.3", - "cbor": "^8.0.0", - "collections": "^5.1.12", "ecdsa-secp256r1": "^1.3.3", - "jest-fetch-mock": "^3.0.3", "libsodium-wrappers-sumo": "^0.7.9", - "lodash": "^4.17.21", "mathjs": "^11.8.2", - "msgpack5": "^5.3.2", "structured-headers": "^0.5.0", "text-encoding": "^0.7.0", - "ts-node": "^10.9.1", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.17", - "xregexp": "^5.1.0" + "urlsafe-base64": "^1.0.0" } } From 769a5e0b8483577d96382ff4ded0cce7c1cd2569 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Thu, 9 Nov 2023 14:37:40 -0300 Subject: [PATCH 087/186] copied --- examples/integration-scripts/multisig.ts | 1192 ++++++++++++---------- 1 file changed, 661 insertions(+), 531 deletions(-) diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index 252e6c57..97279344 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -1,5 +1,6 @@ import { strict as assert } from 'assert'; import signify, { Serder } from 'signify-ts'; +import { SignifyClient } from '../../dist'; const url = 'http://127.0.0.1:3901'; const boot_url = 'http://127.0.0.1:3903'; @@ -8,155 +9,68 @@ await run(); async function run() { await signify.ready(); - // Boot three clients - const bran1 = signify.randomPasscode(); - const bran2 = signify.randomPasscode(); - const bran3 = signify.randomPasscode(); - const client1 = new signify.SignifyClient( - url, - bran1, - signify.Tier.low, - boot_url - ); - const client2 = new signify.SignifyClient( - url, - bran2, - signify.Tier.low, - boot_url - ); - const client3 = new signify.SignifyClient( - url, - bran3, - signify.Tier.low, - boot_url - ); - await client1.boot(); - await client2.boot(); - await client3.boot(); - await client1.connect(); - await client2.connect(); - await client3.connect(); - const state1 = await client1.state(); - const state2 = await client2.state(); - const state3 = await client3.state(); - console.log( - 'Client 1 connected. Client AID:', - state1.controller.state.i, - 'Agent AID: ', - state1.agent.i - ); - console.log( - 'Client 2 connected. Client AID:', - state2.controller.state.i, - 'Agent AID: ', - state2.agent.i - ); - console.log( - 'Client 3 connected. Client AID:', - state3.controller.state.i, - 'Agent AID: ', - state3.agent.i - ); - - // Create three identifiers, one for each client - let icpResult1 = await client1.identifiers().create('member1', { - toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], - }); - let op1 = await icpResult1.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - let aid1 = await client1.identifiers().get('member1'); - await client1 - .identifiers() - .addEndRole('member1', 'agent', client1!.agent!.pre); - console.log("Member1's AID:", aid1.prefix); - - let icpResult2 = await client2.identifiers().create('member2', { - toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], - }); - let op2 = await icpResult2.op(); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - let aid2 = await client2.identifiers().get('member2'); - await client2 - .identifiers() - .addEndRole('member2', 'agent', client2!.agent!.pre); - console.log("Member2's AID:", aid2.prefix); - - let icpResult3 = await client3.identifiers().create('member3', { - toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], - }); - let op3 = await icpResult3.op(); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - let aid3 = await client3.identifiers().get('member3'); - await client3 - .identifiers() - .addEndRole('member3', 'agent', client3!.agent!.pre); - console.log("Member3's AID:", aid3.prefix); + // Boot Four clients + const client1 = await bootClient(); + const client2 = await bootClient(); + const client3 = await bootClient(); + const client4 = await bootClient(); + + // Create four identifiers, one for each client + let aid1 = await createAID(client1, 'member1'); + let aid2 = await createAID(client2, 'member2'); + let aid3 = await createAID(client3, 'member3'); + let aid4 = await createAID(client4, 'holder'); // Exchange OOBIs + let schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; + let schemaOobi = 'http://127.0.0.1:7723/oobi/' + schemaSAID; console.log('Resolving OOBIs'); let oobi1 = await client1.oobis().get('member1', 'agent'); let oobi2 = await client2.oobis().get('member2', 'agent'); let oobi3 = await client3.oobis().get('member3', 'agent'); + let oobi4 = await client4.oobis().get('holder', 'agent'); - op1 = await client1.oobis().resolve(oobi2.oobis[0], 'member2'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + let op1 = await client1.oobis().resolve(oobi2.oobis[0], 'member2'); + op1 = await waitForOp(client1, op1); op1 = await client1.oobis().resolve(oobi3.oobis[0], 'member3'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - console.log('Member1 resolved 2 OOBIs'); - - op2 = await client2.oobis().resolve(oobi1.oobis[0], 'member1'); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + op1 = await waitForOp(client1, op1); + op1 = await client1.oobis().resolve(schemaOobi, 'schema'); + op1 = await waitForOp(client1, op1); + op1 = await client1.oobis().resolve(oobi4.oobis[0], 'holder'); + op1 = await waitForOp(client1, op1); + console.log('Member1 resolved 4 OOBIs'); + + let op2 = await client2.oobis().resolve(oobi1.oobis[0], 'member1'); + op2 = await waitForOp(client2, op2); op2 = await client2.oobis().resolve(oobi3.oobis[0], 'member3'); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - console.log('Member2 resolved 2 OOBIs'); - - op3 = await client3.oobis().resolve(oobi1.oobis[0], 'member1'); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + op2 = await waitForOp(client2, op2); + op2 = await client2.oobis().resolve(schemaOobi, 'schema'); + op2 = await waitForOp(client2, op2); + op2 = await client2.oobis().resolve(oobi4.oobis[0], 'holder'); + op2 = await waitForOp(client2, op2); + console.log('Member2 resolved 4 OOBIs'); + + let op3 = await client3.oobis().resolve(oobi1.oobis[0], 'member1'); + op3 = await waitForOp(client3, op3); op3 = await client3.oobis().resolve(oobi2.oobis[0], 'member2'); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - console.log('Member3 resolved 2 OOBIs'); + op3 = await waitForOp(client3, op3); + op3 = await client3.oobis().resolve(schemaOobi, 'schema'); + op3 = await waitForOp(client3, op3); + op3 = await client3.oobis().resolve(oobi4.oobis[0], 'holder'); + op3 = await waitForOp(client3, op3); + console.log('Member3 resolved 4 OOBIs'); + + let op4 = await client4.oobis().resolve(oobi1.oobis[0], 'member1'); + op4 = await waitForOp(client4, op4); + op4 = await client4.oobis().resolve(oobi2.oobis[0], 'member2'); + op4 = await waitForOp(client4, op4); + op4 = await client4.oobis().resolve(oobi3.oobis[0], 'member3'); + op4 = await waitForOp(client4, op4); + + op4 = await client4.oobis().resolve(schemaOobi, 'schema'); + op4 = await waitForOp(client4, op4); + + console.log('Holder resolved 4 OOBIs'); // First member challenge the other members with a random list of words // List of words should be passed to the other members out of band @@ -171,10 +85,7 @@ async function run() { console.log('Member3 responded challenge with signed words'); op1 = await client1.challenges().verify('member1', aid2.prefix, words); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + op1 = await waitForOp(client1, op1); console.log('Member1 verified challenge response from member2'); let exnwords = new Serder(op1.response.exn); op1 = await client1 @@ -183,10 +94,7 @@ async function run() { console.log('Member1 marked challenge response as accepted'); op1 = await client1.challenges().verify('member1', aid3.prefix, words); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + op1 = await waitForOp(client1, op1); console.log('Member1 verified challenge response from member3'); exnwords = new Serder(op1.response.exn); op1 = await client1 @@ -197,7 +105,7 @@ async function run() { // First member start the creation of a multisig identifier let rstates = [aid1['state'], aid2['state'], aid3['state']]; let states = rstates; - icpResult1 = await client1.identifiers().create('multisig', { + let icpResult1 = await client1.identifiers().create('multisig', { algo: signify.Algos.group, mhab: aid1, isith: 3, @@ -240,26 +148,15 @@ async function run() { console.log('Member1 initiated multisig, waiting for others to join...'); // Second member check notifications and join the multisig - let msgSaid = ''; - while (msgSaid == '') { - let notifications = await client2.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == '/multisig/icp') { - msgSaid = notif.a.d; - await client2.notifications().mark(notif.i); - console.log( - 'Member2 received exchange message to join multisig' - ); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + + let msgSaid = await waitForMessage(client2, '/multisig/icp'); + console.log('Member2 received exchange message to join multisig'); let res = await client2.groups().getRequest(msgSaid); let exn = res[0].exn; let icp = exn.e.icp; - icpResult2 = await client2.identifiers().create('multisig', { + let icpResult2 = await client2.identifiers().create('multisig', { algo: signify.Algos.group, mhab: aid2, isith: icp.kt, @@ -297,25 +194,13 @@ async function run() { console.log('Member2 joined multisig, waiting for others...'); // Third member check notifications and join the multisig - msgSaid = ''; - while (msgSaid == '') { - let notifications = await client3.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == '/multisig/icp') { - msgSaid = notif.a.d; - await client3.notifications().mark(notif.i); - console.log( - 'Member3 received exchange message to join multisig' - ); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + msgSaid = await waitForMessage(client3, '/multisig/icp'); + console.log('Member3 received exchange message to join multisig'); res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; icp = exn.e.icp; - icpResult3 = await client3.identifiers().create('multisig', { + let icpResult3 = await client3.identifiers().create('multisig', { algo: signify.Algos.group, mhab: aid3, isith: icp.kt, @@ -353,18 +238,9 @@ async function run() { console.log('Member3 joined, multisig waiting for others...'); // Check for completion - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + op1 = await waitForOp(client1, op1); + op2 = await waitForOp(client2, op2); + op3 = await waitForOp(client3, op3); console.log('Multisig created!'); const identifiers1 = await client1.identifiers().list(); assert.equal(identifiers1.aids.length, 2); @@ -459,20 +335,8 @@ async function run() { ); //Member2 check for notifications and join the authorization - msgSaid = ''; - while (msgSaid == '') { - let notifications = await client2.notifications().list(1); - for (let notif of notifications.notes) { - if (notif.a.r == '/multisig/rpy') { - msgSaid = notif.a.d; - await client2.notifications().mark(notif.i); - console.log( - 'Member2 received exchange message to join the end role authorization' - ); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + msgSaid = await waitForMessage(client2, '/multisig/rpy'); + console.log('Member2 received exchange message to join the end role authorization'); res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; // stamp, eid and role are provided in the exn message @@ -517,20 +381,8 @@ async function run() { ); //Member3 check for notifications and join the authorization - msgSaid = ''; - while (msgSaid == '') { - let notifications = await client3.notifications().list(1); - for (let notif of notifications.notes) { - if (notif.a.r == '/multisig/rpy') { - msgSaid = notif.a.d; - await client3.notifications().mark(notif.i); - console.log( - 'Member3 received exchange message to join the end role authorization' - ); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + msgSaid = await waitForMessage(client3, '/multisig/rpy'); + console.log('Member3 received exchange message to join the end role authorization'); res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; rpystamp = exn.e.rpy.dt; @@ -574,26 +426,27 @@ async function run() { ); // Check for completion - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + op1 = await waitForOp(client1, op1); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + op2 = await waitForOp(client2, op2); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + op3 = await waitForOp(client3, op3); console.log(`End role authorization for agent ${eid1}completed!`); + // Holder resolve multisig OOBI + let oobimultisig = await client1.oobis().get('multisig', 'agent'); + op4 = await client4.oobis().resolve(oobimultisig.oobis[0], 'multisig'); + op4 = await waitForOp(client4, op4); + console.log(`Holder resolved multisig OOBI`); + // MultiSig Interaction // Member1 initiates an interaction event - let data = { i: 'EE77q3_zWb5ojgJr-R1vzsL5yiL4Nzm-bfSOQzQl02dy' }; + let data = { + i: 'EBgew7O4yp8SBle0FU-wwN3GtnaroI0BQfBGAj33QiIG', + s: '0', + d: 'EBgew7O4yp8SBle0FU-wwN3GtnaroI0BQfBGAj33QiIG' + }; let eventResponse1 = await client1.identifiers().interact('multisig', data); op1 = await eventResponse1.op(); serder = eventResponse1.serder; @@ -625,20 +478,8 @@ async function run() { ); // Member2 check for notifications and join the interaction event - msgSaid = ''; - while (msgSaid == '') { - let notifications = await client2.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == '/multisig/ixn') { - msgSaid = notif.a.d; - await client2.notifications().mark(notif.i); - console.log( - 'Member2 received exchange message to join the interaction event' - ); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + msgSaid = await waitForMessage(client2, '/multisig/ixn'); + console.log('Member2 received exchange message to join the interaction event'); res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; let ixn = exn.e.ixn; @@ -673,20 +514,8 @@ async function run() { console.log('Member2 joins interaction event, waiting for others...'); // Member3 check for notifications and join the interaction event - msgSaid = ''; - while (msgSaid == '') { - let notifications = await client3.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == '/multisig/ixn') { - msgSaid = notif.a.d; - await client3.notifications().mark(notif.i); - console.log( - 'Member3 received exchange message to join the interaction event' - ); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + msgSaid = await waitForMessage(client3, '/multisig/ixn'); + console.log('Member3 received exchange message to join the interaction event'); res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; ixn = exn.e.ixn; @@ -721,247 +550,192 @@ async function run() { console.log('Member3 joins interaction event, waiting for others...'); // Check for completion - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + op1 = await waitForOp(client1, op1); + op2 = await waitForOp(client2, op2); + op3 = await waitForOp(client3, op3); console.log('Multisig interaction completed!'); - // Members agree out of band to rotate keys - console.log('Members agree out of band to rotate keys'); - icpResult1 = await client1.identifiers().rotate('member1'); - op1 = await icpResult1.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - aid1 = await client1.identifiers().get('member1'); + // // Members agree out of band to rotate keys + // console.log('Members agree out of band to rotate keys'); + // icpResult1 = await client1.identifiers().rotate('member1'); + // op1 = await icpResult1.op(); + // op1 = await waitForOp(client1, op1); + // aid1 = await client1.identifiers().get('member1'); + + // console.log('Member1 rotated keys'); + // icpResult2 = await client2.identifiers().rotate('member2'); + // op2 = await icpResult2.op(); + // op2 = await waitForOp(client2, op2); + // aid2 = await client2.identifiers().get('member2'); + // console.log('Member2 rotated keys'); + // icpResult3 = await client3.identifiers().rotate('member3'); + // op3 = await icpResult3.op(); + // op3 = await waitForOp(client3, op3); + // aid3 = await client3.identifiers().get('member3'); + // console.log('Member3 rotated keys'); + + // // Update new key states + // op1 = await client1.keyStates().query(aid2.prefix, 1); + // op1 = await waitForOp(client1, op1); + // let aid2State = op1['response']; + // op1 = await client1.keyStates().query(aid3.prefix, 1); + // op1 = await waitForOp(client1, op1); + // let aid3State = op1['response']; + + // op2 = await client2.keyStates().query(aid3.prefix, 1); + // op2 = await waitForOp(client2, op2); + // op2 = await client2.keyStates().query(aid1.prefix, 1); + // op2 = await waitForOp(client2, op2); + // let aid1State = op2['response']; + + // op3 = await client3.keyStates().query(aid1.prefix, 1); + // op3 = await waitForOp(client3, op3); + // op3 = await client3.keyStates().query(aid2.prefix, 1); + // op3 = await waitForOp(client3, op3); + + // op4 = await client4.keyStates().query(aid1.prefix, 1); + // op4 = await waitForOp(client4, op4); + // op4 = await client4.keyStates().query(aid2.prefix, 1); + // op4 = await waitForOp(client4, op4); + // op4 = await client4.keyStates().query(aid3.prefix, 1); + // op4 = await waitForOp(client4, op4); + + // rstates = [aid1State, aid2State, aid3State]; + // states = rstates; + + // // Multisig Rotation + + // // Member1 initiates a rotation event + // eventResponse1 = await client1 + // .identifiers() + // .rotate('multisig', { states: states, rstates: rstates }); + // op1 = await eventResponse1.op(); + // serder = eventResponse1.serder; + // sigs = eventResponse1.sigs; + // sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + // ims = signify.d(signify.messagize(serder, sigers)); + // atc = ims.substring(serder.size); + // let rembeds = { + // rot: [serder, atc], + // }; + + // smids = states.map((state) => state['i']); + // recp = [aid2State, aid3State].map((state) => state['i']); + + // await client1 + // .exchanges() + // .send( + // 'member1', + // 'multisig', + // aid1, + // '/multisig/rot', + // { gid: serder.pre, smids: smids, rmids: smids }, + // rembeds, + // recp + // ); + // console.log( + // 'Member1 initiates rotation event, waiting for others to join...' + // ); + + // // Member2 check for notifications and join the rotation event + // msgSaid = await waitForMessage(client2, '/multisig/rot'); + // console.log('Member2 received exchange message to join the rotation event'); + + // await new Promise((resolve) => setTimeout(resolve, 5000)); + // res = await client2.groups().getRequest(msgSaid); + // exn = res[0].exn; + + // icpResult2 = await client2 + // .identifiers() + // .rotate('multisig', { states: states, rstates: rstates }); + // op2 = await icpResult2.op(); + // serder = icpResult2.serder; + // sigs = icpResult2.sigs; + // sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + // ims = signify.d(signify.messagize(serder, sigers)); + // atc = ims.substring(serder.size); + // rembeds = { + // rot: [serder, atc], + // }; + + // smids = exn.a.smids; + // recp = [aid1State, aid3State].map((state) => state['i']); + + // await client2 + // .exchanges() + // .send( + // 'member2', + // 'multisig', + // aid2, + // '/multisig/ixn', + // { gid: serder.pre, smids: smids, rmids: smids }, + // rembeds, + // recp + // ); + // console.log('Member2 joins rotation event, waiting for others...'); + + // // Member3 check for notifications and join the rotation event + // msgSaid = await waitForMessage(client3, '/multisig/rot'); + // console.log('Member3 received exchange message to join the rotation event'); + // res = await client3.groups().getRequest(msgSaid); + // exn = res[0].exn; + + // icpResult3 = await client3 + // .identifiers() + // .rotate('multisig', { states: states, rstates: rstates }); + // op3 = await icpResult3.op(); + // serder = icpResult3.serder; + // sigs = icpResult3.sigs; + // sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + // ims = signify.d(signify.messagize(serder, sigers)); + // atc = ims.substring(serder.size); + // rembeds = { + // rot: [serder, atc], + // }; + + // smids = exn.a.smids; + // recp = [aid1State, aid2State].map((state) => state['i']); + + // await client3 + // .exchanges() + // .send( + // 'member3', + // 'multisig', + // aid3, + // '/multisig/ixn', + // { gid: serder.pre, smids: smids, rmids: smids }, + // rembeds, + // recp + // ); + // console.log('Member3 joins rotation event, waiting for others...'); + + // // Check for completion + // op1 = await waitForOp(client1, op1); + // op2 = await waitForOp(client2, op2); + // op3 = await waitForOp(client3, op3); + // console.log('Multisig rotation completed!'); + + // hab = await client1.identifiers().get('multisig'); + // aid = hab['prefix']; - console.log('Member1 rotated keys'); - icpResult2 = await client2.identifiers().rotate('member2'); - op2 = await icpResult2.op(); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + // Multisig Registry creation + aid1 = await client1.identifiers().get('member1'); aid2 = await client2.identifiers().get('member2'); - console.log('Member2 rotated keys'); - icpResult3 = await client3.identifiers().rotate('member3'); - op3 = await icpResult3.op(); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } aid3 = await client3.identifiers().get('member3'); - console.log('Member3 rotated keys'); - - // Update new key states - op1 = await client1.keyStates().query(aid2.prefix, 1); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - let aid2State = op1['response']; - op1 = await client1.keyStates().query(aid3.prefix, 1); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - let aid3State = op1['response']; - - op2 = await client2.keyStates().query(aid3.prefix, 1); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - op2 = await client2.keyStates().query(aid1.prefix, 1); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - let aid1State = op2['response']; - - op3 = await client3.keyStates().query(aid1.prefix, 1); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - op3 = await client3.keyStates().query(aid2.prefix, 1); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - - rstates = [aid1State, aid2State, aid3State]; - states = rstates; - - // Multisig Rotation - - // Member1 initiates a rotation event - eventResponse1 = await client1 - .identifiers() - .rotate('multisig', { states: states, rstates: rstates }); - op1 = await eventResponse1.op(); - serder = eventResponse1.serder; - sigs = eventResponse1.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - - ims = signify.d(signify.messagize(serder, sigers)); - atc = ims.substring(serder.size); - let rembeds = { - rot: [serder, atc], - }; - - smids = states.map((state) => state['i']); - recp = [aid2State, aid3State].map((state) => state['i']); - - await client1 - .exchanges() - .send( - 'member1', - 'multisig', - aid1, - '/multisig/rot', - { gid: serder.pre, smids: smids, rmids: smids }, - rembeds, - recp - ); - console.log( - 'Member1 initiates rotation event, waiting for others to join...' - ); - - // Member2 check for notifications and join the rotation event - msgSaid = ''; - while (msgSaid == '') { - let notifications = await client2.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == '/multisig/rot') { - msgSaid = notif.a.d; - await client2.notifications().mark(notif.i); - console.log( - 'Member2 received exchange message to join the rotation event' - ); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - - await new Promise((resolve) => setTimeout(resolve, 5000)); - res = await client2.groups().getRequest(msgSaid); - exn = res[0].exn; - - icpResult2 = await client2 - .identifiers() - .rotate('multisig', { states: states, rstates: rstates }); - op2 = await icpResult2.op(); - serder = icpResult2.serder; - sigs = icpResult2.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - - ims = signify.d(signify.messagize(serder, sigers)); - atc = ims.substring(serder.size); - rembeds = { - rot: [serder, atc], - }; - - smids = exn.a.smids; - recp = [aid1State, aid3State].map((state) => state['i']); - - await client2 - .exchanges() - .send( - 'member2', - 'multisig', - aid2, - '/multisig/ixn', - { gid: serder.pre, smids: smids, rmids: smids }, - rembeds, - recp - ); - console.log('Member2 joins rotation event, waiting for others...'); - - // Member3 check for notifications and join the rotation event - msgSaid = ''; - while (msgSaid == '') { - let notifications = await client3.notifications().list(1); - for (let notif of notifications.notes) { - if (notif.a.r == '/multisig/rot') { - msgSaid = notif.a.d; - await client3.notifications().mark(notif.i); - console.log( - 'Member3 received exchange message to join the rotation event' - ); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - res = await client3.groups().getRequest(msgSaid); - exn = res[0].exn; - - icpResult3 = await client3 - .identifiers() - .rotate('multisig', { states: states, rstates: rstates }); - op3 = await icpResult3.op(); - serder = icpResult3.serder; - sigs = icpResult3.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - - ims = signify.d(signify.messagize(serder, sigers)); - atc = ims.substring(serder.size); - rembeds = { - rot: [serder, atc], - }; - - smids = exn.a.smids; - recp = [aid1State, aid2State].map((state) => state['i']); - - await client3 - .exchanges() - .send( - 'member3', - 'multisig', - aid3, - '/multisig/ixn', - { gid: serder.pre, smids: smids, rmids: smids }, - rembeds, - recp - ); - console.log('Member3 joins rotation event, waiting for others...'); - - // Check for completion - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - console.log('Multisig rotation completed!'); - - // Multisig Registry creation console.log('Starting multisig registry creation'); let vcpRes1 = await client1.registries().create({ - name: 'member1', + name: 'multisig', registryName: 'vLEI Registry', nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', }); op1 = await vcpRes1.op(); serder = vcpRes1.regser; + let regk = serder.pre; let anc = vcpRes1.serder; sigs = vcpRes1.sigs; @@ -990,32 +764,19 @@ async function run() { console.log('Member1 initiated registry, waiting for others to join...'); // Member2 check for notifications and join the create registry event - msgSaid = ''; - while (msgSaid == '') { - let notifications = await client2.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == '/multisig/vcp') { - msgSaid = notif.a.d; - await client2.notifications().mark(notif.i); - console.log( - 'Member2 received exchange message to join the create registry event' - ); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - - await new Promise((resolve) => setTimeout(resolve, 5000)); + msgSaid = await waitForMessage(client2, '/multisig/vcp'); + console.log('Member2 received exchange message to join the create registry event'); res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; let vcpRes2 = await client2.registries().create({ - name: 'member2', + name: 'multisig', registryName: 'vLEI Registry', nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', }); op2 = await vcpRes2.op(); serder = vcpRes2.regser; + let regk2 = serder.pre; anc = vcpRes2.serder; sigs = vcpRes2.sigs; @@ -1043,34 +804,22 @@ async function run() { console.log('Member2 joins registry event, waiting for others...'); // Member3 check for notifications and join the create registry event - msgSaid = ''; - while (msgSaid == '') { - let notifications = await client3.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == '/multisig/vcp') { - msgSaid = notif.a.d; - await client3.notifications().mark(notif.i); - console.log( - 'Member3 received exchange message to join the create registry event' - ); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + msgSaid = await waitForMessage(client3, '/multisig/vcp'); + console.log('Member3 received exchange message to join the create registry event'); - await new Promise((resolve) => setTimeout(resolve, 5000)); res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; let vcpRes3 = await client3.registries().create({ - name: 'member3', + name: 'multisig', registryName: 'vLEI Registry', nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', }); op3 = await vcpRes3.op(); - serder = vcpRes2.regser; - anc = vcpRes2.serder; - sigs = vcpRes2.sigs; + serder = vcpRes3.regser; + let regk3 = serder.pre; + anc = vcpRes3.serder; + sigs = vcpRes3.sigs; sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); @@ -1095,19 +844,400 @@ async function run() { ); // Done - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + op1 = await waitForOp(client1, op1); + op2 = await waitForOp(client2, op2); + op3 = await waitForOp(client3, op3); + console.log('Multisig create registry completed!'); + + //Create Credential + console.log('Starting multisig credential creation'); + + const vcdata = { + LEI: '5493001KJTIIGC8Y1R17', + }; + let holder = aid4.prefix + + let TIME = new Date().toISOString().replace('Z', '000+00:00');; + let credRes = await client1 + .credentials() + .issue( + 'multisig', + regk, + schemaSAID, + holder, + vcdata, + undefined, + undefined, + TIME + ); + op1 = await credRes.op(); + + let acdc = new signify.Serder(credRes.acdc); + let iss = credRes.iserder; + let ianc = credRes.anc; + let isigs = credRes.sigs; + let acdcSaider = credRes.acdcSaider; + let issExnSaider = credRes.issExnSaider; + + sigers = isigs.map((sig: any) => new signify.Siger({ qb64: sig })); + ims = signify.d(signify.messagize(ianc, sigers)); + let atc1 = ims.substring(ianc.size); + + let vcembeds = { + acdc: [acdc, ''], + iss: [iss, ''], + anc: [ianc, atc1], + }; + recp = [aid2['state'], aid3['state']].map((state) => state['i']); + await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/iss', + { gid: aid }, + vcembeds, + recp + ); + + console.log('Member1 initiated credential creation, waiting for others to join...'); + + // Member2 check for notifications and join the credential create event + msgSaid = await waitForMessage(client2, '/multisig/iss'); + console.log('Member2 received exchange message to join the credential create event'); + res = await client2.groups().getRequest(msgSaid); + exn = res[0].exn; + + let credRes2 = await client2 + .credentials() + .issue( + 'multisig', + regk2, + schemaSAID, + holder, + vcdata, + undefined, + undefined, + exn.e.acdc.a.dt + ); + + op2 = await credRes2.op(); + + acdc = new signify.Serder(credRes2.acdc); + iss = credRes2.iserder; + ianc = credRes2.anc; + isigs = credRes2.sigs; + + sigers = isigs.map((sig: any) => new signify.Siger({ qb64: sig })); + ims = signify.d(signify.messagize(ianc, sigers)); + let atc2 = ims.substring(ianc.size); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); + vcembeds = { + acdc: [acdc, ''], + iss: [iss, ''], + anc: [ianc, atc2], + }; + + recp = [aid1['state'], aid3['state']].map((state) => state['i']); + await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/iss', + { gid: aid }, + vcembeds, + recp + ); + console.log('Member2 joins credential create event, waiting for others...'); + + // Member3 check for notifications and join the create registry event + msgSaid = await waitForMessage(client3, '/multisig/iss'); + console.log('Member3 received exchange message to join the credential create event'); + res = await client3.groups().getRequest(msgSaid); + exn = res[0].exn; + + let credRes3 = await client3 + .credentials() + .issue( + 'multisig', + regk3, + schemaSAID, + holder, + vcdata, + undefined, + undefined, + exn.e.acdc.a.dt + ); + + op3 = await credRes3.op(); + acdc = new signify.Serder(credRes3.acdc); + iss = credRes3.iserder; + ianc = credRes3.anc; + isigs = credRes3.sigs; + + sigers = isigs.map((sig: any) => new signify.Siger({ qb64: sig })); + ims = signify.d(signify.messagize(ianc, sigers)); + let atc3 = ims.substring(ianc.size); + + vcembeds = { + acdc: [acdc, ''], + iss: [iss, ''], + anc: [ianc, atc3], + }; + + recp = [aid1['state'], aid2['state']].map((state) => state['i']); + await client3 + .exchanges() + .send( + 'member3', + 'multisig', + aid3, + '/multisig/iss', + { gid: aid }, + vcembeds, + recp + ); + console.log('Member3 joins credential create event, waiting for others...'); + + // Check completion + op1 = await waitForOp(client1, op1); + op2 = await waitForOp(client2, op2); + op3 = await waitForOp(client3, op3); + console.log('Multisig create credential completed!'); + + let m = await client1.identifiers().get('multisig'); + + // IPEX grant message + console.log('Starting grant message'); + stamp = new Date().toISOString().replace('Z', '000+00:00'); + + let [grant, gsigs, end] = await client1 + .ipex() + .grant('multisig', holder, '', acdc, acdcSaider, iss, issExnSaider, ianc, atc1, undefined, stamp); + + await client1 + .exchanges() + .sendFromEvents( + 'multisig', + 'credential', + grant, + gsigs, + end, + [holder] + ); + + mstate = m['state']; + seal = [ + 'SealEvent', + { i: m['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, + ]; + sigers = gsigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + let gims = signify.d( + signify.messagize(grant, sigers, seal) + ); + atc = gims.substring(grant.size); + atc += end; + + let gembeds: any = { + exn: [grant, atc], + }; + recp = [aid2['state'], aid3['state']].map((state) => state['i']); + await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/exn', + { gid: m['prefix'] }, + gembeds, + recp + ); + + console.log('Member1 initiated grant message, waiting for others to join...'); + + msgSaid = await waitForMessage(client2, '/multisig/exn'); + console.log('Member2 received exchange message to join the grant message'); + res = await client2.groups().getRequest(msgSaid); + exn = res[0].exn; + + let [grant2, gsigs2, end2] = await client2 + .ipex() + .grant('multisig', holder, '', acdc, acdcSaider, iss, issExnSaider, ianc, atc2, undefined, stamp); + + await client2 + .exchanges() + .sendFromEvents( + 'multisig', + 'credential', + grant2, + gsigs2, + end2, + [holder] + ); + + sigers = gsigs2.map((sig: any) => new signify.Siger({ qb64: sig })); + + gims = signify.d( + signify.messagize(grant2, sigers, seal) + ); + atc = gims.substring(grant2.size); + atc += end2; + + gembeds = { + exn: [grant2, atc], + }; + recp = [aid1['state'], aid3['state']].map((state) => state['i']); + await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/exn', + { gid: m['prefix'] }, + gembeds, + recp + ); + + console.log('Member2 joined grant message, waiting for others to join...'); + + msgSaid = await waitForMessage(client3, '/multisig/exn'); + console.log('Member3 received exchange message to join the grant message'); + res = await client3.groups().getRequest(msgSaid); + exn = res[0].exn; + + let [grant3, gsigs3, end3] = await client3 + .ipex() + .grant('multisig', holder, '', acdc, acdcSaider, iss, issExnSaider, ianc, atc3, undefined, stamp); + + await client3 + .exchanges() + .sendFromEvents( + 'multisig', + 'credential', + grant3, + gsigs3, + end3, + [holder] + ); + + sigers = gsigs3.map((sig: any) => new signify.Siger({ qb64: sig })); + + gims = signify.d( + signify.messagize(grant3, sigers, seal) + ); + atc = gims.substring(grant3.size); + atc += end3; + + gembeds = { + exn: [grant3, atc], + }; + recp = [aid1['state'], aid2['state']].map((state) => state['i']); + await client3 + .exchanges() + .send( + 'member3', + 'multisig', + aid3, + '/multisig/exn', + { gid: m['prefix'] }, + gembeds, + recp + ); + + console.log('Member3 joined grant message, waiting for others to join...'); + + + // // Update latest key states from multisig + + + // op4 = await client4.keyStates().query(m.prefix, 4); + // op4 = await waitForOp(client4, op4); + + msgSaid = await waitForMessage(client4, '/exn/ipex/grant'); + console.log('Holder received exchange message with the grant message'); + res = await client4.exchanges().get('holder',msgSaid); + + let [admit, asigs, aend] = await client4 + .ipex() + .admit('holder', '', res.exn.d); + + res = await client4.ipex().submitAdmit('holder', admit, asigs, aend, [m['prefix']] ); + + console.log('Holder creates and sends admit message'); + + msgSaid = await waitForMessage(client1, '/exn/ipex/admit'); + console.log('Member1 received exchange message with the admit response'); + let creds = await client4.credentials().list('holder'); + console.log(`Holder holds ${creds.length} credential`) + + +} + +async function waitForOp(client:SignifyClient, op:any) { + while (!op['done']) { + op = await client.operations().get(op.name); await new Promise((resolve) => setTimeout(resolve, 1000)); } + return op +} - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); +async function waitForMessage(client:SignifyClient, route:string) { + let msgSaid = ''; + while (msgSaid == '') { + let notifications = await client.notifications().list(); + for (let notif of notifications.notes) { + if (notif.a.r == route) { + msgSaid = notif.a.d; + await client.notifications().mark(notif.i); + } + } await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log('Multisig create registry completed!'); + return msgSaid + +} + +async function bootClient():Promise{ + let bran = signify.randomPasscode(); + let client = new signify.SignifyClient( + url, + bran, + signify.Tier.low, + boot_url + ); + await client.boot(); + await client.connect(); + let state = await client.state(); + console.log( + 'Client AID:', + state.controller.state.i, + 'Agent AID: ', + state.agent.i + ); + return client +} + +async function createAID(client:SignifyClient, name:string){ + let icpResult1 = await client.identifiers().create(name, { + toad: 3, + wits: [ + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op = await icpResult1.op(); + op = await waitForOp(client, op); + let aid = await client.identifiers().get(name); + await client + .identifiers() + .addEndRole(name, 'agent', client!.agent!.pre); + console.log(name, "AID:", aid.prefix); + return aid } From 96dcc492d6b424e43be6ca669815fbca0754e4c0 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 11 Nov 2023 09:07:33 -0300 Subject: [PATCH 088/186] fix seqner --- examples/integration-scripts/multisig.ts | 348 +++++++++++------------ src/keri/app/exchanging.ts | 16 ++ src/keri/core/eventing.ts | 2 +- src/keri/core/utils.ts | 6 +- test/core/seqner.test.ts | 3 + 5 files changed, 196 insertions(+), 179 deletions(-) diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index 97279344..dc1f2887 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -427,9 +427,7 @@ async function run() { // Check for completion op1 = await waitForOp(client1, op1); - op2 = await waitForOp(client2, op2); - op3 = await waitForOp(client3, op3); console.log(`End role authorization for agent ${eid1}completed!`); @@ -555,172 +553,172 @@ async function run() { op3 = await waitForOp(client3, op3); console.log('Multisig interaction completed!'); - // // Members agree out of band to rotate keys - // console.log('Members agree out of band to rotate keys'); - // icpResult1 = await client1.identifiers().rotate('member1'); - // op1 = await icpResult1.op(); - // op1 = await waitForOp(client1, op1); - // aid1 = await client1.identifiers().get('member1'); - - // console.log('Member1 rotated keys'); - // icpResult2 = await client2.identifiers().rotate('member2'); - // op2 = await icpResult2.op(); - // op2 = await waitForOp(client2, op2); - // aid2 = await client2.identifiers().get('member2'); - // console.log('Member2 rotated keys'); - // icpResult3 = await client3.identifiers().rotate('member3'); - // op3 = await icpResult3.op(); - // op3 = await waitForOp(client3, op3); - // aid3 = await client3.identifiers().get('member3'); - // console.log('Member3 rotated keys'); - - // // Update new key states - // op1 = await client1.keyStates().query(aid2.prefix, 1); - // op1 = await waitForOp(client1, op1); - // let aid2State = op1['response']; - // op1 = await client1.keyStates().query(aid3.prefix, 1); - // op1 = await waitForOp(client1, op1); - // let aid3State = op1['response']; - - // op2 = await client2.keyStates().query(aid3.prefix, 1); - // op2 = await waitForOp(client2, op2); - // op2 = await client2.keyStates().query(aid1.prefix, 1); - // op2 = await waitForOp(client2, op2); - // let aid1State = op2['response']; - - // op3 = await client3.keyStates().query(aid1.prefix, 1); - // op3 = await waitForOp(client3, op3); - // op3 = await client3.keyStates().query(aid2.prefix, 1); - // op3 = await waitForOp(client3, op3); - - // op4 = await client4.keyStates().query(aid1.prefix, 1); - // op4 = await waitForOp(client4, op4); - // op4 = await client4.keyStates().query(aid2.prefix, 1); - // op4 = await waitForOp(client4, op4); - // op4 = await client4.keyStates().query(aid3.prefix, 1); - // op4 = await waitForOp(client4, op4); + // Members agree out of band to rotate keys + console.log('Members agree out of band to rotate keys'); + icpResult1 = await client1.identifiers().rotate('member1'); + op1 = await icpResult1.op(); + op1 = await waitForOp(client1, op1); + aid1 = await client1.identifiers().get('member1'); + + console.log('Member1 rotated keys'); + icpResult2 = await client2.identifiers().rotate('member2'); + op2 = await icpResult2.op(); + op2 = await waitForOp(client2, op2); + aid2 = await client2.identifiers().get('member2'); + console.log('Member2 rotated keys'); + icpResult3 = await client3.identifiers().rotate('member3'); + op3 = await icpResult3.op(); + op3 = await waitForOp(client3, op3); + aid3 = await client3.identifiers().get('member3'); + console.log('Member3 rotated keys'); + + // Update new key states + op1 = await client1.keyStates().query(aid2.prefix, 1); + op1 = await waitForOp(client1, op1); + let aid2State = op1['response']; + op1 = await client1.keyStates().query(aid3.prefix, 1); + op1 = await waitForOp(client1, op1); + let aid3State = op1['response']; + + op2 = await client2.keyStates().query(aid3.prefix, 1); + op2 = await waitForOp(client2, op2); + op2 = await client2.keyStates().query(aid1.prefix, 1); + op2 = await waitForOp(client2, op2); + let aid1State = op2['response']; + + op3 = await client3.keyStates().query(aid1.prefix, 1); + op3 = await waitForOp(client3, op3); + op3 = await client3.keyStates().query(aid2.prefix, 1); + op3 = await waitForOp(client3, op3); + + op4 = await client4.keyStates().query(aid1.prefix, 1); + op4 = await waitForOp(client4, op4); + op4 = await client4.keyStates().query(aid2.prefix, 1); + op4 = await waitForOp(client4, op4); + op4 = await client4.keyStates().query(aid3.prefix, 1); + op4 = await waitForOp(client4, op4); - // rstates = [aid1State, aid2State, aid3State]; - // states = rstates; - - // // Multisig Rotation - - // // Member1 initiates a rotation event - // eventResponse1 = await client1 - // .identifiers() - // .rotate('multisig', { states: states, rstates: rstates }); - // op1 = await eventResponse1.op(); - // serder = eventResponse1.serder; - // sigs = eventResponse1.sigs; - // sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - - // ims = signify.d(signify.messagize(serder, sigers)); - // atc = ims.substring(serder.size); - // let rembeds = { - // rot: [serder, atc], - // }; - - // smids = states.map((state) => state['i']); - // recp = [aid2State, aid3State].map((state) => state['i']); - - // await client1 - // .exchanges() - // .send( - // 'member1', - // 'multisig', - // aid1, - // '/multisig/rot', - // { gid: serder.pre, smids: smids, rmids: smids }, - // rembeds, - // recp - // ); - // console.log( - // 'Member1 initiates rotation event, waiting for others to join...' - // ); - - // // Member2 check for notifications and join the rotation event - // msgSaid = await waitForMessage(client2, '/multisig/rot'); - // console.log('Member2 received exchange message to join the rotation event'); - - // await new Promise((resolve) => setTimeout(resolve, 5000)); - // res = await client2.groups().getRequest(msgSaid); - // exn = res[0].exn; - - // icpResult2 = await client2 - // .identifiers() - // .rotate('multisig', { states: states, rstates: rstates }); - // op2 = await icpResult2.op(); - // serder = icpResult2.serder; - // sigs = icpResult2.sigs; - // sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - - // ims = signify.d(signify.messagize(serder, sigers)); - // atc = ims.substring(serder.size); - // rembeds = { - // rot: [serder, atc], - // }; - - // smids = exn.a.smids; - // recp = [aid1State, aid3State].map((state) => state['i']); - - // await client2 - // .exchanges() - // .send( - // 'member2', - // 'multisig', - // aid2, - // '/multisig/ixn', - // { gid: serder.pre, smids: smids, rmids: smids }, - // rembeds, - // recp - // ); - // console.log('Member2 joins rotation event, waiting for others...'); - - // // Member3 check for notifications and join the rotation event - // msgSaid = await waitForMessage(client3, '/multisig/rot'); - // console.log('Member3 received exchange message to join the rotation event'); - // res = await client3.groups().getRequest(msgSaid); - // exn = res[0].exn; - - // icpResult3 = await client3 - // .identifiers() - // .rotate('multisig', { states: states, rstates: rstates }); - // op3 = await icpResult3.op(); - // serder = icpResult3.serder; - // sigs = icpResult3.sigs; - // sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - - // ims = signify.d(signify.messagize(serder, sigers)); - // atc = ims.substring(serder.size); - // rembeds = { - // rot: [serder, atc], - // }; - - // smids = exn.a.smids; - // recp = [aid1State, aid2State].map((state) => state['i']); - - // await client3 - // .exchanges() - // .send( - // 'member3', - // 'multisig', - // aid3, - // '/multisig/ixn', - // { gid: serder.pre, smids: smids, rmids: smids }, - // rembeds, - // recp - // ); - // console.log('Member3 joins rotation event, waiting for others...'); - - // // Check for completion - // op1 = await waitForOp(client1, op1); - // op2 = await waitForOp(client2, op2); - // op3 = await waitForOp(client3, op3); - // console.log('Multisig rotation completed!'); - - // hab = await client1.identifiers().get('multisig'); - // aid = hab['prefix']; + rstates = [aid1State, aid2State, aid3State]; + states = rstates; + + // Multisig Rotation + + // Member1 initiates a rotation event + eventResponse1 = await client1 + .identifiers() + .rotate('multisig', { states: states, rstates: rstates }); + op1 = await eventResponse1.op(); + serder = eventResponse1.serder; + sigs = eventResponse1.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); + let rembeds = { + rot: [serder, atc], + }; + + smids = states.map((state) => state['i']); + recp = [aid2State, aid3State].map((state) => state['i']); + + await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/rot', + { gid: serder.pre, smids: smids, rmids: smids }, + rembeds, + recp + ); + console.log( + 'Member1 initiates rotation event, waiting for others to join...' + ); + + // Member2 check for notifications and join the rotation event + msgSaid = await waitForMessage(client2, '/multisig/rot'); + console.log('Member2 received exchange message to join the rotation event'); + + await new Promise((resolve) => setTimeout(resolve, 5000)); + res = await client2.groups().getRequest(msgSaid); + exn = res[0].exn; + + icpResult2 = await client2 + .identifiers() + .rotate('multisig', { states: states, rstates: rstates }); + op2 = await icpResult2.op(); + serder = icpResult2.serder; + sigs = icpResult2.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); + rembeds = { + rot: [serder, atc], + }; + + smids = exn.a.smids; + recp = [aid1State, aid3State].map((state) => state['i']); + + await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/ixn', + { gid: serder.pre, smids: smids, rmids: smids }, + rembeds, + recp + ); + console.log('Member2 joins rotation event, waiting for others...'); + + // Member3 check for notifications and join the rotation event + msgSaid = await waitForMessage(client3, '/multisig/rot'); + console.log('Member3 received exchange message to join the rotation event'); + res = await client3.groups().getRequest(msgSaid); + exn = res[0].exn; + + icpResult3 = await client3 + .identifiers() + .rotate('multisig', { states: states, rstates: rstates }); + op3 = await icpResult3.op(); + serder = icpResult3.serder; + sigs = icpResult3.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); + rembeds = { + rot: [serder, atc], + }; + + smids = exn.a.smids; + recp = [aid1State, aid2State].map((state) => state['i']); + + await client3 + .exchanges() + .send( + 'member3', + 'multisig', + aid3, + '/multisig/ixn', + { gid: serder.pre, smids: smids, rmids: smids }, + rembeds, + recp + ); + console.log('Member3 joins rotation event, waiting for others...'); + + // Check for completion + op1 = await waitForOp(client1, op1); + op2 = await waitForOp(client2, op2); + op3 = await waitForOp(client3, op3); + console.log('Multisig rotation completed!'); + + hab = await client1.identifiers().get('multisig'); + aid = hab['prefix']; + // Multisig Registry creation aid1 = await client1.identifiers().get('member1'); aid2 = await client2.identifiers().get('member2'); @@ -1010,6 +1008,16 @@ async function run() { let m = await client1.identifiers().get('multisig'); + // Update states + op1 = await client1.keyStates().query(m.prefix, 4); + op1 = await waitForOp(client1, op1); + op2 = await client2.keyStates().query(m.prefix, 4); + op2 = await waitForOp(client2, op2); + op3 = await client3.keyStates().query(m.prefix, 4); + op3 = await waitForOp(client3, op3); + op4 = await client4.keyStates().query(m.prefix, 4); + op4 = await waitForOp(client4, op4); + // IPEX grant message console.log('Starting grant message'); stamp = new Date().toISOString().replace('Z', '000+00:00'); @@ -1041,7 +1049,6 @@ async function run() { ); atc = gims.substring(grant.size); atc += end; - let gembeds: any = { exn: [grant, atc], }; @@ -1152,13 +1159,6 @@ async function run() { console.log('Member3 joined grant message, waiting for others to join...'); - - // // Update latest key states from multisig - - - // op4 = await client4.keyStates().query(m.prefix, 4); - // op4 = await waitForOp(client4, op4); - msgSaid = await waitForMessage(client4, '/exn/ipex/grant'); console.log('Holder received exchange message with the grant message'); res = await client4.exchanges().get('holder',msgSaid); diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts index a70a6343..85ba3005 100644 --- a/src/keri/app/exchanging.ts +++ b/src/keri/app/exchanging.ts @@ -126,6 +126,22 @@ export class Exchanges { let res = await this.client.fetch(path, method, data); return await res.json(); } + + + /** + * Get exn messages + * @async + * @returns {Promise} A promise to the exn message + * @param name + * @param said + */ + async get(name:string, said:string) { + let path = `/identifiers/${name}/exchanges/${said}`; + let method = 'GET'; + let res = await this.client.fetch(path, method, null); + return await res.json(); + + } } export function exchange( diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index 5983d01f..669b4c0c 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -433,7 +433,7 @@ export function messagize( .qb64b ); atc = concat(atc, new TextEncoder().encode(seal[1].i)); - atc = concat(atc, new Seqner(seal[1].s).qb64b); + atc = concat(atc, new Seqner({sn: parseInt(seal[1].s)}).qb64b); atc = concat(atc, new TextEncoder().encode(seal[1].d)); } else if (seal[0] == 'SealLast') { atc = concat( diff --git a/src/keri/core/utils.ts b/src/keri/core/utils.ts index 07d5d3d0..2db51abc 100644 --- a/src/keri/core/utils.ts +++ b/src/keri/core/utils.ts @@ -99,21 +99,19 @@ export function range(start: number, stop: number, step: number) { export function intToBytes(value: number, length: number): Uint8Array { const byteArray = new Uint8Array(length); // Assuming a 4-byte integer (32 bits) - for (let index = 0; index < byteArray.length; index++) { + for (let index = byteArray.length-1; index >= 0; index--) { let byte = value & 0xff; byteArray[index] = byte; value = (value - byte) / 256; } - return byteArray; } export function bytesToInt(ar: Uint8Array): number { let value = 0; - for (let i = ar.length - 1; i >= 0; i--) { + for (let i = 0; i { seqner = new Seqner({ snh: '1' }); assert.equal(seqner.sn, 1); assert.equal(seqner.snh, '1'); + assert.equal(seqner.qb64, '0AAAAAAAAAAAAAAAAAAAAAAB'); seqner = new Seqner({ sn: 1 }); assert.equal(seqner.sn, 1); @@ -34,10 +35,12 @@ describe('Seqner', () => { seqner = new Seqner({ sn: 16 }); assert.equal(seqner.sn, 16); assert.equal(seqner.snh, '10'); + assert.equal(seqner.qb64, '0AAAAAAAAAAAAAAAAAAAAAAQ'); seqner = new Seqner({ sn: 15 }); assert.equal(seqner.sn, 15); assert.equal(seqner.snh, 'f'); + assert.equal(seqner.qb64, '0AAAAAAAAAAAAAAAAAAAAAAP'); seqner = new Seqner({ snh: 'f' }); assert.equal(seqner.sn, 15); From 38f7cdf73723ab52d40dd3f008b6daa556eb8b39 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 11 Nov 2023 09:49:10 -0300 Subject: [PATCH 089/186] fix tholder test --- test/core/tholder.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/core/tholder.test.ts b/test/core/tholder.test.ts index 1e90c75a..5efced45 100644 --- a/test/core/tholder.test.ts +++ b/test/core/tholder.test.ts @@ -7,7 +7,7 @@ describe('THolder', () => { let tholder = new Tholder({ sith: 'b' }); assert.equal(tholder.thold, 11); assert.equal(tholder.size, 11); - assert.deepEqual(tholder.limen, new Uint8Array([77, 65, 115, 65])); + assert.deepEqual(tholder.limen, new Uint8Array([77, 65, 65, 76])); // b(MAAL) assert.equal(tholder.sith, 'b'); assert.equal(tholder.json, '"b"'); assert.equal(tholder.num, 11); @@ -20,7 +20,7 @@ describe('THolder', () => { tholder = new Tholder({ sith: 11 }); assert.equal(tholder.thold, 11); assert.equal(tholder.size, 11); - assert.deepEqual(tholder.limen, new Uint8Array([77, 65, 115, 65])); + assert.deepEqual(tholder.limen, new Uint8Array([77, 65, 65, 76])); // b(MAAL) assert.equal(tholder.sith, 'b'); assert.equal(tholder.json, '"b"'); assert.equal(tholder.num, 11); @@ -33,7 +33,7 @@ describe('THolder', () => { tholder = new Tholder({ thold: 2 }); assert.equal(tholder.thold, 2); assert.equal(tholder.size, 2); - assert.deepEqual(tholder.limen, new Uint8Array([77, 65, 73, 65])); + assert.deepEqual(tholder.limen, new Uint8Array([77, 65, 65, 67])); // b(MAAI) assert.equal(tholder.sith, '2'); assert.equal(tholder.json, '"2"'); assert.equal(tholder.num, 2); From 3a41dce013f3cdb82f8d233e6077341abc5e497e Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Sat, 11 Nov 2023 10:05:44 -0300 Subject: [PATCH 090/186] test coverage --- test/app/exchanging.test.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/app/exchanging.test.ts b/test/app/exchanging.test.ts index fb9714b3..e0da67fb 100644 --- a/test/app/exchanging.test.ts +++ b/test/app/exchanging.test.ts @@ -377,4 +377,25 @@ describe('exchange', () => { assert.equal(lastCall[0]!, url + '/identifiers/aid1/exchanges'); assert.equal(lastCall[1]!.method, 'POST'); }); + + it('Get exchange', async () => { + await libsodium.ready; + const bran = '0123456789abcdefghijk'; + let client = new SignifyClient(url, bran, Tier.low, boot_url); + await client.boot(); + await client.connect(); + let exchanges = client.exchanges(); + await exchanges.get( + 'aid1', + 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal( + lastCall[0]!, + url + + '/identifiers/aid1/exchanges/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + ); + assert.equal(lastCall[1]!.method, 'GET'); + + }); }); From 7a378f4fbc2ce1b838946f8dffae44fdd24c73ac Mon Sep 17 00:00:00 2001 From: Kent Bull Date: Sat, 11 Nov 2023 13:01:42 -0700 Subject: [PATCH 091/186] Remove name param from Credentials.list() --- src/keri/app/credentialing.ts | 5 ++--- test/app/credentialing.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index ee74415b..3e7074d3 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -109,12 +109,11 @@ export class Credentials { /** * List credentials * @async - * @param {string} name Name or alias of the identifier * @param {CredentialFilter} [kargs] Optional parameters to filter the credentials * @returns {Promise} A promise to the list of credentials */ - async list(name: string, kargs: CredentialFilter = {}): Promise { - let path = `/identifiers/${name}/credentials/query`; + async list(kargs: CredentialFilter = {}): Promise { + let path = `/credentials/query`; let filtr = kargs.filter === undefined ? {} : kargs.filter; let sort = kargs.sort === undefined ? [] : kargs.sort; let limit = kargs.limit === undefined ? 25 : kargs.limit; diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index a44190b4..0ab77607 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -184,10 +184,10 @@ describe('Credentialing', () => { limit: 25, skip: 5, }; - await credentials.list('aid1', kargs); + await credentials.list(kargs); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; let lastBody = JSON.parse(lastCall[1]!.body!.toString()); - assert.equal(lastCall[0]!, url + '/identifiers/aid1/credentials/query'); + assert.equal(lastCall[0]!, url + '/credentials/query'); assert.equal(lastCall[1]!.method, 'POST'); assert.deepEqual(lastBody, kargs); From 4de1c278b72de2a4a924b7053e2eade3bec265d6 Mon Sep 17 00:00:00 2001 From: lenkan Date: Sat, 11 Nov 2023 10:37:07 +0100 Subject: [PATCH 092/186] use esbuild, tsc and eslint instead of tsdx --- .eslintrc | 22 + README.md | 7 + .../bip39_shim/package-lock.json | 228 - .../bip39_shim/package.json | 11 - .../bip39_shim/tsconfig.json | 24 - .../bip39_shim/tsconfig.node.json | 11 - .../integration-scripts/externalModule.ts | 2 +- .../{bip39_shim/src => modules}/bip39_shim.ts | 0 .../integration-scripts/package-lock.json | 96 - examples/integration-scripts/package.json | 17 +- examples/integration-scripts/tsconfig.json | 25 +- .../integration-scripts/tsconfig.node.json | 13 - examples/scripts/package-lock.json | 175 - examples/scripts/package.json | 20 +- examples/scripts/src/index.ts | 0 examples/scripts/tsconfig.json | 25 +- examples/scripts/tsconfig.node.json | 10 - examples/signify-react-ts/.eslintrc | 12 + examples/signify-react-ts/.eslintrc.cjs | 14 - examples/signify-react-ts/package-lock.json | 4899 ---- examples/signify-react-ts/package.json | 4 - .../scripts/keri/cf/demo-witness-oobis.json | 0 examples/signify-react-ts/tsconfig.json | 12 +- examples/signify-react-ts/tsconfig.node.json | 10 - ....timestamp-1685395612909-bba831f8e6577.mjs | 11 - jest.config.js | 3 + package-lock.json | 19458 +++++----------- package.json | 62 +- src/buffer-polyfill.ts | 5 + src/exports.ts | 44 + src/index.ts | 72 +- src/keri/core/core.ts | 2 - src/keri/core/tsconfig.json | 100 - src/keri/end/tsconfig.json | 100 - src/math.ts | 3 + src/ready.ts | 13 + tsconfig.json | 36 +- tsconfig.node.json | 13 + 38 files changed, 6505 insertions(+), 19054 deletions(-) create mode 100644 .eslintrc delete mode 100644 examples/integration-scripts/bip39_shim/package-lock.json delete mode 100644 examples/integration-scripts/bip39_shim/package.json delete mode 100644 examples/integration-scripts/bip39_shim/tsconfig.json delete mode 100644 examples/integration-scripts/bip39_shim/tsconfig.node.json rename examples/integration-scripts/{bip39_shim/src => modules}/bip39_shim.ts (100%) delete mode 100644 examples/integration-scripts/package-lock.json delete mode 100644 examples/integration-scripts/tsconfig.node.json delete mode 100644 examples/scripts/package-lock.json delete mode 100644 examples/scripts/src/index.ts delete mode 100644 examples/scripts/tsconfig.node.json create mode 100644 examples/signify-react-ts/.eslintrc delete mode 100644 examples/signify-react-ts/.eslintrc.cjs delete mode 100644 examples/signify-react-ts/package-lock.json delete mode 100755 examples/signify-react-ts/scripts/keri/cf/demo-witness-oobis.json delete mode 100644 examples/signify-react-ts/tsconfig.node.json delete mode 100644 examples/signify-react-ts/vite.config.ts.timestamp-1685395612909-bba831f8e6577.mjs create mode 100644 jest.config.js create mode 100644 src/buffer-polyfill.ts create mode 100644 src/exports.ts delete mode 100644 src/keri/core/tsconfig.json delete mode 100644 src/keri/end/tsconfig.json create mode 100644 src/math.ts create mode 100644 src/ready.ts create mode 100644 tsconfig.node.json diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..b4245e37 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,22 @@ +{ + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "prettier" + ], + "parser": "@typescript-eslint/parser", + "rules": { + "prefer-const": "warn", + "no-var": "warn", + "no-self-assign": "warn", + "no-case-declarations": "warn", + "no-constant-condition": "warn", + "no-empty": "warn", + "@typescript-eslint/no-non-null-asserted-optional-chain": "warn", + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-namespace": "warn", + "@typescript-eslint/ban-types": "warn", + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/ban-ts-comment": "warn" + } +} diff --git a/README.md b/README.md index 12aa92c2..ad34ea32 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,13 @@ The code is built using Typescript and running code locally requires a Mac or Li npm install ``` +Typescript source files needs to be transpiled before running scripts + +- Build: + ```bash + npm run build + ``` + Account Creation Workflow diff --git a/examples/integration-scripts/bip39_shim/package-lock.json b/examples/integration-scripts/bip39_shim/package-lock.json deleted file mode 100644 index a302ef89..00000000 --- a/examples/integration-scripts/bip39_shim/package-lock.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "name": "bip39_shim", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "bip39_shim", - "version": "0.0.1", - "dependencies": { - "bip39": "^3.1.0", - "bip39-light": "^1.0.7", - "signify-ts": "file:../../../" - } - }, - "../../..": { - "version": "0.1.1", - "license": "Apache-2.0", - "dependencies": { - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "ecdsa-secp256r1": "^1.3.3", - "libsodium-wrappers-sumo": "^0.7.9", - "mathjs": "^11.8.2", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "urlsafe-base64": "^1.0.0" - }, - "devDependencies": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/libsodium-wrappers-sumo": "^0.7.5", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jest-fetch-mock": "^3.0.3", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "ts-mockito": "^2.6.1", - "ts-node": "^10.9.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^5.1.0", - "whatwg-fetch": "^3.6.19" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/bip39": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", - "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", - "dependencies": { - "@noble/hashes": "^1.2.0" - } - }, - "node_modules/bip39-light": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", - "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", - "dependencies": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/signify-ts": { - "resolved": "../../..", - "link": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - } - } -} diff --git a/examples/integration-scripts/bip39_shim/package.json b/examples/integration-scripts/bip39_shim/package.json deleted file mode 100644 index e1cf3690..00000000 --- a/examples/integration-scripts/bip39_shim/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "bip39_shim", - "type": "module", - "private": true, - "version": "0.0.1", - "dependencies": { - "bip39": "^3.1.0", - "bip39-light": "^1.0.7", - "signify-ts": "file:../../../" - } -} diff --git a/examples/integration-scripts/bip39_shim/tsconfig.json b/examples/integration-scripts/bip39_shim/tsconfig.json deleted file mode 100644 index 60003ca7..00000000 --- a/examples/integration-scripts/bip39_shim/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"], - } - \ No newline at end of file diff --git a/examples/integration-scripts/bip39_shim/tsconfig.node.json b/examples/integration-scripts/bip39_shim/tsconfig.node.json deleted file mode 100644 index bdc58063..00000000 --- a/examples/integration-scripts/bip39_shim/tsconfig.node.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true - } - } - \ No newline at end of file diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.ts index 9765c2a9..4651137a 100644 --- a/examples/integration-scripts/externalModule.ts +++ b/examples/integration-scripts/externalModule.ts @@ -1,6 +1,6 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; -import { BIP39Shim } from './bip39_shim/src/bip39_shim.ts'; +import { BIP39Shim } from './modules/bip39_shim'; const url = 'http://127.0.0.1:3901'; const boot_url = 'http://127.0.0.1:3903'; diff --git a/examples/integration-scripts/bip39_shim/src/bip39_shim.ts b/examples/integration-scripts/modules/bip39_shim.ts similarity index 100% rename from examples/integration-scripts/bip39_shim/src/bip39_shim.ts rename to examples/integration-scripts/modules/bip39_shim.ts diff --git a/examples/integration-scripts/package-lock.json b/examples/integration-scripts/package-lock.json deleted file mode 100644 index e638adf4..00000000 --- a/examples/integration-scripts/package-lock.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "name": "integration-scripts", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "integration-scripts", - "dependencies": { - "signify-ts": "file:../../" - }, - "devDependencies": { - "@types/prompt-sync": "^4.2.2", - "typescript": "^5.2.2" - } - }, - "../..": { - "version": "0.1.1", - "license": "Apache-2.0", - "dependencies": { - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "ecdsa-secp256r1": "^1.3.3", - "libsodium-wrappers-sumo": "^0.7.9", - "mathjs": "^11.8.2", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "urlsafe-base64": "^1.0.0" - }, - "devDependencies": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/libsodium-wrappers-sumo": "^0.7.5", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jest-fetch-mock": "^3.0.3", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "ts-mockito": "^2.6.1", - "ts-node": "^10.9.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.5", - "whatwg-fetch": "^3.6.19" - } - }, - "bip39_shim": { - "version": "0.0.1", - "extraneous": true, - "dependencies": { - "bip39-light": "^1.0.7", - "signify-ts": "file:../../../" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2" - } - }, - "bip39_shim/src/bip39_shim": { - "extraneous": true - }, - "node_modules/@types/prompt-sync": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.2.tgz", - "integrity": "sha512-S8GBVdrchd7egtwrWtnhzZ3mFKgwlFpOCsiemzYgd5Bg75SwR5RquDlE7G4ijPbbNtAATpdn/Km3u5PEAnTsAw==", - "dev": true - }, - "node_modules/signify-ts": { - "resolved": "../..", - "link": true - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - } - } -} diff --git a/examples/integration-scripts/package.json b/examples/integration-scripts/package.json index fb39f2c3..d6f5e7ac 100644 --- a/examples/integration-scripts/package.json +++ b/examples/integration-scripts/package.json @@ -1,12 +1,9 @@ { - "name": "integration-scripts", - "type": "module", - "private": true, - "dependencies": { - "signify-ts": "file:../../" - }, - "devDependencies": { - "@types/prompt-sync": "^4.2.2", - "typescript": "^5.2.2" - } + "type": "module", + "private": true, + "dependencies": { + "signify-ts": "*", + "bip39": "^3.1.0", + "bip39-light": "^1.0.7" + } } diff --git a/examples/integration-scripts/tsconfig.json b/examples/integration-scripts/tsconfig.json index c81ef9f3..6c19b63b 100644 --- a/examples/integration-scripts/tsconfig.json +++ b/examples/integration-scripts/tsconfig.json @@ -1,24 +1,9 @@ { + "extends": "../../tsconfig.node.json", "compilerOptions": { - "target": "ESNext", - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] + "paths": { + "signify-ts": ["../../src"] + } + } } diff --git a/examples/integration-scripts/tsconfig.node.json b/examples/integration-scripts/tsconfig.node.json deleted file mode 100644 index f34049fe..00000000 --- a/examples/integration-scripts/tsconfig.node.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, - "noEmit": true, - "emitDeclarationOnly": false, // added emitDeclarationOnly option - "allowImportingTsExtensions": true // moved this option to be used with noEmit or emitDeclarationOnly - } - } diff --git a/examples/scripts/package-lock.json b/examples/scripts/package-lock.json deleted file mode 100644 index 1edbd5b3..00000000 --- a/examples/scripts/package-lock.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "name": "signify-scripts-ts", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "signify-scripts-ts", - "dependencies": { - "prompt-sync": "^4.2.0", - "signify-ts": "file:../../" - }, - "devDependencies": { - "@types/prompt-sync": "^4.2.2", - "typescript": "^5.2.2" - } - }, - "../..": { - "version": "0.1.1", - "license": "Apache-2.0", - "dependencies": { - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "ecdsa-secp256r1": "^1.3.3", - "libsodium-wrappers-sumo": "^0.7.9", - "mathjs": "^11.8.2", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "urlsafe-base64": "^1.0.0" - }, - "devDependencies": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/libsodium-wrappers-sumo": "^0.7.5", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jest-fetch-mock": "^3.0.3", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "ts-mockito": "^2.6.1", - "ts-node": "^10.9.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.5", - "whatwg-fetch": "^3.6.19" - } - }, - "node_modules/@types/prompt-sync": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.2.tgz", - "integrity": "sha512-S8GBVdrchd7egtwrWtnhzZ3mFKgwlFpOCsiemzYgd5Bg75SwR5RquDlE7G4ijPbbNtAATpdn/Km3u5PEAnTsAw==", - "dev": true - }, - "node_modules/prompt-sync": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", - "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", - "dependencies": { - "strip-ansi": "^5.0.0" - } - }, - "node_modules/prompt-sync/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/prompt-sync/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/signify-ts": { - "resolved": "../..", - "link": true - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - } - }, - "dependencies": { - "@types/prompt-sync": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.2.tgz", - "integrity": "sha512-S8GBVdrchd7egtwrWtnhzZ3mFKgwlFpOCsiemzYgd5Bg75SwR5RquDlE7G4ijPbbNtAATpdn/Km3u5PEAnTsAw==", - "dev": true - }, - "prompt-sync": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", - "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", - "requires": { - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "signify-ts": { - "version": "file:../..", - "requires": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/libsodium-wrappers-sumo": "^0.7.5", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "ecdsa-secp256r1": "^1.3.3", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jest-fetch-mock": "^3.0.3", - "jsdoc": "^4.0.2", - "libsodium-wrappers-sumo": "^0.7.9", - "mathjs": "^11.8.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "ts-mockito": "^2.6.1", - "ts-node": "^10.9.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.5", - "urlsafe-base64": "^1.0.0", - "whatwg-fetch": "^3.6.19" - } - }, - "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true - } - } -} diff --git a/examples/scripts/package.json b/examples/scripts/package.json index b1622553..dfd189ff 100644 --- a/examples/scripts/package.json +++ b/examples/scripts/package.json @@ -1,13 +1,11 @@ { - "name": "signify-scripts-ts", - "type": "module", - "private": true, - "dependencies": { - "prompt-sync": "^4.2.0", - "signify-ts": "file:../../" - }, - "devDependencies": { - "@types/prompt-sync": "^4.2.2", - "typescript": "^5.2.2" - } + "type": "module", + "private": true, + "dependencies": { + "prompt-sync": "^4.2.0", + "signify-ts": "*" + }, + "devDependencies": { + "@types/prompt-sync": "^4.2.2" + } } diff --git a/examples/scripts/src/index.ts b/examples/scripts/src/index.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/examples/scripts/tsconfig.json b/examples/scripts/tsconfig.json index c81ef9f3..6c19b63b 100644 --- a/examples/scripts/tsconfig.json +++ b/examples/scripts/tsconfig.json @@ -1,24 +1,9 @@ { + "extends": "../../tsconfig.node.json", "compilerOptions": { - "target": "ESNext", - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] + "paths": { + "signify-ts": ["../../src"] + } + } } diff --git a/examples/scripts/tsconfig.node.json b/examples/scripts/tsconfig.node.json deleted file mode 100644 index b1035cbd..00000000 --- a/examples/scripts/tsconfig.node.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true - } -} diff --git a/examples/signify-react-ts/.eslintrc b/examples/signify-react-ts/.eslintrc new file mode 100644 index 00000000..74b07096 --- /dev/null +++ b/examples/signify-react-ts/.eslintrc @@ -0,0 +1,12 @@ +{ + "env": { "browser": true, "es2020": true }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react-hooks/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { "ecmaVersion": "latest", "sourceType": "module" }, + "plugins": ["react-refresh"], + "rules": { "react-refresh/only-export-components": "warn" } +} diff --git a/examples/signify-react-ts/.eslintrc.cjs b/examples/signify-react-ts/.eslintrc.cjs deleted file mode 100644 index 4020bcbf..00000000 --- a/examples/signify-react-ts/.eslintrc.cjs +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react-hooks/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, - plugins: ['react-refresh'], - rules: { - 'react-refresh/only-export-components': 'warn', - }, -} diff --git a/examples/signify-react-ts/package-lock.json b/examples/signify-react-ts/package-lock.json deleted file mode 100644 index 52ef3a37..00000000 --- a/examples/signify-react-ts/package-lock.json +++ /dev/null @@ -1,4899 +0,0 @@ -{ - "name": "signify-react-ts", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "signify-react-ts", - "version": "0.0.0", - "dependencies": { - "@emotion/react": "^11.11.0", - "@emotion/styled": "^11.11.0", - "@mui/icons-material": "^5.11.16", - "@mui/material": "^5.13.3", - "puppeteer": "^20.4.0", - "puppeteer-extra": "^3.3.6", - "puppeteer-extra-plugin-stealth": "^2.11.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "signify-ts": "file:../../" - }, - "devDependencies": { - "@types/react": "^18.0.28", - "@types/react-dom": "^18.0.11", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "@vitejs/plugin-react": "^4.0.0", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2", - "vite": "^4.3.2", - "vite-plugin-wasm": "^3.2.2" - } - }, - "../..": { - "version": "0.1.1", - "license": "Apache-2.0", - "dependencies": { - "blake3": "^2.1.7", - "buffer": "^6.0.3", - "ecdsa-secp256r1": "^1.3.3", - "libsodium-wrappers-sumo": "^0.7.9", - "mathjs": "^11.8.2", - "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", - "urlsafe-base64": "^1.0.0" - }, - "devDependencies": { - "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", - "@types/libsodium-wrappers-sumo": "^0.7.5", - "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", - "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", - "jest": "^29.3.1", - "jest-fetch-mock": "^3.0.3", - "jsdoc": "^4.0.2", - "minami": "^1.2.3", - "prettier": "^3.0.3", - "size-limit": "^5.0.4", - "ts-mockito": "^2.6.1", - "ts-node": "^10.9.1", - "tsdx": "^0.14.1", - "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^5.1.0", - "whatwg-fetch": "^3.6.19" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz", - "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.0", - "@babel/helper-compilation-targets": "^7.22.1", - "@babel/helper-module-transforms": "^7.22.1", - "@babel/helpers": "^7.22.0", - "@babel/parser": "^7.22.0", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.0", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "dependencies": { - "@babel/types": "^7.21.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", - "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz", - "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", - "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", - "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz", - "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/parser": "^7.21.9", - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", - "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.3", - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.22.4", - "@babel/types": "^7.22.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", - "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", - "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@emotion/babel-plugin": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", - "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/serialize": "^1.1.2", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.2.0" - } - }, - "node_modules/@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", - "dependencies": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "stylis": "4.2.0" - } - }, - "node_modules/@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", - "dependencies": { - "@emotion/memoize": "^0.8.1" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" - }, - "node_modules/@emotion/react": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.0.tgz", - "integrity": "sha512-ZSK3ZJsNkwfjT3JpDAWJZlrGD81Z3ytNDsxw1LKq1o+xkmO5pnWfr6gmCC8gHEFf3nSSX/09YrG67jybNPxSUw==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "hoist-non-react-statics": "^3.3.1" - }, - "peerDependencies": { - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/serialize": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", - "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", - "dependencies": { - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/unitless": "^0.8.1", - "@emotion/utils": "^1.2.1", - "csstype": "^3.0.2" - } - }, - "node_modules/@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" - }, - "node_modules/@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" - }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", - "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@mui/base": { - "version": "5.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.3.tgz", - "integrity": "sha512-ErOMoGNpgf6BF5W+jgXDiRlXJnpSeg8XSRonuY5UCCMHIlOWtKDtt/LS3qDAbFFGb7tV/y6EBddbcMeexx+zHw==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@emotion/is-prop-valid": "^1.2.1", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "@popperjs/core": "^2.11.7", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/core-downloads-tracker": { - "version": "5.13.3", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.3.tgz", - "integrity": "sha512-w4//nRIi9fiMow/MmhkForOezd8nc229EpSZZ5DzwpJNOmAXwypFTapOUVAGTUQiTJyeZXUNbQqYuUIrIs2nbg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - } - }, - "node_modules/@mui/icons-material": { - "version": "5.11.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", - "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@mui/material": "^5.0.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/material": { - "version": "5.13.3", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.3.tgz", - "integrity": "sha512-10pek+Bz+PZ4rjUf3KTKfXWjPMUqU1nSnRPf4DAXABhsjzelGGfGW/EICgrLRrttYplTJZhoponWALezAge8ug==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/base": "5.0.0-beta.3", - "@mui/core-downloads-tracker": "^5.13.3", - "@mui/system": "^5.13.2", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "@types/react-transition-group": "^4.4.6", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1", - "react-is": "^18.2.0", - "react-transition-group": "^4.4.5" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/private-theming": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", - "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.13.1", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/styled-engine": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", - "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@emotion/react": "^11.4.1", - "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - } - } - }, - "node_modules/@mui/system": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.2.tgz", - "integrity": "sha512-TPyWmRJPt0JPVxacZISI4o070xEJ7ftxpVtu6LWuYVOUOINlhoGOclam4iV8PDT3EMQEHuUrwU49po34UdWLlw==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/private-theming": "^5.13.1", - "@mui/styled-engine": "^5.13.2", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/types": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", - "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", - "peerDependencies": { - "@types/react": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/utils": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.1.tgz", - "integrity": "sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.0", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@puppeteer/browsers": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.0.tgz", - "integrity": "sha512-HiRpoc15NhFwoR1IjN3MkMsqeAfRQKNzbhWVV+0BfvybEhjWSyRNQMC0ohMhkFhzoGnFoS59WlrJCGLPky/89g==", - "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.2.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", - "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==", - "optional": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz", - "integrity": "sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", - "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-1vz2yObaQkLL7YFe/pme2cpvDsCwI1WXIfL+5eLz0MI9gFG24Re16RzUsI8t9XZn9ZWvgLNDrJBmrqXJO7GNQQ==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", - "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz", - "integrity": "sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/type-utils": "5.59.8", - "@typescript-eslint/utils": "5.59.8", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.8.tgz", - "integrity": "sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/typescript-estree": "5.59.8", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz", - "integrity": "sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz", - "integrity": "sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.8", - "@typescript-eslint/utils": "5.59.8", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz", - "integrity": "sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz", - "integrity": "sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz", - "integrity": "sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/typescript-estree": "5.59.8", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz", - "integrity": "sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.8", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.0.tgz", - "integrity": "sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.21.4", - "@babel/plugin-transform-react-jsx-self": "^7.21.0", - "@babel/plugin-transform-react-jsx-source": "^7.19.6", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/basic-ftp": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", - "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001491", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001491.tgz", - "integrity": "sha512-17EYIi4TLnPiTzVKMveIxU5ETlxbSO3B6iPvMbprqnKh4qJsQGk5Nh1Lp4jIMAE0XfrujsJuWZAM3oJdMHaKBA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/chromium-bidi": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.10.tgz", - "integrity": "sha512-ngdRIq/f5G3nIOz1M0MtCABCTezr79MBCrJ09K2xRk+hTZQGTH8JIeFbgQmVvNPBMQblh7ROfJnSzsE07YpFfg==", - "dependencies": { - "mitt": "3.0.0" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", - "dependencies": { - "for-own": "^0.1.3", - "is-plain-object": "^2.0.1", - "kind-of": "^3.0.2", - "lazy-cache": "^1.0.3", - "shallow-clone": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", - "dependencies": { - "node-fetch": "^2.6.11" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "node_modules/data-uri-to-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", - "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/degenerator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-4.0.2.tgz", - "integrity": "sha512-HKwIFvZROUMfH3qI3gBpD61BYh7q3c3GXD5UGZzoVNJwVSYgZKvYl1fRMXc9ozoTxl/VZxKJ5v/bA+19tywFiw==", - "dependencies": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0", - "vm2": "^3.9.17" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/devtools-protocol": { - "version": "0.0.1120988", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1120988.tgz", - "integrity": "sha512-39fCpE3Z78IaIPChJsP6Lhmkbf4dWXOmzLk/KFTdRkNk/0JymRIfUynDVRndV9HoDz8PyalK1UH21ST/ivwW5Q==" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.414", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.414.tgz", - "integrity": "sha512-RRuCvP6ekngVh2SAJaOKT/hxqc9JAsK+Pe0hP5tGQIfonU2Zy9gMGdJ+mBdyl/vNucMG6gkXYtuM4H/1giws5w==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", - "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", - "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", - "dev": true, - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-uri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", - "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^5.0.1", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/http-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-6.1.1.tgz", - "integrity": "sha512-JRCz+4Whs6yrrIoIlrH+ZTmhrRwtMnmOHsHn8GFEn9O2sVfSE+DAZ3oyyGIKF8tjJEeSJmP89j7aTjVsSqsU0g==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-6.2.1.tgz", - "integrity": "sha512-ONsE3+yfZF2caH5+bJlcddtWqNI3Gvs5A38+ngvljxaBiRXRswym2c7yf8UAeFpRFKjFNHIFEHqR/OLAWJzyiA==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/merge-deep": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", - "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", - "dependencies": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" - }, - "node_modules/mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", - "dependencies": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-object/node_modules/for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pac-proxy-agent": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-6.0.3.tgz", - "integrity": "sha512-5Hr1KgPDoc21Vn3rsXBirwwDnF/iac1jN/zkpsOYruyT+ZgsUhUOgVwq3v9+ukjZd/yGm/0nzO1fDfl7rkGoHQ==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "pac-resolver": "^6.0.1", - "socks-proxy-agent": "^8.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", - "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-resolver": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-6.0.1.tgz", - "integrity": "sha512-dg497MhVT7jZegPRuOScQ/z0aV/5WR0gTdRu1md+Irs9J9o+ls5jIuxjo1WfaTG+eQQkxyn5HMGvWK+w7EIBkQ==", - "dependencies": { - "degenerator": "^4.0.1", - "ip": "^1.1.5", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/proxy-agent": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.2.0.tgz", - "integrity": "sha512-g3rBHXPhEa0Z1nxZkirj0+US1SCcA67SnjpxbdZf7BloLdULEUCzbQozsq+wFwhmMeZegeZISDZjPFN/Ct9DaQ==", - "dependencies": { - "agent-base": "^7.0.1", - "debug": "^4.3.4", - "http-proxy-agent": "^6.0.1", - "https-proxy-agent": "^6.1.0", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^6.0.2", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.4.0.tgz", - "integrity": "sha512-0/lgDbbC2LX/vMQ6+cv/doQuguFAf4Ra52fyW5oBOpQd85SzPBtXg4yPk+VhUpgr+oaOVAIUkgvBs98E+8xhCw==", - "hasInstallScript": true, - "dependencies": { - "@puppeteer/browsers": "1.4.0", - "cosmiconfig": "8.1.3", - "puppeteer-core": "20.4.0" - } - }, - "node_modules/puppeteer-core": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.4.0.tgz", - "integrity": "sha512-fcL2fYQLFZEuIIDbMhvf6WF5rAcKXetsrjOxu6Br6FEAet7kEtJlCcrKmnz3pfqkwAIlihjuzwT5ys7jMWEx8A==", - "dependencies": { - "@puppeteer/browsers": "1.4.0", - "chromium-bidi": "0.4.10", - "cross-fetch": "3.1.6", - "debug": "4.3.4", - "devtools-protocol": "0.0.1120988", - "ws": "8.13.0" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/puppeteer-extra/-/puppeteer-extra-3.3.6.tgz", - "integrity": "sha512-rsLBE/6mMxAjlLd06LuGacrukP2bqbzKCLzV1vrhHFavqQE/taQ2UXv3H5P0Ls7nsrASa+6x3bDbXHpqMwq+7A==", - "dependencies": { - "@types/debug": "^4.1.0", - "debug": "^4.1.1", - "deepmerge": "^4.2.2" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "@types/puppeteer": "*", - "puppeteer": "*", - "puppeteer-core": "*" - }, - "peerDependenciesMeta": { - "@types/puppeteer": { - "optional": true - }, - "puppeteer": { - "optional": true - }, - "puppeteer-core": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin/-/puppeteer-extra-plugin-3.2.3.tgz", - "integrity": "sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==", - "dependencies": { - "@types/debug": "^4.1.0", - "debug": "^4.1.1", - "merge-deep": "^3.0.1" - }, - "engines": { - "node": ">=9.11.2" - }, - "peerDependencies": { - "playwright-extra": "*", - "puppeteer-extra": "*" - }, - "peerDependenciesMeta": { - "playwright-extra": { - "optional": true - }, - "puppeteer-extra": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin-stealth": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.11.2.tgz", - "integrity": "sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==", - "dependencies": { - "debug": "^4.1.1", - "puppeteer-extra-plugin": "^3.2.3", - "puppeteer-extra-plugin-user-preferences": "^2.4.1" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "playwright-extra": "*", - "puppeteer-extra": "*" - }, - "peerDependenciesMeta": { - "playwright-extra": { - "optional": true - }, - "puppeteer-extra": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin-user-data-dir": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.1.tgz", - "integrity": "sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==", - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^10.0.0", - "puppeteer-extra-plugin": "^3.2.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "playwright-extra": "*", - "puppeteer-extra": "*" - }, - "peerDependenciesMeta": { - "playwright-extra": { - "optional": true - }, - "puppeteer-extra": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/puppeteer-extra-plugin-user-preferences": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.1.tgz", - "integrity": "sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==", - "dependencies": { - "debug": "^4.1.1", - "deepmerge": "^4.2.2", - "puppeteer-extra-plugin": "^3.2.3", - "puppeteer-extra-plugin-user-data-dir": "^2.4.1" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "playwright-extra": "*", - "puppeteer-extra": "*" - }, - "peerDependenciesMeta": { - "playwright-extra": { - "optional": true - }, - "puppeteer-extra": { - "optional": true - } - } - }, - "node_modules/puppeteer/node_modules/cosmiconfig": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.23.0.tgz", - "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", - "dependencies": { - "is-extendable": "^0.1.1", - "kind-of": "^2.0.1", - "lazy-cache": "^0.2.3", - "mixin-object": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", - "dependencies": { - "is-buffer": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone/node_modules/lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signify-ts": { - "resolved": "../..", - "link": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", - "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", - "dependencies": { - "agent-base": "^7.0.1", - "debug": "^4.3.4", - "socks": "^2.7.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tslib": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", - "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "devOptional": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/vite": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", - "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", - "dev": true, - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-plugin-wasm": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.2.2.tgz", - "integrity": "sha512-cdbBUNR850AEoMd5nvLmnyeq63CSfoP1ctD/L2vLk/5+wsgAPlAVAzUK5nGKWO/jtehNlrSSHLteN+gFQw7VOA==", - "dev": true, - "peerDependencies": { - "vite": "^2 || ^3 || ^4" - } - }, - "node_modules/vm2": { - "version": "3.9.19", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", - "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", - "dependencies": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - }, - "bin": { - "vm2": "bin/vm2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/examples/signify-react-ts/package.json b/examples/signify-react-ts/package.json index 9a82b639..c2419b5f 100644 --- a/examples/signify-react-ts/package.json +++ b/examples/signify-react-ts/package.json @@ -23,13 +23,9 @@ "devDependencies": { "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", "@vitejs/plugin-react": "^4.0.0", - "eslint": "^8.38.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2", "vite": "^4.3.2", "vite-plugin-wasm": "^3.2.2" } diff --git a/examples/signify-react-ts/scripts/keri/cf/demo-witness-oobis.json b/examples/signify-react-ts/scripts/keri/cf/demo-witness-oobis.json deleted file mode 100755 index e69de29b..00000000 diff --git a/examples/signify-react-ts/tsconfig.json b/examples/signify-react-ts/tsconfig.json index c81ef9f3..8e8e4c07 100644 --- a/examples/signify-react-ts/tsconfig.json +++ b/examples/signify-react-ts/tsconfig.json @@ -12,13 +12,9 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true + "paths": { + "signify-ts": ["../../src"] + } }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] + "include": ["src"] } diff --git a/examples/signify-react-ts/tsconfig.node.json b/examples/signify-react-ts/tsconfig.node.json deleted file mode 100644 index 42872c59..00000000 --- a/examples/signify-react-ts/tsconfig.node.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] -} diff --git a/examples/signify-react-ts/vite.config.ts.timestamp-1685395612909-bba831f8e6577.mjs b/examples/signify-react-ts/vite.config.ts.timestamp-1685395612909-bba831f8e6577.mjs deleted file mode 100644 index f35de5b7..00000000 --- a/examples/signify-react-ts/vite.config.ts.timestamp-1685395612909-bba831f8e6577.mjs +++ /dev/null @@ -1,11 +0,0 @@ -// vite.config.ts -import { defineConfig } from "file:///Users/alexandrei/Projects/provenant/signify-ts/examples/signify-react-ts/node_modules/vite/dist/node/index.js"; -import react from "file:///Users/alexandrei/Projects/provenant/signify-ts/examples/signify-react-ts/node_modules/@vitejs/plugin-react/dist/index.mjs"; -import wasm from "file:///Users/alexandrei/Projects/provenant/signify-ts/examples/signify-react-ts/node_modules/vite-plugin-wasm/exports/import.mjs"; -var vite_config_default = defineConfig({ - plugins: [react(), wasm()] -}); -export { - vite_config_default as default -}; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvYWxleGFuZHJlaS9Qcm9qZWN0cy9wcm92ZW5hbnQvc2lnbmlmeS10cy9leGFtcGxlcy9zaWduaWZ5LXJlYWN0LXRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvYWxleGFuZHJlaS9Qcm9qZWN0cy9wcm92ZW5hbnQvc2lnbmlmeS10cy9leGFtcGxlcy9zaWduaWZ5LXJlYWN0LXRzL3ZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9hbGV4YW5kcmVpL1Byb2plY3RzL3Byb3ZlbmFudC9zaWduaWZ5LXRzL2V4YW1wbGVzL3NpZ25pZnktcmVhY3QtdHMvdml0ZS5jb25maWcudHNcIjtpbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJ1xuaW1wb3J0IHJlYWN0IGZyb20gJ0B2aXRlanMvcGx1Z2luLXJlYWN0J1xuaW1wb3J0IHdhc20gZnJvbSBcInZpdGUtcGx1Z2luLXdhc21cIjtcblxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gIHBsdWdpbnM6IFtyZWFjdCgpLCB3YXNtKCldLFxufSlcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBNlksU0FBUyxvQkFBb0I7QUFDMWEsT0FBTyxXQUFXO0FBQ2xCLE9BQU8sVUFBVTtBQUdqQixJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMxQixTQUFTLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo= diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..ac2884fe --- /dev/null +++ b/jest.config.js @@ -0,0 +1,3 @@ +export default { + preset: 'ts-jest', +}; diff --git a/package-lock.json b/package-lock.json index 6ebc9f82..3f2fadca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "signify-ts", "version": "0.1.1", "license": "Apache-2.0", + "workspaces": [ + "examples/*" + ], "dependencies": { "blake3": "^2.1.7", "buffer": "^6.0.3", @@ -15,558 +18,793 @@ "libsodium-wrappers-sumo": "^0.7.9", "mathjs": "^11.8.2", "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", "urlsafe-base64": "^1.0.0" }, "devDependencies": { "@mermaid-js/mermaid-cli": "^10.3.0", "@size-limit/preset-small-lib": "^5.0.4", + "@types/jest": "^29.5.8", "@types/libsodium-wrappers-sumo": "^0.7.5", "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", + "@typescript-eslint/eslint-plugin": "^6.10.0", + "@typescript-eslint/parser": "^6.10.0", + "esbuild": "^0.19.5", + "eslint": "^8.53.0", + "eslint-config-prettier": "^9.0.0", "jest": "^29.3.1", "jest-fetch-mock": "^3.0.3", "jsdoc": "^4.0.2", "minami": "^1.2.3", "prettier": "^3.0.3", "size-limit": "^5.0.4", + "ts-jest": "^29.1.1", "ts-mockito": "^2.6.1", "ts-node": "^10.9.1", - "tsdx": "^0.14.1", "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.5", + "typedoc": "^0.25.3", + "typescript": "^5.2.2", "whatwg-fetch": "^3.6.19" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, + "examples/integration-scripts": { "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "bip39": "^3.1.0", + "bip39-light": "^1.0.7", + "signify-ts": "*" } }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, + "examples/scripts": { "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "prompt-sync": "^4.2.0", + "signify-ts": "*" }, - "engines": { - "node": ">=6.9.0" + "devDependencies": { + "@types/prompt-sync": "^4.2.2" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "examples/signify-react-ts": { + "version": "0.0.0", "dependencies": { - "color-convert": "^1.9.0" + "@emotion/react": "^11.11.0", + "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.11.16", + "@mui/material": "^5.13.3", + "puppeteer": "^20.4.0", + "puppeteer-extra": "^3.3.6", + "puppeteer-extra-plugin-stealth": "^2.11.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "signify-ts": "file:../../" }, + "devDependencies": { + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react": "^4.0.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "vite": "^4.3.2", + "vite-plugin-wasm": "^3.2.2" + } + }, + "examples/signify-react-ts/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "examples/signify-react-ts/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "examples/signify-react-ts/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.8.0" + "node": ">=12" } }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "examples/signify-react-ts/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "examples/signify-react-ts/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "examples/signify-react-ts/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/core": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", - "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", + "examples/signify-react-ts/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.17", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.17", - "@babel/types": "^7.22.17", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node": ">=12" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "examples/signify-react-ts/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "examples/signify-react-ts/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.22.15", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "examples/signify-react-ts/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "examples/signify-react-ts/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "examples/signify-react-ts/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "examples/signify-react-ts/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "examples/signify-react-ts/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=12" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "examples/signify-react-ts/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "examples/signify-react-ts/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=12" } }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "examples/signify-react-ts/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "examples/signify-react-ts/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "examples/signify-react-ts/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "examples/signify-react-ts/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "examples/signify-react-ts/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", - "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", + "examples/signify-react-ts/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, + "examples/signify-react-ts/node_modules/@puppeteer/browsers": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", + "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", "dependencies": { - "@babel/types": "^7.22.15" + "debug": "4.3.4", + "extract-zip": "2.0.1", + "progress": "2.0.3", + "proxy-agent": "6.3.0", + "tar-fs": "3.0.4", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.3.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", - "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", + "examples/signify-react-ts/node_modules/@vitejs/plugin-react": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.1.tgz", + "integrity": "sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.15" + "@babel/core": "^7.23.2", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "@types/babel__core": "^7.20.3", + "react-refresh": "^0.14.0" }, "engines": { - "node": ">=6.9.0" + "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "vite": "^4.2.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, + "examples/signify-react-ts/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "examples/signify-react-ts/node_modules/chromium-bidi": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", + "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", "dependencies": { - "@babel/types": "^7.22.5" + "mitt": "3.0.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "devtools-protocol": "*" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "examples/signify-react-ts/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "engines": { - "node": ">=6.9.0" - } + "optional": true, + "peer": true }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.17.tgz", - "integrity": "sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA==", - "dev": true, + "examples/signify-react-ts/node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.17" + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "url": "https://github.com/sponsors/d-fischer" } }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, + "examples/signify-react-ts/node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node-fetch": "^2.6.12" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "examples/signify-react-ts/node_modules/devtools-protocol": { + "version": "0.0.1147663", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", + "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==" + }, + "examples/signify-react-ts/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "examples/signify-react-ts/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, + "examples/signify-react-ts/node_modules/puppeteer": { + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.9.0.tgz", + "integrity": "sha512-kAglT4VZ9fWEGg3oLc4/de+JcONuEJhlh3J6f5R1TLkrY/EHHIHxWXDOzXvaxQCtedmyVXBwg8M+P8YCO/wZjw==", + "hasInstallScript": true, "dependencies": { - "@babel/types": "^7.22.5" + "@puppeteer/browsers": "1.4.6", + "cosmiconfig": "8.2.0", + "puppeteer-core": "20.9.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.3.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, + "examples/signify-react-ts/node_modules/puppeteer-core": { + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", + "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", "dependencies": { - "@babel/types": "^7.22.5" + "@puppeteer/browsers": "1.4.6", + "chromium-bidi": "0.4.16", + "cross-fetch": "4.0.0", + "debug": "4.3.4", + "devtools-protocol": "0.0.1147663", + "ws": "8.13.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.3.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "examples/signify-react-ts/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "engines": { - "node": ">=6.9.0" + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "examples/signify-react-ts/node_modules/tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "dependencies": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "examples/signify-react-ts/node_modules/tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.17.tgz", - "integrity": "sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q==", + "examples/signify-react-ts/node_modules/terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.17" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": ">=6.9.0" + "node": ">=10" } }, - "node_modules/@babel/helpers": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", - "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "examples/signify-react-ts/node_modules/vite": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">=6.9.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "examples/signify-react-ts/node_modules/vite-plugin-wasm": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.2.2.tgz", + "integrity": "sha512-cdbBUNR850AEoMd5nvLmnyeq63CSfoP1ctD/L2vLk/5+wsgAPlAVAzUK5nGKWO/jtehNlrSSHLteN+gFQw7VOA==", "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "vite": "^2 || ^3 || ^4" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "examples/signify-react-ts/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "examples/signify-react-ts/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { "color-convert": "^1.9.0" }, @@ -574,11 +812,10 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/chalk": { + "node_modules/@babel/code-frame/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -588,29 +825,26 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } }, - "node_modules/@babel/highlight/node_modules/has-flag": { + "node_modules/@babel/code-frame/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { + "node_modules/@babel/code-frame/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -618,199 +852,357 @@ "node": ">=4" } }, - "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "node_modules/@babel/core": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", + "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" + "@babel/types": "^7.23.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/types": "^7.22.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/types": "^7.22.15" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/types": "^7.22.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { + "node_modules/@babel/helper-string-parser": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "node_modules/@babel/helpers": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", + "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { @@ -907,21 +1299,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -952,26 +1329,25 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", + "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", + "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -983,1130 +1359,817 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", - "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", - "dev": true, + "node_modules/@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "node_modules/@babel/traverse": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", + "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.3", + "@babel/types": "^7.23.3", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", - "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", - "dev": true, + "node_modules/@babel/types": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", + "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=10.0.0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=0.10.0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", - "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", - "dev": true, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@emotion/memoize": "^0.8.1" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", - "dev": true, + "node_modules/@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": ">=16.8.0" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", + "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "node_modules/@esbuild/android-arm64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz", + "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "node_modules/@esbuild/android-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz", + "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz", + "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz", + "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz", + "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz", + "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", - "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", + "node_modules/@esbuild/linux-arm": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz", + "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", - "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz", + "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz", + "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz", + "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz", + "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz", + "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz", + "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz", + "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "node_modules/@esbuild/linux-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz", + "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz", + "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", - "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz", + "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz", + "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz", + "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz", + "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "node_modules/@esbuild/win32-x64": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz", + "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", + "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "argparse": "^2.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, "engines": { - "node": ">=6.9.0" + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "node_modules/@eslint/js": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", + "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, + "node_modules/@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@floating-ui/utils": "^0.1.3" } }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz", + "integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==", + "dependencies": { + "@floating-ui/dom": "^1.5.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=10.10.0" } }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, "engines": { - "node": ">=6.9.0" + "node": ">=12.22" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@babel/preset-env": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.15.tgz", - "integrity": "sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.15", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.15", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.15", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-modules-systemjs": "^7.22.11", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.22.15", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.15", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=8" } }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", - "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.17", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", - "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dev": true, - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "peer": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true, - "peer": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" @@ -2638,6 +2701,18 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -2683,52 +2758,317 @@ "node": "^14.13 || >=16.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "node_modules/@mui/base": { + "version": "5.0.0-beta.23", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.23.tgz", + "integrity": "sha512-9L8SQUGAWtd/Qi7Qem26+oSSgpY7f2iQTuvcz/rsGpyZjSomMMO6lwYeQSA0CpWM7+aN7eGoSY/WV6wxJiIxXw==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@babel/runtime": "^7.23.2", + "@floating-ui/react-dom": "^2.0.2", + "@mui/types": "^7.2.8", + "@mui/utils": "^5.14.17", + "@popperjs/core": "^2.11.8", + "clsx": "^2.0.0", + "prop-types": "^15.8.1" }, "engines": { - "node": ">= 8" + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" + "node_modules/@mui/core-downloads-tracker": { + "version": "5.14.17", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.17.tgz", + "integrity": "sha512-eE0uxrpJAEL2ZXkeGLKg8HQDafsiXY+6eNpP4lcv3yIjFfGbU6Hj9/P7Adt8jpU+6JIhmxvILGj2r27pX+zdrQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, + "node_modules/@mui/icons-material": { + "version": "5.14.16", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.16.tgz", + "integrity": "sha512-wmOgslMEGvbHZjFLru8uH5E+pif/ciXAvKNw16q6joK6EWVWU5rDYWFknDaZhCvz8ZE/K8ZnJQ+lMG6GgHzXbg==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@babel/runtime": "^7.23.2" }, "engines": { - "node": ">= 8" + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.23", + "node_modules/@mui/material": { + "version": "5.14.17", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.17.tgz", + "integrity": "sha512-+y0VeOLWfEA4Z98We/UH6KCo8+f2HLZDK45FY+sJf8kSojLy3VntadKtC/u0itqnXXb1Pr4wKB2tSIBW02zY4Q==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/base": "5.0.0-beta.23", + "@mui/core-downloads-tracker": "^5.14.17", + "@mui/system": "^5.14.17", + "@mui/types": "^7.2.8", + "@mui/utils": "^5.14.17", + "@types/react-transition-group": "^4.4.8", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "5.14.17", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.17.tgz", + "integrity": "sha512-u4zxsCm9xmQrlhVPug+Ccrtsjv7o2+rehvrgHoh0siSguvVgVQq5O3Hh10+tp/KWQo2JR4/nCEwquSXgITS1+g==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/utils": "^5.14.17", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.14.17", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.17.tgz", + "integrity": "sha512-AqpVjBEA7wnBvKPW168bNlqB6EN7HxTjLOY7oi275AzD/b1C7V0wqELy6NWoJb2yya5sRf7ENf4iNi3+T5cOgw==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.14.17", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.17.tgz", + "integrity": "sha512-Ccz3XlbCqka6DnbHfpL3o3TfOeWQPR+ewvNAgm8gnS9M0yVMmzzmY6z0w/C1eebb+7ZP7IoLUj9vojg/GBaTPg==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/private-theming": "^5.14.17", + "@mui/styled-engine": "^5.14.17", + "@mui/types": "^7.2.8", + "@mui/utils": "^5.14.17", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.8.tgz", + "integrity": "sha512-9u0ji+xspl96WPqvrYJF/iO+1tQ1L5GTaDOeG3vCR893yy7VcWwRNiVMmPdPNpMDqx0WV1wtEW9OMwK9acWJzQ==", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.14.17", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.17.tgz", + "integrity": "sha512-yxnWgSS4J6DMFPw2Dof85yBkG02VTbEiqsikymMsnZnXDurtVGTIhlNuV24GTmFTuJMzEyTTU9UF+O7zaL8LEQ==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@types/prop-types": "^15.7.9", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.23", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", "dev": true }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@puppeteer/browsers": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -2758,7 +3098,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" } @@ -2767,7 +3107,7 @@ "version": "17.7.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, + "devOptional": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -2781,112 +3121,6 @@ "node": ">=12" } }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz", - "integrity": "sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.8", - "commondir": "^1.0.1", - "estree-walker": "^1.0.1", - "glob": "^7.1.2", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.8" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", - "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -2963,6 +3197,11 @@ "size-limit": "5.0.5" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -2997,9 +3236,9 @@ "dev": true }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz", + "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -3037,17 +3276,13 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } }, "node_modules/@types/graceful-fs": { "version": "4.1.6", @@ -3083,190 +3318,50 @@ } }, "node_modules/@types/jest": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.3.tgz", - "integrity": "sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==", + "version": "29.5.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.8.tgz", + "integrity": "sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==", "dev": true, "dependencies": { - "jest-diff": "^25.2.1", - "pretty-format": "^25.2.1" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "node_modules/@types/jest/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true }, - "node_modules/@types/jest/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "node_modules/@types/libsodium-wrappers": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz", + "integrity": "sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg==", + "dev": true + }, + "node_modules/@types/libsodium-wrappers-sumo": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.6.tgz", + "integrity": "sha512-86R2bYU/DKVWw3q2btxTUlFO3lYKLyodbCsxxSybNQonPzPxmQkNtKCYmkV0dWQ9ZQsGIOzNNPU9RjJUALjoEg==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "@types/libsodium-wrappers": "*" } }, - "node_modules/@types/jest/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "node_modules/@types/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@types/jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@types/jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@types/jest/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/libsodium-wrappers": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz", - "integrity": "sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg==", - "dev": true - }, - "node_modules/@types/libsodium-wrappers-sumo": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.6.tgz", - "integrity": "sha512-86R2bYU/DKVWw3q2btxTUlFO3lYKLyodbCsxxSybNQonPzPxmQkNtKCYmkV0dWQ9ZQsGIOzNNPU9RjJUALjoEg==", - "dev": true, - "dependencies": { - "@types/libsodium-wrappers": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", - "dev": true - }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dev": true, - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" + "@types/linkify-it": "*", + "@types/mdurl": "*" } }, "node_modules/@types/mdurl": { @@ -3275,51 +3370,77 @@ "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", "dev": true }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, "node_modules/@types/node": { "version": "18.17.15", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "devOptional": true }, "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, - "node_modules/@types/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", + "node_modules/@types/prompt-sync": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.3.tgz", + "integrity": "sha512-Ox77gCSx0YyeakGt/qfOZUSFNSSi+sh3ABoGOiCwiO2KODx492BJnUm9oIXS+AHJtqp12iM4RduY6viTJ9bYwA==", "dev": true }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "node_modules/@types/prop-types": { + "version": "15.7.10", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz", + "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==" + }, + "node_modules/@types/react": { + "version": "18.2.37", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz", + "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.15", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.15.tgz", + "integrity": "sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==", "dev": true, "dependencies": { - "@types/node": "*" + "@types/react": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.9.tgz", + "integrity": "sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz", + "integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==" + }, + "node_modules/@types/semver": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", + "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", + "dev": true + }, "node_modules/@types/stack-utils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", "dev": true }, - "node_modules/@types/text-encoding": { - "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@types/text-encoding/-/text-encoding-0.0.36.tgz", - "integrity": "sha512-LfATA7bH+MtAPlOshYgQ1M3n2r0TSB6Ns5ESvKYlVugkKErQg5oFbR2qO7XrKtNsrtzedDvTeqQfyTjdPJH7jw==", - "dev": true - }, "node_modules/@types/urlsafe-base64": { "version": "1.0.29", "resolved": "https://registry.npmjs.org/@types/urlsafe-base64/-/urlsafe-base64-1.0.29.tgz", @@ -3348,54 +3469,39 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, "optional": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz", + "integrity": "sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.10.0", + "@typescript-eslint/type-utils": "6.10.0", + "@typescript-eslint/utils": "6.10.0", + "@typescript-eslint/visitor-keys": "6.10.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3403,104 +3509,354 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "node_modules/@typescript-eslint/parser": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz", + "integrity": "sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==", "dev": true, "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" + "@typescript-eslint/scope-manager": "6.10.0", + "@typescript-eslint/types": "6.10.0", + "@typescript-eslint/typescript-estree": "6.10.0", + "@typescript-eslint/visitor-keys": "6.10.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz", + "integrity": "sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0" + "@typescript-eslint/types": "6.10.0", + "@typescript-eslint/visitor-keys": "6.10.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/@typescript-eslint/type-utils": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz", + "integrity": "sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@typescript-eslint/typescript-estree": "6.10.0", + "@typescript-eslint/utils": "6.10.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/@typescript-eslint/types": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz", + "integrity": "sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==", "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz", + "integrity": "sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==", "dev": true, "dependencies": { - "@xtuc/long": "4.2.2" - } - }, + "@typescript-eslint/types": "6.10.0", + "@typescript-eslint/visitor-keys": "6.10.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz", + "integrity": "sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.10.0", + "@typescript-eslint/types": "6.10.0", + "@typescript-eslint/typescript-estree": "6.10.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz", + "integrity": "sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.10.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, "node_modules/@webassemblyjs/utf8": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", @@ -3599,38 +3955,10 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "dependencies": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3639,15 +3967,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -3670,7 +3989,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "4" }, @@ -3712,15 +4031,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -3740,7 +4050,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -3797,15 +4106,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -3828,49 +4128,10 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -3889,104 +4150,6 @@ "node": ">=0.10.0" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -4013,15 +4176,6 @@ "util": "^0.10.4" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/assert/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -4046,20 +4200,15 @@ "node": ">=0.10.0" } }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "peer": true, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dependencies": { + "tslib": "^2.0.1" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/async-each": { @@ -4075,36 +4224,6 @@ ], "optional": true }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/asyncro": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz", - "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -4117,80 +4236,10 @@ "node": ">= 4.5.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "node_modules/axe-core": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", - "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" }, "node_modules/babel-jest": { "version": "29.7.0", @@ -4262,24 +4311,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/babel-plugin-annotate-pure-calls": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz", - "integrity": "sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA==", - "dev": true, - "peerDependencies": { - "@babel/core": "^6.0.0-0 || 7.x" - } - }, - "node_modules/babel-plugin-dev-expression": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.3.tgz", - "integrity": "sha512-rP5LK9QQTzCW61nVVzw88En1oK8t8gTsIeC6E61oelxNsU842yMjF0G1MxhvUpCkxCEIj7sE8/e5ieTheT//uw==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -4336,60 +4367,35 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">=10", + "npm": ">=6" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, + "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">=10" } }, - "node_modules/babel-plugin-transform-rename-import": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-rename-import/-/babel-plugin-transform-rename-import-2.3.0.tgz", - "integrity": "sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ==", - "dev": true - }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -4432,8 +4438,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base": { "version": "0.11.2", @@ -4484,13 +4489,12 @@ } ] }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" + "node_modules/basic-ftp": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", + "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "engines": { + "node": ">=10.0.0" } }, "node_modules/big.js": { @@ -4521,11 +4525,28 @@ "file-uri-to-path": "1.0.0" } }, + "node_modules/bip39": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", + "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", + "dependencies": { + "@noble/hashes": "^1.2.0" + } + }, + "node_modules/bip39-light": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bip39-light/-/bip39-light-1.0.7.tgz", + "integrity": "sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==", + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, + "devOptional": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -4536,7 +4557,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -4584,7 +4605,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4608,27 +4628,6 @@ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -4782,7 +4781,6 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, "engines": { "node": "*" } @@ -4799,18 +4797,6 @@ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -4898,7 +4884,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -4944,24 +4929,6 @@ } ] }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, "node_modules/catharsis": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", @@ -4995,12 +4962,6 @@ "node": ">=10" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -5032,7 +4993,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "devOptional": true }, "node_modules/chrome-trace-event": { "version": "1.0.3", @@ -5047,7 +5008,7 @@ "version": "0.4.7", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", - "dev": true, + "devOptional": true, "dependencies": { "mitt": "3.0.0" }, @@ -5080,7 +5041,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -5190,44 +5150,10 @@ "node": ">=0.10.0" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -5241,7 +5167,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -5256,7 +5181,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -5267,14 +5191,12 @@ "node_modules/cliui/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5287,13 +5209,38 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, + "node_modules/clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", + "dependencies": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-deep/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", "engines": { - "node": ">=0.8" + "node": ">=6" } }, "node_modules/co": { @@ -5329,7 +5276,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -5337,8 +5283,7 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/colord": { "version": "2.9.3", @@ -5346,18 +5291,6 @@ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", @@ -5394,8 +5327,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -5448,12 +5380,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -5507,19 +5433,6 @@ "node": ">=0.10.0" } }, - "node_modules/core-js-compat": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", - "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -5530,7 +5443,7 @@ "version": "8.1.3", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", - "dev": true, + "devOptional": true, "dependencies": { "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -5548,13 +5461,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "devOptional": true }, "node_modules/cosmiconfig/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "dependencies": { "argparse": "^2.0.1" }, @@ -5582,7 +5495,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -5595,7 +5507,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -5907,29 +5818,10 @@ "node": ">=8.0.0" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/cyclist": { "version": "1.0.2", @@ -5937,66 +5829,18 @@ "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", "dev": true }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", + "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - } - }, - "node_modules/data-urls/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "node": ">= 14" } }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -6009,15 +5853,6 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -6056,23 +5891,10 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", @@ -6102,22 +5924,17 @@ "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, "engines": { - "node": ">=6" + "node": ">= 14" } }, "node_modules/des.js": { @@ -6143,7 +5960,7 @@ "version": "0.0.1107588", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", - "dev": true + "devOptional": true }, "node_modules/diff": { "version": "4.0.2", @@ -6204,6 +6021,15 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -6240,21 +6066,6 @@ } ] }, - "node_modules/domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "dependencies": { - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, "node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", @@ -6338,16 +6149,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/ecdsa-secp256r1": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/ecdsa-secp256r1/-/ecdsa-secp256r1-1.3.3.tgz", @@ -6404,8 +6205,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/emojis-list": { "version": "3.0.0", @@ -6420,7 +6220,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "dependencies": { "once": "^1.4.0" } @@ -6488,19 +6287,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", @@ -6526,131 +6312,51 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", - "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", - "dev": true, - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/esbuild": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz", + "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==", "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "@esbuild/android-arm": "0.19.5", + "@esbuild/android-arm64": "0.19.5", + "@esbuild/android-x64": "0.19.5", + "@esbuild/darwin-arm64": "0.19.5", + "@esbuild/darwin-x64": "0.19.5", + "@esbuild/freebsd-arm64": "0.19.5", + "@esbuild/freebsd-x64": "0.19.5", + "@esbuild/linux-arm": "0.19.5", + "@esbuild/linux-arm64": "0.19.5", + "@esbuild/linux-ia32": "0.19.5", + "@esbuild/linux-loong64": "0.19.5", + "@esbuild/linux-mips64el": "0.19.5", + "@esbuild/linux-ppc64": "0.19.5", + "@esbuild/linux-riscv64": "0.19.5", + "@esbuild/linux-s390x": "0.19.5", + "@esbuild/linux-x64": "0.19.5", + "@esbuild/netbsd-x64": "0.19.5", + "@esbuild/openbsd-x64": "0.19.5", + "@esbuild/sunos-x64": "0.19.5", + "@esbuild/win32-arm64": "0.19.5", + "@esbuild/win32-ia32": "0.19.5", + "@esbuild/win32-x64": "0.19.5" } }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -6664,7 +6370,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -6673,382 +6378,205 @@ } }, "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dependencies": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "estraverse": "^5.2.0", + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4.0" + "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": ">= 0.8.0" + "node": ">=4.0" } }, "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", + "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.53.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, "bin": { - "eslint-config-prettier-check": "bin/cli.js" + "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "eslint": ">=7.0.0" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz", - "integrity": "sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" - }, "engines": { - "node": ">=4" + "node": ">=10" }, "peerDependencies": { - "eslint": ">=5.0.0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "node_modules/eslint-plugin-react-refresh": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", + "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" - }, - "engines": { - "node": ">=4" - }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" + "eslint": ">=7" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4.0" + "node": ">=8" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "node": ">=7.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-react/node_modules/estraverse": { + "node_modules/eslint/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -7057,174 +6585,96 @@ "node": ">=4.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.13.0" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint/node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "peer": true, "dependencies": { - "type-fest": "^0.20.2" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "peer": true, "engines": { "node": ">=10" }, @@ -7233,35 +6683,26 @@ } }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "peer": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -7321,17 +6762,10 @@ "node": ">=4.0" } }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7355,12 +6789,6 @@ "safe-buffer": "^5.1.1" } }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -7546,12 +6974,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -7565,20 +6987,6 @@ "node": ">=0.10.0" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -7635,7 +7043,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -7655,7 +7062,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -7666,26 +7072,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "node_modules/fast-glob": { "version": "3.3.1", @@ -7737,7 +7133,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, "dependencies": { "pend": "~1.2.0" } @@ -7748,36 +7143,11 @@ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "peer": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -7933,6 +7303,11 @@ "semver": "bin/semver" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -7947,13 +7322,12 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, - "peer": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, @@ -7966,7 +7340,6 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -7978,11 +7351,10 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true, - "peer": true + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true }, "node_modules/flush-write-stream": { "version": "1.1.1", @@ -8030,45 +7402,23 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "for-in": "^1.0.1" }, "engines": { - "node": ">= 0.12" + "node": ">=0.10.0" } }, "node_modules/fraction.js": { @@ -8145,21 +7495,19 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "devOptional": true }, "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=6 <7 || >=8" } }, "node_modules/fs-write-stream-atomic": { @@ -8213,8 +7561,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", @@ -8233,41 +7580,7 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -8282,7 +7595,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -8311,15 +7623,6 @@ "node": ">=8.0.0" } }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -8332,20 +7635,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, + "node_modules/get-uri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.0", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 14" } }, "node_modules/get-value": { @@ -8357,20 +7658,10 @@ "node": ">=0.10.0" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8407,27 +7698,6 @@ "node": ">=4" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -8448,36 +7718,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true, - "optional": true + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/gzip-size": { "version": "6.0.0", @@ -8494,34 +7744,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -8529,15 +7755,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -8583,21 +7800,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -8665,7 +7867,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -8696,40 +7897,46 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dependencies": { - "whatwg-encoding": "^1.0.1" + "react-is": "^16.7.0" } }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, + "node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "debug": "^4.3.4" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">= 14" } }, "node_modules/https-browserify": { @@ -8742,7 +7949,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, + "devOptional": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -8760,39 +7967,6 @@ "node": ">=10.17.0" } }, - "node_modules/humanize-duration": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz", - "integrity": "sha512-G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==", - "dev": true - }, - "node_modules/husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -8843,7 +8017,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8859,7 +8032,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -8902,7 +8074,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8913,239 +8084,53 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/integration-scripts": { + "resolved": "examples/integration-scripts", + "link": true + }, + "node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "kind-of": "^6.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -9165,21 +8150,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", @@ -9194,22 +8164,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -9231,23 +8185,10 @@ "node": ">=0.10.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -9261,21 +8202,6 @@ "node": ">=6" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -9288,42 +8214,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -9333,26 +8223,19 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "dependencies": { "isobject": "^3.0.1" }, @@ -9360,52 +8243,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -9418,98 +8255,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=0.10.0" } }, "node_modules/is-wsl": { @@ -9521,12 +8273,6 @@ "node": ">=4" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -9537,17 +8283,10 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -9647,18 +8386,6 @@ "node": ">=8" } }, - "node_modules/iterator.prototype": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", - "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.3" - } - }, "node_modules/javascript-natural-sort": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", @@ -10101,94 +8828,96 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-environment-jsdom": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", - "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "jsdom": "^15.2.1" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 8.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "node_modules/jest-fetch-mock": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", + "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" + "cross-fetch": "^3.0.4", + "promise-polyfill": "^8.1.3" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" - }, "engines": { - "node": ">= 8.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">= 8.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/jest-environment-jsdom/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -10203,20 +8932,23 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/color-convert": { + "node_modules/jest-matcher-utils/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -10228,366 +8960,398 @@ "node": ">=7.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/color-name": { + "node_modules/jest-matcher-utils/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-environment-jsdom/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", "slash": "^3.0.0", - "stack-utils": "^1.0.1" + "stack-utils": "^2.0.3" }, "engines": { - "node": ">= 8.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" + "node": ">=8" }, - "engines": { - "node": ">= 8.3" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-environment-jsdom/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "escape-string-regexp": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/jest-environment-node": { + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-mock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.7.0", "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-fetch-mock": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", - "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, - "dependencies": { - "cross-fetch": "^3.0.4", - "promise-polyfill": "^8.1.3" + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/jest-get-type": { + "node_modules/jest-regex-util": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-haste-map": { + "node_modules/jest-resolve": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", + "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" } }, - "node_modules/jest-jasmine2": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", - "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^25.5.0", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "co": "^4.6.0", - "expect": "^25.5.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^25.5.0", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0", - "throat": "^5.0.0" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">= 8.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-jasmine2/node_modules/@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8.3" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8.3" + "node": ">=7.0.0" } }, - "node_modules/jest-jasmine2/node_modules/@jest/globals": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", - "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/types": "^25.5.0", - "expect": "^25.5.0" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">= 8.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-jasmine2/node_modules/@jest/source-map": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", - "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8.3" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/@jest/test-sequencer": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", - "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@jest/test-result": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8.3" + "node": ">=7.0.0" } }, - "node_modules/jest-jasmine2/node_modules/@jest/transform": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", - "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^25.5.0", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^3.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-regex-util": "^25.2.6", - "jest-util": "^25.5.0", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "realpath-native": "^2.0.0", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "strip-bom": "^4.0.0" }, "engines": { - "node": ">= 8.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-jasmine2/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8.3" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -10602,105 +9366,122 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/babel-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", - "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8.3" + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/babel-plugin-jest-hoist": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", - "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__traverse": "^7.0.6" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8.3" + "node": ">=7.0.0" } }, - "node_modules/jest-jasmine2/node_modules/babel-preset-current-node-syntax": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", - "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">=10" } }, - "node_modules/jest-jasmine2/node_modules/babel-preset-jest": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", - "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^25.5.0", - "babel-preset-current-node-syntax": "^0.1.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 8.3" + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/color-convert": { + "node_modules/jest-util/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -10712,5746 +9493,788 @@ "node": ">=7.0.0" } }, - "node_modules/jest-jasmine2/node_modules/color-name": { + "node_modules/jest-util/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-jasmine2/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 8.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-jasmine2/node_modules/jest-config": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", - "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.5.4", - "@jest/types": "^25.5.0", - "babel-jest": "^25.5.1", - "chalk": "^3.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^25.5.0", - "jest-environment-node": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-jasmine2": "^25.5.4", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "micromatch": "^4.0.2", - "pretty-format": "^25.5.0", - "realpath-native": "^2.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8.3" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-jasmine2/node_modules/jest-docblock": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", - "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "detect-newline": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/jest-each": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", - "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8.3" + "node": ">=7.0.0" } }, - "node_modules/jest-jasmine2/node_modules/jest-environment-node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", - "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "semver": "^6.3.0" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "engines": { - "node": ">= 8.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-jasmine2/node_modules/jest-haste-map": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", - "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "@types/graceful-fs": "^4.1.2", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-serializer": "^25.5.0", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7", - "which": "^2.0.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8.3" + "node": ">=8" }, - "optionalDependencies": { - "fsevents": "^2.1.2" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/jest-leak-detector": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", - "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8.3" + "node": ">=7.0.0" } }, - "node_modules/jest-jasmine2/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">= 8.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-jasmine2/node_modules/jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 8.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", - "dev": true, - "engines": { - "node": ">= 8.3" - } + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "node_modules/jest-jasmine2/node_modules/jest-resolve": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", - "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.1", - "read-pkg-up": "^7.0.1", - "realpath-native": "^2.0.0", - "resolve": "^1.17.0", - "slash": "^3.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">= 8.3" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jest-jasmine2/node_modules/jest-runner": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", - "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", "dev": true, "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-docblock": "^25.3.0", - "jest-haste-map": "^25.5.1", - "jest-jasmine2": "^25.5.4", - "jest-leak-detector": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "jest-runtime": "^25.5.4", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-runtime": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", - "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/globals": "^25.5.2", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 8.3" + "xmlcreate": "^2.0.4" } }, - "node_modules/jest-jasmine2/node_modules/jest-snapshot": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", - "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", + "node_modules/jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", "dev": true, "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/prettier": "^1.19.0", - "chalk": "^3.0.0", - "expect": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "make-dir": "^3.0.0", - "natural-compare": "^1.4.0", - "pretty-format": "^25.5.0", - "semver": "^6.3.0" + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" }, "engines": { - "node": ">= 8.3" + "node": ">=12.0.0" } }, - "node_modules/jest-jasmine2/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=8" } }, - "node_modules/jest-jasmine2/node_modules/jest-validate": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", - "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "leven": "^3.1.0", - "pretty-format": "^25.5.0" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">= 8.3" + "node": ">=4" } }, - "node_modules/jest-jasmine2/node_modules/jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">= 8.3" + "node": ">=6" } }, - "node_modules/jest-jasmine2/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "json-buffer": "3.0.1" } }, - "node_modules/jest-jasmine2/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/jest-jasmine2/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.9" + } }, - "node_modules/jest-jasmine2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=6" } }, - "node_modules/jest-jasmine2/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "node_modules/last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", "dev": true, "dependencies": { - "escape-string-regexp": "^2.0.0" - }, + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-jasmine2/node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "node_modules/jest-jasmine2/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/jest-jasmine2/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, + "node_modules/libsodium-sumo": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.11.tgz", + "integrity": "sha512-bY+7ph7xpk51Ez2GbE10lXAQ5sJma6NghcIDaSPbM/G9elfrjLa0COHl/7P6Wb/JizQzl5UQontOOP1z0VwbLA==" + }, + "node_modules/libsodium-wrappers-sumo": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.11.tgz", + "integrity": "sha512-DGypHOmJbB1nZn89KIfGOAkDgfv5N6SBGC3Qvmy/On0P0WD1JQvNRS/e3UL3aFF+xC0m+MYz5M+MnRnK2HMrKQ==", "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "libsodium-sumo": "^0.7.11" } }, - "node_modules/jest-jasmine2/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/jest-jasmine2/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" + "uc.micro": "^1.0.1" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4.3.0 <5.0.0 || >=5.10" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.9.0" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-serializer": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", - "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watch-typeahead": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.5.0.tgz", - "integrity": "sha512-4r36w9vU8+rdg48hj0Z7TvcSqVP6Ao8dk04grlHQNgduyCB0SqrI0xWIl85ZhXrzYvxQ0N5H+rRLAejkQzEHeQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-regex-util": "^25.2.1", - "jest-watcher": "^25.2.4", - "slash": "^3.0.0", - "string-length": "^3.1.0", - "strip-ansi": "^6.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", - "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watch-typeahead/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", - "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", - "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-util": "^25.5.0", - "string-length": "^3.1.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/jest-watch-typeahead/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "dev": true, - "dependencies": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jpjs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jpjs/-/jpjs-1.2.1.tgz", - "integrity": "sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dev": true, - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/jsdoc": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", - "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", - "dev": true, - "dependencies": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/jsdom/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "peer": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", - "dev": true, - "peer": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "dependencies": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libsodium-sumo": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.11.tgz", - "integrity": "sha512-bY+7ph7xpk51Ez2GbE10lXAQ5sJma6NghcIDaSPbM/G9elfrjLa0COHl/7P6Wb/JizQzl5UQontOOP1z0VwbLA==" - }, - "node_modules/libsodium-wrappers-sumo": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.11.tgz", - "integrity": "sha512-DGypHOmJbB1nZn89KIfGOAkDgfv5N6SBGC3Qvmy/On0P0WD1JQvNRS/e3UL3aFF+xC0m+MYz5M+MnRnK2HMrKQ==", - "dependencies": { - "libsodium-sumo": "^0.7.11" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.invokemap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", - "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.pullall": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", - "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", - "dev": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "peer": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/lolex/node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "dev": true, - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mathjs": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", - "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", - "dependencies": { - "@babel/runtime": "^7.22.6", - "complex.js": "^2.1.1", - "decimal.js": "^10.4.3", - "escape-latex": "^1.2.0", - "fraction.js": "4.3.4", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^4.1.0" - }, - "bin": { - "mathjs": "bin/cli.js" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mico-spinner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mico-spinner/-/mico-spinner-1.4.0.tgz", - "integrity": "sha512-6fuiQX9qRMJACVlCX6pkbV3KnjSbobr10RLB+0CNk2Z+uKPulL7wMKZSoZEiLCOvzTQc0vghjKXKVGpiMIOABw==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.0" - } - }, - "node_modules/mico-spinner/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minami": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minami/-/minami-1.2.3.tgz", - "integrity": "sha512-3f2QqqbUC1usVux0FkQMFYB73yd9JIxmHSn1dWQacizL6hOUaNu6mA3KxZ9SfiCc4qgcgq+5XP59+hP7URa1Dw==", - "dev": true - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/move-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optimize-css-assets-webpack-plugin": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz", - "integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==", - "dev": true, - "dependencies": { - "cssnano": "^5.0.2", - "last-call-webpack-plugin": "^3.0.0", - "postcss": "^8.2.1" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "peer": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parallel-transform/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/parallel-transform/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/parallel-transform/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "optional": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "node_modules/pnp-webpack-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", - "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", - "dev": true, - "dependencies": { - "ts-pnp": "^1.1.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/progress-estimator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/progress-estimator/-/progress-estimator-0.2.2.tgz", - "integrity": "sha512-GF76Ac02MTJD6o2nMNtmtOFjwWCnHcvXyn5HOWPQnEMO8OTLw7LAvNmrwe8LmdsB+eZhwUu9fX/c9iQnBxWaFA==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "cli-spinners": "^1.3.1", - "humanize-duration": "^3.15.3", - "log-update": "^2.3.0" - } - }, - "node_modules/progress-estimator/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/progress-estimator/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress-estimator/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-polyfill": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", - "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", - "dev": true - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", - "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@puppeteer/browsers": "0.5.0", - "cosmiconfig": "8.1.3", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.11.1" - } - }, - "node_modules/puppeteer-core": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", - "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", - "dev": true, - "dependencies": { - "@puppeteer/browsers": "0.5.0", - "chromium-bidi": "0.4.7", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.13.0" - }, - "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/puppeteer-core/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/realpath-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", - "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rollup": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "bin": { - "rollup": "dist/bin/rollup" - } - }, - "node_modules/rollup-plugin-sourcemaps": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", - "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.9", - "source-map-resolve": "^0.6.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "@types/node": ">=10.0.0", - "rollup": ">=0.31.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/rollup-plugin-terser": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", - "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.5.5", - "jest-worker": "^24.9.0", - "rollup-pluginutils": "^2.8.2", - "serialize-javascript": "^4.0.0", - "terser": "^4.6.2" - }, - "peerDependencies": { - "rollup": ">=0.66.0 <3" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/rollup-plugin-typescript2": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz", - "integrity": "sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.17.0", - "tslib": "2.0.1" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "node_modules/rollup-plugin-typescript2/node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true }, - "node_modules/rollup-plugin-typescript2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "node_modules/lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", + "dev": true }, - "node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true }, - "node_modules/rollup-plugin-typescript2/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } + "node_modules/lodash.invokemap": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", + "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", + "dev": true }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } + "node_modules/lodash.pullall": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", + "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", + "dev": true }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { - "aproba": "^1.1.1" + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "yallist": "^3.0.2" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" + "semver": "^7.5.3" }, "engines": { - "node": ">=0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "node_modules/make-dir/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" + "lru-cache": "^6.0.0" }, "bin": { - "sane": "src/cli.js" + "semver": "bin/semver.js" }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" } }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "tmpl": "1.0.5" } }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "object-visit": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" }, - "engines": { - "node": ">=4.8" + "bin": { + "markdown-it": "bin/markdown-it.js" } }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" } }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "bin": { + "marked": "bin/marked.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, + "node_modules/mathjs": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.0.tgz", + "integrity": "sha512-i1Ao/tv1mlNd09XlOMOUu3KMySX3S0jhHNfDPzh0sCnPf1i62x6RjxhLwZ9ytmVSs0OdhF3moI4O84VSEjmUFw==", "dependencies": { - "is-extendable": "^0.1.0" + "@babel/runtime": "^7.22.6", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "4.3.4", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.0" + }, + "bin": { + "mathjs": "bin/cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", "dev": true, "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, - "node_modules/sane/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/memory-fs/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/memory-fs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/memory-fs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/merge-deep": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", + "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", + "dependencies": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "node_modules/merge-deep/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -16459,510 +10282,553 @@ "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/mico-spinner": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mico-spinner/-/mico-spinner-1.4.0.tgz", + "integrity": "sha512-6fuiQX9qRMJACVlCX6pkbV3KnjSbobr10RLB+0CNk2Z+uKPulL7wMKZSoZEiLCOvzTQc0vghjKXKVGpiMIOABw==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "picocolors": "^0.2.0" } }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "node_modules/mico-spinner/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "remove-trailing-separator": "^1.0.1" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "dependencies": { - "path-key": "^2.0.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" }, - "engines": { - "node": ">=4" + "bin": { + "miller-rabin": "bin/miller-rabin" } }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } + "node_modules/minami": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minami/-/minami-1.2.3.tgz", + "integrity": "sha512-3f2QqqbUC1usVux0FkQMFYB73yd9JIxmHSn1dWQacizL6hOUaNu6mA3KxZ9SfiCc4qgcgq+5XP59+hP7URa1Dw==", + "dev": true }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "shebang-regex": "^1.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" }, - "node_modules/saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "dependencies": { - "xmlchars": "^2.1.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, + "node_modules/mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=0.10.0" } }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/mixin-object/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", "dev": true, "dependencies": { - "randombytes": "^2.1.0" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "node_modules/move-concurrently/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "minimist": "^1.2.6" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { - "sha.js": "bin.js" + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "engines": { - "node": ">=8" + "node": ">= 0.4.0" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=4" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true }, - "node_modules/shiki": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", - "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/node-libs-browser/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "node_modules/node-libs-browser/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "node_modules/node-libs-browser/node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "node_modules/node-libs-browser/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/size-limit": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-5.0.5.tgz", - "integrity": "sha512-DtblS3Qc1SmtEtAYE6RGmg1UFdIzz2aWhlnzbBc3FYc0XMsTVT0kKB40DMIZ/yU5JztkMetdqB5Q5Pow/iVazg==", + "node_modules/node-libs-browser/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "bytes-iec": "^3.1.1", - "chokidar": "^3.5.2", - "ci-job-number": "^1.2.2", - "globby": "^11.0.4", - "lilconfig": "^2.0.3", - "mico-spinner": "^1.3.0", - "picocolors": "^0.1.0" - }, - "bin": { - "size-limit": "bin.js" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "safe-buffer": "~5.1.0" } }, - "node_modules/size-limit/node_modules/picocolors": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.1.0.tgz", - "integrity": "sha512-W+3MFREUEjPt0MnYaR51VkLw8tY8UubrLOqcBmaQocZhM34hQhjg50FQ0c6f0UldPlecieoqUqI6ToM/dNblDw==", + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "node_modules/slash": { + "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "path-key": "^3.0.0" }, "engines": { "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "peer": true, "dependencies": { - "color-name": "~1.1.4" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "dev": true, "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "dev": true, "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-util/node_modules/kind-of": { + "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", @@ -16974,719 +10840,853 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "isobject": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "wrappy": "1" } }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optimize-css-assets-webpack-plugin": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz", + "integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "cssnano": "^5.0.2", + "last-call-webpack-plugin": "^3.0.0", + "postcss": "^8.2.1" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "webpack": "^4.0.0" } }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/snapdragon/node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, + "node_modules/pac-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true + "node_modules/pac-resolver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", + "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "dependencies": { + "degenerator": "^5.0.0", + "ip": "^1.1.8", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "node_modules/parallel-transform/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/parallel-transform/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "node_modules/parallel-transform/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "node_modules/parallel-transform/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "extend-shallow": "^3.0.0" + "safe-buffer": "~5.1.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "engines": { + "node": ">=8" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true, + "optional": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dependencies": { - "figgy-pudding": "^3.5.1" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" + "engines": { + "node": ">=8.6" }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "find-up": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "ts-pnp": "^1.1.6" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/postcss": { + "version": "8.4.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", + "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "is-buffer": "^1.1.5" + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-browserify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-browserify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/stream-http/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/stream-http/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-http/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dev": true, "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", - "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4" + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "engines": { + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/strip-bom": { + "node_modules/postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/structured-headers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.5.0.tgz", - "integrity": "sha512-oLnmXSsjhud+LxRJpvokwP8ImEB2wTg8sg30buwfVViKMuluTv3BlOJHUX9VW9pJ2nQOxmx87Z0kB86O4cphag==" + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "postcss": "^8.2.15" } }, - "node_modules/stylehacks": { + "node_modules/postcss-normalize-unicode": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, "dependencies": { "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -17695,2871 +11695,2492 @@ "postcss": "^8.2.15" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dev": true, "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dev": true, - "peer": true, "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" }, "engines": { - "node": ">=10.0.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dev": true, - "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "postcss-value-parser": "^4.2.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" + "node": ">= 0.8.0" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">= 4" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/text-encoding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "deprecated": "no longer maintained" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" } }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, + "node_modules/promise-polyfill": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", + "dev": true + }, + "node_modules/prompt-sync": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", + "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "strip-ansi": "^5.0.0" } }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "node_modules/prompt-sync/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + "node_modules/prompt-sync/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "safe-buffer": "~5.1.0" + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "dependencies": { - "setimmediate": "^1.0.4" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">=0.6.0" + "node": ">= 6" } }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/proxy-agent": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dependencies": { - "os-tmpdir": "~1.0.2" + "debug": "^4.3.4" }, "engines": { - "node": ">=0.6.0" + "node": ">= 14" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } }, - "node_modules/to-arraybuffer": { + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/prr": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "devOptional": true, + "hasInstallScript": true, "dependencies": { - "is-number": "^7.0.0" + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "node_modules/puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "devOptional": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" }, "engines": { - "node": ">=8.0" + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/puppeteer-core/node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "devOptional": true, + "dependencies": { + "node-fetch": "2.6.7" } }, - "node_modules/tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, + "node_modules/puppeteer-core/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "devOptional": true, "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=6" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/ts-mockito": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", - "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", - "dev": true, + "node_modules/puppeteer-extra": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/puppeteer-extra/-/puppeteer-extra-3.3.6.tgz", + "integrity": "sha512-rsLBE/6mMxAjlLd06LuGacrukP2bqbzKCLzV1vrhHFavqQE/taQ2UXv3H5P0Ls7nsrASa+6x3bDbXHpqMwq+7A==", "dependencies": { - "lodash": "^4.17.5" + "@types/debug": "^4.1.0", + "debug": "^4.1.1", + "deepmerge": "^4.2.2" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "@types/puppeteer": "*", + "puppeteer": "*", + "puppeteer-core": "*" + }, + "peerDependenciesMeta": { + "@types/puppeteer": { + "optional": true + }, + "puppeteer": { + "optional": true + }, + "puppeteer-core": { + "optional": true + } } }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, + "node_modules/puppeteer-extra-plugin": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin/-/puppeteer-extra-plugin-3.2.3.tgz", + "integrity": "sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==", "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" + "@types/debug": "^4.1.0", + "debug": "^4.1.1", + "merge-deep": "^3.0.1" }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" + "engines": { + "node": ">=9.11.2" }, "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "playwright-extra": "*", + "puppeteer-extra": "*" }, "peerDependenciesMeta": { - "@swc/core": { + "playwright-extra": { "optional": true }, - "@swc/wasm": { + "puppeteer-extra": { "optional": true } } }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "node_modules/puppeteer-extra-plugin-stealth": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.11.2.tgz", + "integrity": "sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==", + "dependencies": { + "debug": "^4.1.1", + "puppeteer-extra-plugin": "^3.2.3", + "puppeteer-extra-plugin-user-preferences": "^2.4.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } } }, - "node_modules/ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", - "dev": true, + "node_modules/puppeteer-extra-plugin-user-data-dir": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.1.tgz", + "integrity": "sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^10.0.0", + "puppeteer-extra-plugin": "^3.2.3", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" }, "peerDependenciesMeta": { - "typescript": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { "optional": true } } }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, + "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, + "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "minimist": "^1.2.0" + "universalify": "^2.0.0" }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/tsdx": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/tsdx/-/tsdx-0.14.1.tgz", - "integrity": "sha512-keHmFdCL2kx5nYFlBdbE3639HQ2v9iGedAFAajobrUTH2wfX0nLPdDhbHv+GHLQZqf0c5ur1XteE8ek/+Eyj5w==", - "dev": true, - "dependencies": { - "@babel/core": "^7.4.4", - "@babel/helper-module-imports": "^7.0.0", - "@babel/parser": "^7.11.5", - "@babel/plugin-proposal-class-properties": "^7.4.4", - "@babel/preset-env": "^7.11.0", - "@babel/traverse": "^7.11.5", - "@rollup/plugin-babel": "^5.1.0", - "@rollup/plugin-commonjs": "^11.0.0", - "@rollup/plugin-json": "^4.0.0", - "@rollup/plugin-node-resolve": "^9.0.0", - "@rollup/plugin-replace": "^2.2.1", - "@types/jest": "^25.2.1", - "@typescript-eslint/eslint-plugin": "^2.12.0", - "@typescript-eslint/parser": "^2.12.0", - "ansi-escapes": "^4.2.1", - "asyncro": "^3.0.0", - "babel-eslint": "^10.0.3", - "babel-plugin-annotate-pure-calls": "^0.4.0", - "babel-plugin-dev-expression": "^0.2.1", - "babel-plugin-macros": "^2.6.1", - "babel-plugin-polyfill-regenerator": "^0.0.4", - "babel-plugin-transform-rename-import": "^2.3.0", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "enquirer": "^2.3.4", - "eslint": "^6.1.0", - "eslint-config-prettier": "^6.0.0", - "eslint-config-react-app": "^5.2.1", - "eslint-plugin-flowtype": "^3.13.0", - "eslint-plugin-import": "^2.18.2", - "eslint-plugin-jsx-a11y": "^6.2.3", - "eslint-plugin-prettier": "^3.1.0", - "eslint-plugin-react": "^7.14.3", - "eslint-plugin-react-hooks": "^2.2.0", - "execa": "^4.0.3", - "fs-extra": "^9.0.0", - "jest": "^25.3.0", - "jest-watch-typeahead": "^0.5.0", - "jpjs": "^1.2.1", - "lodash.merge": "^4.6.2", - "ora": "^4.0.3", - "pascal-case": "^3.1.1", - "prettier": "^1.19.1", - "progress-estimator": "^0.2.2", - "regenerator-runtime": "^0.13.7", - "rollup": "^1.32.1", - "rollup-plugin-sourcemaps": "^0.6.2", - "rollup-plugin-terser": "^5.1.2", - "rollup-plugin-typescript2": "^0.27.3", - "sade": "^1.4.2", - "semver": "^7.1.1", - "shelljs": "^0.8.3", - "tiny-glob": "^0.2.6", - "ts-jest": "^25.3.1", - "tslib": "^1.9.3", - "typescript": "^3.7.3" + "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" }, "bin": { - "tsdx": "dist/index.js" + "rimraf": "bin.js" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { - "node": ">=10" + "node": ">= 10.0.0" } }, - "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.0.3.tgz", - "integrity": "sha512-dULDd/APiP4JowYDAMosecKOi/1v+UId99qhBGiO3myM29KtAVKS/R3x3OJJNBR0FeYB1BcYb2dCwkhqvxWXXQ==", - "dev": true, + "node_modules/puppeteer-extra-plugin-user-preferences": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.1.tgz", + "integrity": "sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==", "dependencies": { - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/traverse": "^7.11.5", "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "deepmerge": "^4.2.2", + "puppeteer-extra-plugin": "^3.2.3", + "puppeteer-extra-plugin-user-data-dir": "^2.4.1" + }, + "engines": { + "node": ">=8" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } } }, - "node_modules/tsdx/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] }, - "node_modules/tsdx/node_modules/@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, "engines": { - "node": ">= 8.3" + "node": ">=0.4.x" } }, - "node_modules/tsdx/node_modules/@jest/console/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "^5.1.0" } }, - "node_modules/tsdx/node_modules/@jest/core": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz", - "integrity": "sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==", + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "dependencies": { - "@jest/console": "^25.5.0", - "@jest/reporters": "^25.5.1", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^25.5.0", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-resolve-dependencies": "^25.5.4", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "jest-watcher": "^25.5.0", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "realpath-native": "^2.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 8.3" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "node_modules/tsdx/node_modules/@jest/core/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "loose-envify": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "react": "^18.2.0" } }, - "node_modules/tsdx/node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, - "node_modules/tsdx/node_modules/@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true, - "dependencies": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", - "dev": true, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "dependencies": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" }, - "engines": { - "node": ">= 8.3" + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" } }, - "node_modules/tsdx/node_modules/@jest/globals": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", - "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", - "dev": true, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/types": "^25.5.0", - "expect": "^25.5.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">= 8.3" + "node": ">= 6" } }, - "node_modules/tsdx/node_modules/@jest/reporters": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz", - "integrity": "sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^25.5.1", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^3.1.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^4.1.3" + "picomatch": "^2.2.1" }, "engines": { - "node": ">= 8.3" - }, - "optionalDependencies": { - "node-notifier": "^6.0.0" + "node": ">=8.10.0" } }, - "node_modules/tsdx/node_modules/@jest/reporters/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/@jest/source-map": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", - "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 8.3" - } + "optional": true }, - "node_modules/tsdx/node_modules/@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, - "dependencies": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/@jest/test-sequencer": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", - "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.10" } }, - "node_modules/tsdx/node_modules/@jest/transform": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", - "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^25.5.0", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^3.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-regex-util": "^25.2.6", - "jest-util": "^25.5.0", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/@jest/transform/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" + "lodash": "^4.17.21" } }, - "node_modules/tsdx/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">= 8.3" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tsdx/node_modules/@jest/types/node_modules/chalk": { + "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/tsdx/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "engines": { + "node": ">=8" } }, - "node_modules/tsdx/node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, - "node_modules/tsdx/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "engines": { + "node": ">=10" } }, - "node_modules/tsdx/node_modules/@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^2.0.0", - "eslint": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=0.12" } }, - "node_modules/tsdx/node_modules/@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "glob": "^7.1.3" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tsdx/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/tsdx/node_modules/babel-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", - "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", - "dev": true, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dependencies": { - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/tsdx/node_modules/babel-jest/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=8" + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/tsdx/node_modules/babel-plugin-jest-hoist": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", - "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 8.3" + "queue-microtask": "^1.2.2" } }, - "node_modules/tsdx/node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", "dev": true, "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" + "aproba": "^1.1.1" } }, - "node_modules/tsdx/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.0.4.tgz", - "integrity": "sha512-+/uCzO9JTYVZVGCpZpVAQkgPGt2zkR0VYiZvJ4aVoCe4ccgpKvNQqcjzAgQzSsjK64Jhc5hvrCR3l0087BevkA==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.0.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "ret": "~0.1.10" } }, - "node_modules/tsdx/node_modules/babel-preset-current-node-syntax": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", - "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", - "dev": true, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "loose-envify": "^1.1.0" } }, - "node_modules/tsdx/node_modules/babel-preset-jest": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", - "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^25.5.0", - "babel-preset-current-node-syntax": "^0.1.2" - }, - "engines": { - "node": ">= 8.3" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/tsdx/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, "engines": { - "node": ">=10" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/tsdx/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/scripts": { + "resolved": "examples/scripts", + "link": true + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/tsdx/node_modules/cliui": { + "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/tsdx/node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "randombytes": "^2.1.0" } }, - "node_modules/tsdx/node_modules/color-convert": { + "node_modules/set-value": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/tsdx/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/tsdx/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true }, - "node_modules/tsdx/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, "bin": { - "eslint": "bin/eslint.js" + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", + "dependencies": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/eslint-config-react-app": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", - "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", - "dev": true, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", "dependencies": { - "confusing-browser-globals": "^1.0.9" + "is-buffer": "^1.0.2" }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "2.x", - "@typescript-eslint/parser": "2.x", - "babel-eslint": "10.x", - "eslint": "6.x", - "eslint-plugin-flowtype": "3.x || 4.x", - "eslint-plugin-import": "2.x", - "eslint-plugin-jsx-a11y": "6.x", - "eslint-plugin-react": "7.x", - "eslint-plugin-react-hooks": "1.x || 2.x" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/eslint-plugin-react-hooks": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz", - "integrity": "sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==", - "dev": true, + "node_modules/shallow-clone/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", "engines": { - "node": ">=7" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/tsdx/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/tsdx/node_modules/eslint/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/shiki": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", + "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" } }, - "node_modules/tsdx/node_modules/eslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tsdx/node_modules/eslint/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/signify-react-ts": { + "resolved": "examples/signify-react-ts", + "link": true + }, + "node_modules/signify-ts": { + "resolved": "", + "link": true + }, + "node_modules/sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" } }, - "node_modules/tsdx/node_modules/eslint/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/size-limit": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-5.0.5.tgz", + "integrity": "sha512-DtblS3Qc1SmtEtAYE6RGmg1UFdIzz2aWhlnzbBc3FYc0XMsTVT0kKB40DMIZ/yU5JztkMetdqB5Q5Pow/iVazg==", "dev": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "bytes-iec": "^3.1.1", + "chokidar": "^3.5.2", + "ci-job-number": "^1.2.2", + "globby": "^11.0.4", + "lilconfig": "^2.0.3", + "mico-spinner": "^1.3.0", + "picocolors": "^0.1.0" + }, + "bin": { + "size-limit": "bin.js" }, "engines": { - "node": ">=4.8" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/tsdx/node_modules/eslint/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } + "node_modules/size-limit/node_modules/picocolors": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.1.0.tgz", + "integrity": "sha512-W+3MFREUEjPt0MnYaR51VkLw8tY8UubrLOqcBmaQocZhM34hQhjg50FQ0c6f0UldPlecieoqUqI6ToM/dNblDw==", + "dev": true }, - "node_modules/tsdx/node_modules/eslint/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/tsdx/node_modules/eslint/node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/tsdx/node_modules/eslint/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/tsdx/node_modules/eslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/eslint/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "dependencies": { - "isexe": "^2.0.0" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "is-descriptor": "^1.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "kind-of": "^3.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" + "ms": "2.0.0" } }, - "node_modules/tsdx/node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/tsdx/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "pump": "^3.0.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" + "kind-of": "^3.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsdx/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsdx/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, "engines": { - "node": ">=8.12.0" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "optional": true, "dependencies": { - "is-docker": "^2.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz", - "integrity": "sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==", + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, - "dependencies": { - "@jest/core": "^25.5.4", - "import-local": "^3.0.2", - "jest-cli": "^25.5.4" - }, - "bin": { - "jest": "bin/jest.js" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-changed-files": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", - "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "execa": "^3.2.0", - "throat": "^5.0.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-changed-files/node_modules/execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "node_modules/snapdragon/node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": "^8.12.0 || >=9.7.0" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, - "node_modules/tsdx/node_modules/jest-cli": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz", - "integrity": "sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==", - "dev": true, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dependencies": { - "@jest/core": "^25.5.4", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^25.5.4", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "prompts": "^2.0.1", - "realpath-native": "^2.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest": "bin/jest.js" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 8.3" + "node": ">= 10.13.0", + "npm": ">= 3.0.0" } }, - "node_modules/tsdx/node_modules/jest-cli/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, + "node_modules/socks-proxy-agent": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/tsdx/node_modules/jest-config": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", - "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", - "dev": true, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.5.4", - "@jest/types": "^25.5.0", - "babel-jest": "^25.5.1", - "chalk": "^3.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^25.5.0", - "jest-environment-node": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-jasmine2": "^25.5.4", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "micromatch": "^4.0.2", - "pretty-format": "^25.5.0", - "realpath-native": "^2.0.0" + "debug": "^4.3.4" }, "engines": { - "node": ">= 8.3" + "node": ">= 14" } }, - "node_modules/tsdx/node_modules/jest-config/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/socks/node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-diff/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/tsdx/node_modules/jest-docblock": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", - "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "dependencies": { - "detect-newline": "^3.0.0" + "extend-shallow": "^3.0.0" }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-environment-node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", - "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.3" + "figgy-pudding": "^3.5.1" } }, - "node_modules/tsdx/node_modules/jest-environment-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/tsdx/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { - "node": ">= 8.3" + "node": ">=8" } }, - "node_modules/tsdx/node_modules/jest-haste-map": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", - "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "@types/graceful-fs": "^4.1.2", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-serializer": "^25.5.0", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7", - "which": "^2.0.2" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "engines": { - "node": ">= 8.3" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-leak-detector": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", - "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "dependencies": { - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "dev": true, "dependencies": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-message-util/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/jest-resolve": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", - "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.1", - "read-pkg-up": "^7.0.1", - "realpath-native": "^2.0.0", - "resolve": "^1.17.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, - "node_modules/tsdx/node_modules/jest-resolve-dependencies": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", - "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", + "node_modules/stream-browserify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-snapshot": "^25.5.1" - }, - "engines": { - "node": ">= 8.3" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/tsdx/node_modules/jest-resolve/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/stream-browserify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.1.0" } }, - "node_modules/tsdx/node_modules/jest-runner": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", - "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-docblock": "^25.3.0", - "jest-haste-map": "^25.5.1", - "jest-jasmine2": "^25.5.4", - "jest-leak-detector": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "jest-runtime": "^25.5.4", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 8.3" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, - "node_modules/tsdx/node_modules/jest-runner/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, - "node_modules/tsdx/node_modules/jest-runtime": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", - "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", + "node_modules/stream-http/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/globals": "^25.5.2", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 8.3" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/tsdx/node_modules/jest-runtime/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/stream-http/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stream-http/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.1.0" } }, - "node_modules/tsdx/node_modules/jest-snapshot": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", - "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/prettier": "^1.19.0", - "chalk": "^3.0.0", - "expect": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "make-dir": "^3.0.0", - "natural-compare": "^1.4.0", - "pretty-format": "^25.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.3" - } + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true }, - "node_modules/tsdx/node_modules/jest-snapshot/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, + "node_modules/streamx": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.4.tgz", + "integrity": "sha512-uSXKl88bibiUCQ1eMpItRljCzDENcDx18rsfDmV79r0e/ThfrAwxG4Y2FarQZ2G4/21xcOKmFFd1Hue+ZIDwHw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" } }, - "node_modules/tsdx/node_modules/jest-snapshot/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "node_modules/tsdx/node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 8.3" + "node": ">=10" } }, - "node_modules/tsdx/node_modules/jest-util/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/tsdx/node_modules/jest-validate": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", - "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", - "dev": true, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "@jest/types": "^25.5.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "leven": "^3.1.0", - "pretty-format": "^25.5.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 8.3" - } - }, - "node_modules/tsdx/node_modules/jest-validate/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/tsdx/node_modules/jest-validate/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=8" } }, - "node_modules/tsdx/node_modules/jest-watcher": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", - "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-util": "^25.5.0", - "string-length": "^3.1.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=6" } }, - "node_modules/tsdx/node_modules/jest-watcher/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tsdx/node_modules/jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "node_modules/structured-headers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.5.0.tgz", + "integrity": "sha512-oLnmXSsjhud+LxRJpvokwP8ImEB2wTg8sg30buwfVViKMuluTv3BlOJHUX9VW9pJ2nQOxmx87Z0kB86O4cphag==" + }, + "node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">= 8.3" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/tsdx/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">= 0.8.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/tsdx/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tsdx/node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tsdx/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" }, "bin": { - "mkdirp": "bin/cmd.js" + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/tsdx/node_modules/node-notifier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz", - "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==", + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.1.1", - "semver": "^6.3.0", - "shellwords": "^0.1.1", - "which": "^1.3.1" + "engines": { + "node": ">= 10" } }, - "node_modules/tsdx/node_modules/node-notifier/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=6" } }, - "node_modules/tsdx/node_modules/node-notifier/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "devOptional": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/tsdx/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "devOptional": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tsdx/node_modules/p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/tsdx/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/tsdx/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", "dev": true, + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" } }, - "node_modules/tsdx/node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/tsdx/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">= 8.3" + "node": ">=8" } }, - "node_modules/tsdx/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/tsdx/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tsdx/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/tsdx/node_modules/shebang-regex": { + "node_modules/through2/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/tsdx/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" + "safe-buffer": "~5.1.0" } }, - "node_modules/tsdx/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "setimmediate": "^1.0.4" }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "engines": { "node": ">=4" } }, - "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/tsdx/node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "escape-string-regexp": "^2.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "dependencies": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/tsdx/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=6" + "node": ">=8.0" } }, - "node_modules/tsdx/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/tsdx/node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/tsdx/node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, "engines": { - "node": ">=6" + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/tsdx/node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/tsdx/node_modules/ts-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-25.5.1.tgz", - "integrity": "sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw==", + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", "dev": true, "dependencies": { "bs-logger": "0.x", - "buffer-from": "1.x", "fast-json-stable-stringify": "2.x", - "json5": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", "lodash.memoize": "4.x", "make-error": "1.x", - "micromatch": "4.x", - "mkdirp": "0.x", - "semver": "6.x", - "yargs-parser": "18.x" + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": ">= 8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "jest": ">=25 <26", - "typescript": ">=3.4 <4.0" - } - }, - "node_modules/tsdx/node_modules/ts-jest/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tsdx/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsdx/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tsdx/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" }, - "engines": { - "node": ">=4.2.0" + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } } }, - "node_modules/tsdx/node_modules/v8-to-istanbul": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", - "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", + "node_modules/ts-jest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "yallist": "^4.0.0" }, "engines": { - "node": "8.x.x || >=10.10.0" - } - }, - "node_modules/tsdx/node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/tsdx/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/ts-jest/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsdx/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/tsdx/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/tsdx/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "node_modules/ts-mockito": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", + "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", "dev": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" + "lodash": "^4.17.5" } }, - "node_modules/tsdx/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, - "engines": { - "node": ">=6" + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/tsdx/node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", "dev": true, "engines": { "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tty-browserify": { "version": "0.0.0", @@ -20567,121 +14188,37 @@ "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", "dev": true }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typed-function": { @@ -20698,34 +14235,25 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typedoc": { - "version": "0.24.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", - "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.3.tgz", + "integrity": "sha512-Ow8Bo7uY1Lwy7GTmphRIMEo6IOZ+yYUyrc8n5KXIZg1svpqhZSWgni2ZrDhe+wLosFS8yswowUzljTAV/3jmWw==", "dev": true, "dependencies": { "lunr": "^2.3.9", "marked": "^4.3.0", - "minimatch": "^9.0.0", + "minimatch": "^9.0.3", "shiki": "^0.14.1" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 14.14" + "node": ">= 16" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x" } }, "node_modules/typedoc/node_modules/brace-expansion": { @@ -20753,16 +14281,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uc.micro": { @@ -20771,26 +14299,10 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -20800,7 +14312,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "funding": [ { "type": "github", @@ -20826,46 +14337,6 @@ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", "dev": true }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -20909,12 +14380,11 @@ } }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { - "node": ">= 10.0.0" + "node": ">= 4.0.0" } }, "node_modules/unset-value": { @@ -21070,8 +14540,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/util/node_modules/inherits": { "version": "2.0.3", @@ -21079,22 +14548,6 @@ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -21115,36 +14568,6 @@ "node": ">=10.12.0" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -21163,33 +14586,6 @@ "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", "dev": true }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, - "dependencies": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "node_modules/w3c-xmlserializer/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -21531,20 +14927,10 @@ "node": ">=0.10.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { "version": "4.47.0", @@ -21626,18 +15012,6 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -21894,32 +15268,16 @@ "node": ">=0.10.0" } }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, "node_modules/whatwg-fetch": { "version": "3.6.19", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==", "dev": true }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -21940,97 +15298,6 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -22040,79 +15307,10 @@ "errno": "~0.1.7" } }, - "node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", - "dev": true, - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -22127,23 +15325,10 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/write/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, "engines": { "node": ">=10.0.0" }, @@ -22160,18 +15345,6 @@ } } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "node_modules/xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", @@ -22203,7 +15376,6 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, "engines": { "node": ">= 6" } @@ -22230,7 +15402,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "engines": { "node": ">=12" } @@ -22248,7 +15419,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" diff --git a/package.json b/package.json index 3c064f03..810703be 100644 --- a/package.json +++ b/package.json @@ -1,61 +1,57 @@ { "version": "0.1.1", "license": "Apache-2.0", - "main": "dist/index.js", - "typings": "dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/signify-ts.mjs", + "require": "./dist/signify-ts.cjs", + "types": "./dist/index.d.ts" + } + }, + "types": "./dist/index.d.ts", + "type": "module", "files": [ "dist", "src" ], "scripts": { - "start": "tsdx watch", - "build": "tsdx build", - "test": "tsdx test", - "lint": "tsdx lint", - "prepare": "tsdx build", - "size": "size-limit", - "analyze": "size-limit --why", + "start": "npm run build:esm -- --watch", + "build:cjs": "esbuild src/index.ts --bundle --outfile=dist/signify-ts.cjs --platform=neutral --format=cjs --sourcemap --packages=external", + "build:esm": "esbuild src/index.ts --bundle --outfile=dist/signify-ts.mjs --platform=neutral --format=esm --sourcemap --packages=external", + "build:types": "tsc --declaration --outDir dist", + "build": "npm run build:cjs && npm run build:esm && npm run build:types", + "test": "jest", + "lint": "npx eslint src test examples/integration-scripts examples/scripts", + "prepare": "npm run build", "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", "pretty": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' 'examples/**/*.ts' --write" }, - "husky": { - "hooks": { - "pre-commit": "tsdx lint" - } - }, "name": "signify-ts", "author": "Phil Feairheller", - "module": "dist/signify-ts.esm.js", - "size-limit": [ - { - "path": "dist/signify-ts.cjs.production.min.js", - "limit": "10 KB" - }, - { - "path": "dist/signify-ts.esm.js", - "limit": "10 KB" - } - ], "devDependencies": { "@mermaid-js/mermaid-cli": "^10.3.0", "@size-limit/preset-small-lib": "^5.0.4", + "@types/jest": "^29.5.8", "@types/libsodium-wrappers-sumo": "^0.7.5", "@types/node": "^18.11.18", - "@types/text-encoding": "^0.0.36", "@types/urlsafe-base64": "^1.0.28", - "husky": "^7.0.2", + "@typescript-eslint/eslint-plugin": "^6.10.0", + "@typescript-eslint/parser": "^6.10.0", + "esbuild": "^0.19.5", + "eslint": "^8.53.0", + "eslint-config-prettier": "^9.0.0", "jest": "^29.3.1", "jest-fetch-mock": "^3.0.3", "jsdoc": "^4.0.2", "minami": "^1.2.3", "prettier": "^3.0.3", "size-limit": "^5.0.4", + "ts-jest": "^29.1.1", "ts-mockito": "^2.6.1", "ts-node": "^10.9.1", - "tsdx": "^0.14.1", "tslib": "^2.3.1", - "typedoc": "^0.24.8", - "typescript": "^4.9.5", + "typedoc": "^0.25.3", + "typescript": "^5.2.2", "whatwg-fetch": "^3.6.19" }, "dependencies": { @@ -65,7 +61,9 @@ "libsodium-wrappers-sumo": "^0.7.9", "mathjs": "^11.8.2", "structured-headers": "^0.5.0", - "text-encoding": "^0.7.0", "urlsafe-base64": "^1.0.0" - } + }, + "workspaces": [ + "examples/*" + ] } diff --git a/src/buffer-polyfill.ts b/src/buffer-polyfill.ts new file mode 100644 index 00000000..7e3a6f00 --- /dev/null +++ b/src/buffer-polyfill.ts @@ -0,0 +1,5 @@ +import { Buffer } from 'buffer'; + +try { + window.Buffer = Buffer; +} catch (e) {} diff --git a/src/exports.ts b/src/exports.ts new file mode 100644 index 00000000..7561737f --- /dev/null +++ b/src/exports.ts @@ -0,0 +1,44 @@ +export * from './ready'; +export * from './math'; + +export * from './keri/app/habery'; +export * from './keri/app/controller'; + +export * from './keri/app/aiding'; +export * from './keri/app/clienting'; +export * from './keri/app/contacting'; +export * from './keri/app/coring'; +export * from './keri/app/credentialing'; +export * from './keri/app/escrowing'; +export * from './keri/app/exchanging'; +export * from './keri/app/grouping'; +export * from './keri/app/notifying'; + +export * from './keri/core/authing'; +export * from './keri/core/cigar'; +export * from './keri/core/cipher'; +export * from './keri/core/core'; +export * from './keri/core/counter'; +export * from './keri/core/decrypter'; +export * from './keri/core/diger'; +export * from './keri/core/encrypter'; +export * from './keri/core/eventing'; +export * from './keri/core/httping'; +export * from './keri/core/indexer'; +export * from './keri/core/keeping'; +export * from './keri/core/kering'; +export * from './keri/core/manager'; +export * from './keri/core/matter'; +export * from './keri/core/number'; +export * from './keri/core/prefixer'; +export * from './keri/core/saider'; +export * from './keri/core/salter'; +export * from './keri/core/seqner'; +export * from './keri/core/serder'; +export * from './keri/core/siger'; +export * from './keri/core/signer'; +export * from './keri/core/tholder'; +export * from './keri/core/utils'; +export * from './keri/core/verfer'; + +export * from './keri/end/ending'; diff --git a/src/index.ts b/src/index.ts index 588e01c9..99e284bb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,68 +1,4 @@ -import _sodium from 'libsodium-wrappers-sumo'; -import { create, all } from 'mathjs'; - -export const ready: () => Promise = async () => { - try { - let b3 = await import('blake3/browser-async'); - // @ts-ignore - await b3.default( - 'https://cdn.jsdelivr.net/npm/blake3@2.1.7/dist/wasm/web/blake3_js_bg.wasm' - ); - await _sodium.ready; - } catch (e) { - await _sodium.ready; - } -}; - -export * from './keri/app/habery'; -export * from './keri/app/controller'; - -export * from './keri/app/aiding'; -export * from './keri/app/clienting'; -export * from './keri/app/contacting'; -export * from './keri/app/coring'; -export * from './keri/app/credentialing'; -export * from './keri/app/escrowing'; -export * from './keri/app/exchanging'; -export * from './keri/app/grouping'; -export * from './keri/app/notifying'; - -export * from './keri/core/authing'; -export * from './keri/core/cigar'; -export * from './keri/core/cipher'; -export * from './keri/core/core'; -export * from './keri/core/counter'; -export * from './keri/core/decrypter'; -export * from './keri/core/diger'; -export * from './keri/core/encrypter'; -export * from './keri/core/eventing'; -export * from './keri/core/httping'; -export * from './keri/core/indexer'; -export * from './keri/core/keeping'; -export * from './keri/core/kering'; -export * from './keri/core/manager'; -export * from './keri/core/matter'; -export * from './keri/core/number'; -export * from './keri/core/prefixer'; -export * from './keri/core/saider'; -export * from './keri/core/salter'; -export * from './keri/core/seqner'; -export * from './keri/core/serder'; -export * from './keri/core/siger'; -export * from './keri/core/signer'; -export * from './keri/core/tholder'; -export * from './keri/core/utils'; -export * from './keri/core/verfer'; - -export * from './keri/end/ending'; - -export { Algos } from './keri/core/manager'; - -import { Buffer } from 'buffer'; - -try { - window.Buffer = Buffer; -} catch (e) {} - -const config = {}; -export const math = create(all, config); +import './buffer-polyfill'; +import * as exp from './exports'; +export * from './exports'; +export default exp; diff --git a/src/keri/core/core.ts b/src/keri/core/core.ts index a9ad6ba4..c607a453 100644 --- a/src/keri/core/core.ts +++ b/src/keri/core/core.ts @@ -1,5 +1,3 @@ -// import {TextEncoder, TextDecoder} from 'util' -import { TextEncoder, TextDecoder } from 'text-encoding'; export enum Serials { JSON = 'JSON', } diff --git a/src/keri/core/tsconfig.json b/src/keri/core/tsconfig.json deleted file mode 100644 index ab5a6e85..00000000 --- a/src/keri/core/tsconfig.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Projects */ - // "incremental": true, /* Enable incremental compilation */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ - // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ - "types": ["node"], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "resolveJsonModule": true, /* Enable importing .json files */ - // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ - // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ - // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} diff --git a/src/keri/end/tsconfig.json b/src/keri/end/tsconfig.json deleted file mode 100644 index ab5a6e85..00000000 --- a/src/keri/end/tsconfig.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Projects */ - // "incremental": true, /* Enable incremental compilation */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ - // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ - "types": ["node"], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "resolveJsonModule": true, /* Enable importing .json files */ - // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ - // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ - // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} diff --git a/src/math.ts b/src/math.ts new file mode 100644 index 00000000..d5e60e2f --- /dev/null +++ b/src/math.ts @@ -0,0 +1,3 @@ +import { create, all } from 'mathjs'; +const config = {}; +export const math = create(all, config); diff --git a/src/ready.ts b/src/ready.ts new file mode 100644 index 00000000..7558c50d --- /dev/null +++ b/src/ready.ts @@ -0,0 +1,13 @@ +import _sodium from 'libsodium-wrappers-sumo'; + +export const ready: () => Promise = async () => { + try { + const b3 = await import('blake3/browser-async'); + await b3.default( + 'https://cdn.jsdelivr.net/npm/blake3@2.1.7/dist/wasm/web/blake3_js_bg.wasm' + ); + await _sodium.ready; + } catch (e) { + await _sodium.ready; + } +}; diff --git a/tsconfig.json b/tsconfig.json index 0c489ae7..0c6dda3c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,37 +1,9 @@ { - // see https://www.typescriptlang.org/tsconfig to better understand tsconfigs - "include": ["src", "types", "/node_modules/structured-field-values/index.d.ts"], + "include": ["src", "types"], + "extends": "./tsconfig.node.json", "compilerOptions": { - "target": "ES2022", - "module": "esnext", - "lib": ["dom", "esnext"], - "importHelpers": true, - // output .d.ts declaration files for consumers + "outDir": "dist", "declaration": true, - // output .js.map sourcemap files for consumers - "sourceMap": true, - // match output dir to input dir. e.g. dist/index instead of dist/src/index - "rootDir": "./src", - // stricter type-checking for stronger correctness. Recommended by TS - "strict": true, - // linter checks for common issues - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - // noUnused* overlap with @typescript-eslint/no-unused-vars, can disable if duplicative - "noUnusedLocals": true, - "noUnusedParameters": true, - // use Node's module resolution algorithm, instead of the legacy TS one - "moduleResolution": "node", - // transpile JSX to React.createElement - "jsx": "react", - // interop between ESM and CJS modules. Recommended by TS - "esModuleInterop": true, - // significant perf increase by skipping checking .d.ts files, particularly those in node_modules. Recommended by TS - "skipLibCheck": true, - // error out if import and file system have a casing mismatch. Recommended by TS - "forceConsistentCasingInFileNames": true, - // `tsdx build` ignores this option, but it is commonly used when type-checking separately with `tsc` - "noEmit": true, - "resolveJsonModule": true, + "emitDeclarationOnly": true } } diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 00000000..c305da5b --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ES2022", + "lib": ["dom", "esnext"], + "moduleResolution": "node", + "strict": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true + } +} From f72cc727443a97c40895b3528cbec0be9585224b Mon Sep 17 00:00:00 2001 From: Nuttawut Kongsuwan <58167639+nkongsuwan@users.noreply.github.com> Date: Fri, 10 Nov 2023 16:56:18 +0700 Subject: [PATCH 093/186] Update credentials.ts --- examples/integration-scripts/credentials.ts | 134 +++++++++++++------- 1 file changed, 89 insertions(+), 45 deletions(-) diff --git a/examples/integration-scripts/credentials.ts b/examples/integration-scripts/credentials.ts index a23a4e53..860fbc47 100644 --- a/examples/integration-scripts/credentials.ts +++ b/examples/integration-scripts/credentials.ts @@ -177,9 +177,10 @@ async function run() { console.log('Verifier resolved 3 OOBIs'); // Create registry for issuer - op1 = await client1 + const regResult = await client1 .registries() .create({ name: 'issuer', registryName: 'vLEI' }); + op1 = await regResult.op(); while (!op1['done']) { op1 = await client1.operations().get(op1.name); await new Promise((resolve) => setTimeout(resolve, 1000)); @@ -198,9 +199,10 @@ async function run() { const vcdata = { LEI: '5493001KJTIIGC8Y1R17', }; - op1 = await client1 + const issResult = await client1 .credentials() .issue('issuer', registries[0].regk, schemaSAID, aid2.prefix, vcdata); + op1 = await issResult.op(); while (!op1['done']) { op1 = await client1.operations().get(op1.name); await new Promise((resolve) => setTimeout(resolve, 1000)); @@ -212,52 +214,94 @@ async function run() { assert.equal(creds1[0].status.s, '0'); // 0 = issued console.log('Credential issued'); + const acdc = new signify.Serder(issResult.acdc); + const iss = issResult.iserder; + const ianc = issResult.anc; + + const sigers = issResult.sigs.map((sig: string) => new signify.Siger({ qb64: sig })); + const ims = signify.d(signify.messagize(ianc, sigers)); + + const atc = ims.substring(issResult.anc.size); + let dt = new Date().toISOString().replace('Z', '000+00:00'); + + const [grant, gsigs, gend] = await client1 + .ipex() + .grant( + 'issuer', + aid2.prefix, + '', + acdc, + issResult.acdcSaider, + iss, + issResult.issExnSaider, + issResult.anc, + atc, + undefined, + dt + ); + await client1 + .exchanges() + .sendFromEvents('issuer', 'credential', grant, gsigs, gend, [ + aid2.prefix, + ]); + console.log('Grant message sent'); + // Recipient check issued credential - let credentialReceived = false; - while (!credentialReceived) { + let grantNotification = null; + while (grantNotification == null) { let notifications = await client2.notifications().list(); for (let notif of notifications.notes) { - if (notif.a.r == '/exn//credential/issue') { - credentialReceived = true; - await client2.notifications().mark(notif.i); + if (notif.a.r == '/exn/ipex/grant') { + grantNotification = notif; } } await new Promise((resolve) => setTimeout(resolve, 1000)); } - // Credetials are no longer accepted by default - // pending implementation in KERI to accept them - // let creds2 = await client2.credentials().list('recipient') - // assert.equal(creds2.length, 1) - // assert.equal(creds2[0].sad.s, schemaSAID) - // assert.equal(creds2[0].sad.i, aid1.prefix) - // assert.equal(creds2[0].status.s, "0") // 0 = issued + dt = new Date().toISOString().replace('Z', '000+00:00'); + const [admit, sigs, aend] = await client2.ipex().admit('recipient', '', grantNotification.a.d!, dt); + await client2.ipex().submitAdmit('recipient', admit, sigs, aend, [aid1.prefix]); + console.log('Admit sent'); + + await client2.notifications().mark(grantNotification.i); + console.log('Notification marked'); + + let creds2 = await client2.credentials().list('recipient'); + while (creds2.length < 1) { + console.log('No credentials yet...'); + await new Promise((resolve) => setTimeout(resolve, 1000)); + creds2 = await client2.credentials().list('recipient'); + } + assert.equal(creds2.length, 1) + assert.equal(creds2[0].sad.s, schemaSAID) + assert.equal(creds2[0].sad.i, aid1.prefix) + assert.equal(creds2[0].status.s, "0") // 0 = issued console.log('Credential received by recipient'); // Present credential - await client1 - .credentials() - .present('issuer', creds1[0].sad.d, 'verifier', true); - await new Promise((resolve) => setTimeout(resolve, 5000)); - let creds3 = await client3.credentials().list('verifier'); - assert.equal(creds3.length, 1); - assert.equal(creds3[0].sad.s, schemaSAID); - assert.equal(creds3[0].sad.i, aid1.prefix); - assert.equal(creds3[0].status.s, '0'); // 0 = issued - console.log('Credential presented and received by verifier'); + // await client1 + // .credentials() + // .present('issuer', creds1[0].sad.d, 'verifier', true); + // await new Promise((resolve) => setTimeout(resolve, 5000)); + // let creds3 = await client3.credentials().list('verifier'); + // assert.equal(creds3.length, 1); + // assert.equal(creds3[0].sad.s, schemaSAID); + // assert.equal(creds3[0].sad.i, aid1.prefix); + // assert.equal(creds3[0].status.s, '0'); // 0 = issued + // console.log('Credential presented and received by verifier'); // Revoke credential - op1 = await client1.credentials().revoke('issuer', creds1[0].sad.d); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - creds1 = await client1.credentials().list('issuer'); - assert.equal(creds1.length, 1); - assert.equal(creds1[0].sad.s, schemaSAID); - assert.equal(creds1[0].sad.i, aid1.prefix); - assert.equal(creds1[0].status.s, '1'); // 1 = revoked - console.log('Credential revoked'); + // op1 = await client1.credentials().revoke('issuer', creds1[0].sad.d); + // while (!op1['done']) { + // op1 = await client1.operations().get(op1.name); + // await new Promise((resolve) => setTimeout(resolve, 1000)); + // } + // creds1 = await client1.credentials().list('issuer'); + // assert.equal(creds1.length, 1); + // assert.equal(creds1[0].sad.s, schemaSAID); + // assert.equal(creds1[0].sad.i, aid1.prefix); + // assert.equal(creds1[0].status.s, '1'); // 1 = revoked + // console.log('Credential revoked'); // Recipient check revoked credential // credentialReceived = false @@ -276,14 +320,14 @@ async function run() { // console.log("Revocation received by recipient") // Present revoked credential - await client1 - .credentials() - .present('issuer', creds1[0].sad.d, 'verifier', true); - await new Promise((resolve) => setTimeout(resolve, 5000)); - creds3 = await client3.credentials().list('verifier'); - assert.equal(creds3.length, 1); - assert.equal(creds3[0].sad.s, schemaSAID); - assert.equal(creds3[0].sad.i, aid1.prefix); - assert.equal(creds3[0].status.s, '1'); // 1 = revoked - console.log('Revocation presented and received by verifier'); + // await client1 + // .credentials() + // .present('issuer', creds1[0].sad.d, 'verifier', true); + // await new Promise((resolve) => setTimeout(resolve, 5000)); + // creds3 = await client3.credentials().list('verifier'); + // assert.equal(creds3.length, 1); + // assert.equal(creds3[0].sad.s, schemaSAID); + // assert.equal(creds3[0].sad.i, aid1.prefix); + // assert.equal(creds3[0].status.s, '1'); // 1 = revoked + // console.log('Revocation presented and received by verifier'); } From 556d47ce5041896abe8ea662545a363bd88caf8f Mon Sep 17 00:00:00 2001 From: Nuttawut Kongsuwan Date: Sat, 11 Nov 2023 19:02:01 +0700 Subject: [PATCH 094/186] update example script to support ipex --- examples/integration-scripts/credentials.ts | 99 +++++++++++++++------ 1 file changed, 71 insertions(+), 28 deletions(-) diff --git a/examples/integration-scripts/credentials.ts b/examples/integration-scripts/credentials.ts index 860fbc47..2ea14e57 100644 --- a/examples/integration-scripts/credentials.ts +++ b/examples/integration-scripts/credentials.ts @@ -247,23 +247,23 @@ async function run() { console.log('Grant message sent'); // Recipient check issued credential - let grantNotification = null; - while (grantNotification == null) { + let grantNotification1 = null; + while (grantNotification1 == null) { let notifications = await client2.notifications().list(); for (let notif of notifications.notes) { if (notif.a.r == '/exn/ipex/grant') { - grantNotification = notif; + grantNotification1 = notif; } } await new Promise((resolve) => setTimeout(resolve, 1000)); } dt = new Date().toISOString().replace('Z', '000+00:00'); - const [admit, sigs, aend] = await client2.ipex().admit('recipient', '', grantNotification.a.d!, dt); + const [admit, sigs, aend] = await client2.ipex().admit('recipient', '', grantNotification1.a.d!, dt); await client2.ipex().submitAdmit('recipient', admit, sigs, aend, [aid1.prefix]); console.log('Admit sent'); - await client2.notifications().mark(grantNotification.i); + await client2.notifications().mark(grantNotification1.i); console.log('Notification marked'); let creds2 = await client2.credentials().list('recipient'); @@ -279,40 +279,83 @@ async function run() { console.log('Credential received by recipient'); // Present credential - // await client1 - // .credentials() - // .present('issuer', creds1[0].sad.d, 'verifier', true); - // await new Promise((resolve) => setTimeout(resolve, 5000)); - // let creds3 = await client3.credentials().list('verifier'); - // assert.equal(creds3.length, 1); - // assert.equal(creds3[0].sad.s, schemaSAID); - // assert.equal(creds3[0].sad.i, aid1.prefix); - // assert.equal(creds3[0].status.s, '0'); // 0 = issued - // console.log('Credential presented and received by verifier'); + dt = new Date().toISOString().replace('Z', '000+00:00'); + const [grant2, gsigs2, gend2] = await client2 + .ipex() + .grant( + 'recipient', + aid3.prefix, + '', + acdc, + issResult.acdcSaider, + iss, + issResult.issExnSaider, + issResult.anc, + atc, + undefined, + dt + ); + await client2 + .exchanges() + .sendFromEvents('recipient', 'presentation', grant2, gsigs2, gend2, [ + aid3.prefix, + ]); + console.log('Grant message sent for presentation'); + + // Verifier check issued credential + let grantNotification2 = null; + while (grantNotification2 == null) { + let notifications = await client3.notifications().list(); + for (let notif of notifications.notes) { + if (notif.a.r == '/exn/ipex/grant') { + grantNotification2 = notif; + } + } + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + + dt = new Date().toISOString().replace('Z', '000+00:00'); + const [admit3, sigs3, aend3] = await client3.ipex().admit('verifier', '', grantNotification2.a.d!, dt); + await client3.ipex().submitAdmit('verifier', admit3, sigs3, aend3, [aid2.prefix]); + console.log('Admit sent for presentation'); + + await client3.notifications().mark(grantNotification2.i); + console.log('Notification marked for presentation'); + + let creds3 = await client3.credentials().list('verifier'); + while (creds3.length < 1) { + console.log('No credentials yet...'); + await new Promise((resolve) => setTimeout(resolve, 1000)); + creds3 = await client3.credentials().list('verifier'); + } + assert.equal(creds3.length, 1) + assert.equal(creds3[0].sad.s, schemaSAID) + assert.equal(creds3[0].sad.i, aid1.prefix) + assert.equal(creds3[0].status.s, "0") // 0 = issued + console.log('Credential presented and received by verifier'); // Revoke credential - // op1 = await client1.credentials().revoke('issuer', creds1[0].sad.d); - // while (!op1['done']) { - // op1 = await client1.operations().get(op1.name); - // await new Promise((resolve) => setTimeout(resolve, 1000)); - // } - // creds1 = await client1.credentials().list('issuer'); - // assert.equal(creds1.length, 1); - // assert.equal(creds1[0].sad.s, schemaSAID); - // assert.equal(creds1[0].sad.i, aid1.prefix); - // assert.equal(creds1[0].status.s, '1'); // 1 = revoked - // console.log('Credential revoked'); + op1 = await client1.credentials().revoke('issuer', creds1[0].sad.d); + while (!op1['done']) { + op1 = await client1.operations().get(op1.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + creds1 = await client1.credentials().list('issuer'); + assert.equal(creds1.length, 1); + assert.equal(creds1[0].sad.s, schemaSAID); + assert.equal(creds1[0].sad.i, aid1.prefix); + assert.equal(creds1[0].status.s, '1'); // 1 = revoked + console.log('Credential revoked'); // Recipient check revoked credential - // credentialReceived = false // let revoked = false // while (!revoked) { // let cred2 = await client2.credentials().get('recipient', creds1[0].sad.d) // if (cred2.status.s == "1") { // revoked = true // } + // await new Promise((resolve) => setTimeout(resolve, 1000)); // } - // let creds2 = await client2.credentials().list('recipient') // assert.equal(creds2.length, 1) // assert.equal(creds2[0].sad.s, schemaSAID) // assert.equal(creds2[0].sad.i, aid1.prefix) From cd401c2cd4676e31a79d3c339698e76f8e647a30 Mon Sep 17 00:00:00 2001 From: Kent Bull Date: Mon, 13 Nov 2023 06:30:34 -0700 Subject: [PATCH 095/186] Clarify test flow with better logs and readable names --- examples/integration-scripts/credentials.ts | 544 +++++++++++--------- 1 file changed, 299 insertions(+), 245 deletions(-) diff --git a/examples/integration-scripts/credentials.ts b/examples/integration-scripts/credentials.ts index 2ea14e57..39c7f632 100644 --- a/examples/integration-scripts/credentials.ts +++ b/examples/integration-scripts/credentials.ts @@ -3,232 +3,283 @@ import signify from 'signify-ts'; const url = 'http://127.0.0.1:3901'; const boot_url = 'http://127.0.0.1:3903'; +const WAN_WITNESS_AID = 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'; +const WIL_WITNESS_AID = 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM'; +const WES_WITNESS_AID = 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX'; +const KLI_WITNESS_DEMO_PREFIXES = [ + WAN_WITNESS_AID, + WIL_WITNESS_AID, + WES_WITNESS_AID, +]; + +// Boots an agent and connects to it, returning the connected SignifyClient +async function bootAndConnect( + bran: string = signify.randomPasscode(), + agentUrl: string = url, + bootUrl: string = boot_url, + tier: signify.Tier = signify.Tier.low +) { + const client = new signify.SignifyClient(agentUrl, bran, tier, bootUrl); + await client.boot(); + await client.connect(); + return client; +} + +// utility function for making a correctly formatted timestamp +function createTimestamp() { + return new Date().toISOString().replace('Z', '000+00:00'); +} + +// typed interface for Notification +interface Notification { + i: string; + dt: string; + r: boolean; + a: { r: string; d?: string; m?: string }; +} + +// checks for notifications on a route and returns them as an array +async function waitForNotifications( + client: signify.SignifyClient, + route: string +): Promise { + const awaitedNotifications = []; + while (true) { + let notifications = await client.notifications().list(); + for (let note of notifications.notes) { + if (note.a.r === route) { + awaitedNotifications.push(note); + } + } + if (awaitedNotifications.length > 0) break; + + await new Promise((resolve) => setTimeout(resolve, 250)); + } + return awaitedNotifications; +} await run(); +// main test function async function run() { await signify.ready(); - // Boot three clients - const bran1 = signify.randomPasscode(); - const bran2 = signify.randomPasscode(); - const bran3 = signify.randomPasscode(); - const client1 = new signify.SignifyClient( - url, - bran1, - signify.Tier.low, - boot_url - ); - const client2 = new signify.SignifyClient( - url, - bran2, - signify.Tier.low, - boot_url - ); - const client3 = new signify.SignifyClient( - url, - bran3, - signify.Tier.low, - boot_url - ); - await client1.boot(); - await client2.boot(); - await client3.boot(); - await client1.connect(); - await client2.connect(); - await client3.connect(); - const state1 = await client1.state(); - const state2 = await client2.state(); - const state3 = await client3.state(); + // Boot three clients one each for issuer, holder, and verifier + const issuerClient = await bootAndConnect(signify.randomPasscode()); + const holderClient = await bootAndConnect(signify.randomPasscode()); + const verifierClient = await bootAndConnect(signify.randomPasscode()); + + const state1 = await issuerClient.state(); + const state2 = await holderClient.state(); + const state3 = await verifierClient.state(); console.log( - 'Client 1 connected. Client AID:', - state1.controller.state.i, - 'Agent AID: ', - state1.agent.i + 'Issuer connected.\n\tHolder Controller AID:', + state1.controller.state.i, + '\n\tIssuer Agent AID: ', + state1.agent.i ); console.log( - 'Client 2 connected. Client AID:', - state2.controller.state.i, - 'Agent AID: ', - state2.agent.i + 'Holder connected.\n\tHolder Controller AID:', + state2.controller.state.i, + '\n\tHolder Agent AID: ', + state2.agent.i ); console.log( - 'Client 3 connected. Client AID:', - state3.controller.state.i, - 'Agent AID: ', - state3.agent.i + 'Verifier connected.\n\tVerifier Controller AID:', + state3.controller.state.i, + '\n\tVerifier Agent AID: ', + state3.agent.i ); + const issuerAidName = 'issuer'; + const holderAidName = 'holder'; + const verifierAidName = 'verifier'; + // Create two identifiers, one for each client - let icpResult1 = await client1.identifiers().create('issuer', { + let issuerIcpRes = await issuerClient.identifiers().create(issuerAidName, { toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], + wits: [...KLI_WITNESS_DEMO_PREFIXES], }); - let op1 = await icpResult1.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + let issOp = await issuerIcpRes.op(); + while (!issOp['done']) { + issOp = await issuerClient.operations().get(issOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - const aid1 = await client1.identifiers().get('issuer'); - await client1 + const issAidResp = await issuerClient.identifiers().get(issuerAidName); + const issuerAID = issAidResp.prefix + await issuerClient .identifiers() - .addEndRole('issuer', 'agent', client1!.agent!.pre); - console.log("Issuer's AID:", aid1.prefix); + .addEndRole(issuerAidName, 'agent', issuerClient!.agent!.pre); + console.log("Issuer's AID:", issuerAID); - let icpResult2 = await client2.identifiers().create('recipient', { + let holderIcpRes = await holderClient.identifiers().create(holderAidName, { toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], + wits: [...KLI_WITNESS_DEMO_PREFIXES], }); - let op2 = await icpResult2.op(); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + let hldOp = await holderIcpRes.op(); + while (!hldOp['done']) { + hldOp = await holderClient.operations().get(hldOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - const aid2 = await client2.identifiers().get('recipient'); - await client2 + const hldAidResp = await holderClient.identifiers().get(holderAidName); + const holderAID = hldAidResp.prefix + await holderClient .identifiers() - .addEndRole('recipient', 'agent', client2!.agent!.pre); - console.log("Recipient's AID:", aid2.prefix); + .addEndRole(holderAidName, 'agent', holderClient!.agent!.pre); + console.log("Recipient's AID:", holderAID); - let icpResult3 = await client3.identifiers().create('verifier', { + let verifierIcpRes = await verifierClient.identifiers().create(verifierAidName, { toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], + wits: [...KLI_WITNESS_DEMO_PREFIXES], }); - let op3 = await icpResult3.op(); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + let vfyOp = await verifierIcpRes.op(); + while (!vfyOp['done']) { + vfyOp = await verifierClient.operations().get(vfyOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - const aid3 = await client3.identifiers().get('verifier'); - await client3 + const vfyAidResp = await verifierClient.identifiers().get(verifierAidName); + const verifierAID = vfyAidResp.prefix + await verifierClient .identifiers() - .addEndRole('verifier', 'agent', client3!.agent!.pre); - console.log("Verifier's AID:", aid3.prefix); + .addEndRole(verifierAidName, 'agent', verifierClient!.agent!.pre); + console.log("Verifier's AID:", verifierAID); const schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; - // Exchenge OOBIs - console.log('Resolving OOBIs...'); - let oobi1 = await client1.oobis().get('issuer', 'agent'); - let oobi2 = await client2.oobis().get('recipient', 'agent'); - let oobi3 = await client3.oobis().get('verifier', 'agent'); - let schemaOobi = 'http://127.0.0.1:7723/oobi/' + schemaSAID; - - op1 = await client1.oobis().resolve(oobi2.oobis[0], 'recipient'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + // OOBIs for credential schema and agent discovery + console.log('Resolving Schema and Agent OOBIs...'); + + // Credential Schema discovery through credential schema OOBI resolution + const qviSchemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; + const vLEIServerHostUrl = 'http://127.0.0.1:7723/oobi'; + let schemaOobiUrl = `${vLEIServerHostUrl}/${qviSchemaSAID}`; + + console.log(`Resolving schema OOBIs with ${schemaOobiUrl}`); + issOp = await issuerClient.oobis().resolve(schemaOobiUrl, 'schema'); + while (!issOp['done']) { + issOp = await issuerClient.operations().get(issOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - op1 = await client1.oobis().resolve(oobi3.oobis[0], 'verifier'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + hldOp = await holderClient.oobis().resolve(schemaOobiUrl, 'schema'); + while (!hldOp['done']) { + hldOp = await holderClient.operations().get(hldOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - op1 = await client1.oobis().resolve(schemaOobi, 'schema'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + vfyOp = await verifierClient.oobis().resolve(schemaOobiUrl, 'schema'); + while (!vfyOp['done']) { + vfyOp = await verifierClient.operations().get(vfyOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - console.log('Issuer resolved 3 OOBIs'); - op2 = await client2.oobis().resolve(oobi1.oobis[0], 'issuer'); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - op2 = await client2.oobis().resolve(oobi3.oobis[0], 'verifier'); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + let issSchema = await issuerClient.schemas().get(schemaSAID); + assert.equal(issSchema.$id, schemaSAID); + let hldSchemas = await holderClient.schemas().list(); + assert.equal(hldSchemas.length, 1); + assert.equal(hldSchemas[0].$id, schemaSAID); + console.log('Resolved QVI Schema OOBI for issuer, holder, and verifier'); + + // Agent discovery through OOBI exchange between issuer, holder, and verifier + console.log('Getting Agent OOBIs for issuer, holder, and verifier'); + let issAgentOOBI = await issuerClient.oobis().get(issuerAidName, 'agent'); + let hldAgentOOBI = await holderClient.oobis().get(holderAidName, 'agent'); + let vfyAgentOOBI = await verifierClient.oobis().get(verifierAidName, 'agent'); + + // issuer -> holder, verifier + issOp = await issuerClient.oobis().resolve(hldAgentOOBI.oobis[0], holderAidName); + while (!issOp['done']) { + issOp = await issuerClient.operations().get(issOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - op2 = await client2.oobis().resolve(schemaOobi, 'schema'); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + issOp = await issuerClient.oobis().resolve(vfyAgentOOBI.oobis[0], verifierAidName); + while (!issOp['done']) { + issOp = await issuerClient.operations().get(issOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - console.log('Recipient resolved 3 OOBIs'); + console.log('Issuer resolved 2 OOBIs: [holder, verifier]'); - op3 = await client3.oobis().resolve(oobi1.oobis[0], 'issuer'); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + // holder -> issuer, verifier + hldOp = await holderClient.oobis().resolve(issAgentOOBI.oobis[0], issuerAidName); + while (!hldOp['done']) { + hldOp = await holderClient.operations().get(hldOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - op3 = await client3.oobis().resolve(oobi2.oobis[0], 'recipient'); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + hldOp = await holderClient.oobis().resolve(vfyAgentOOBI.oobis[0], verifierAidName); + while (!hldOp['done']) { + hldOp = await holderClient.operations().get(hldOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - op3 = await client3.oobis().resolve(schemaOobi, 'schema'); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + console.log('Holder resolved 2 OOBIs: [issuer, verifier]'); + + // verifier -> issuer, holder + vfyOp = await verifierClient.oobis().resolve(issAgentOOBI.oobis[0], issuerAidName); + while (!vfyOp['done']) { + vfyOp = await verifierClient.operations().get(vfyOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - console.log('Verifier resolved 3 OOBIs'); + vfyOp = await verifierClient.oobis().resolve(hldAgentOOBI.oobis[0], holderAidName); + while (!vfyOp['done']) { + vfyOp = await verifierClient.operations().get(vfyOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); + } + console.log('Verifier resolved 2 OOBIs: [issuer, holder]'); // Create registry for issuer - const regResult = await client1 + const registryName = 'vLEI-test-registry'; + const regResult = await issuerClient .registries() - .create({ name: 'issuer', registryName: 'vLEI' }); - op1 = await regResult.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + .create({ name: issuerAidName, registryName: registryName }); + issOp = await regResult.op(); + while (!issOp['done']) { + issOp = await issuerClient.operations().get(issOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - let registries = await client1.registries().list('issuer'); + let registries = await issuerClient.registries().list(issuerAidName); + const registry = registries[0]; assert.equal(registries.length, 1); - assert.equal(registries[0].name, 'vLEI'); - let schema = await client1.schemas().get(schemaSAID); - assert.equal(schema.$id, schemaSAID); - let schemas = await client2.schemas().list(); - assert.equal(schemas.length, 1); - assert.equal(schemas[0].$id, schemaSAID); - console.log('Registry created'); - - // Issue credential + assert.equal(registry.name, registryName); + console.log(`Registry created: ${registry.name}`); + + // + // IPEX + // + + // Issue credential from the issuer's perspective - create credential, + // then perform IPEX grant as EXN message const vcdata = { LEI: '5493001KJTIIGC8Y1R17', }; - const issResult = await client1 + const issResult = await issuerClient .credentials() - .issue('issuer', registries[0].regk, schemaSAID, aid2.prefix, vcdata); - op1 = await issResult.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + .issue(issuerAidName, registry.regk, schemaSAID, holderAID, vcdata); + issOp = await issResult.op(); + while (!issOp['done']) { + issOp = await issuerClient.operations().get(issOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - let creds1 = await client1.credentials().list('issuer'); - assert.equal(creds1.length, 1); - assert.equal(creds1[0].sad.s, schemaSAID); - assert.equal(creds1[0].sad.i, aid1.prefix); - assert.equal(creds1[0].status.s, '0'); // 0 = issued - console.log('Credential issued'); + let issCreds = await issuerClient.credentials().list(); + assert.equal(issCreds.length, 1); + assert.equal(issCreds[0].sad.s, schemaSAID); + assert.equal(issCreds[0].sad.i, issuerAID); + assert.equal(issCreds[0].status.s, '0'); // 0 = issued + console.log(`Issuer: credential created with data: ${JSON.stringify(vcdata)}`); + // prepare IPEX GRANT message const acdc = new signify.Serder(issResult.acdc); const iss = issResult.iserder; const ianc = issResult.anc; - const sigers = issResult.sigs.map((sig: string) => new signify.Siger({ qb64: sig })); + const sigers = issResult.sigs.map( + (sig: string) => new signify.Siger({ qb64: sig }) + ); const ims = signify.d(signify.messagize(ianc, sigers)); - const atc = ims.substring(issResult.anc.size); - let dt = new Date().toISOString().replace('Z', '000+00:00'); - - const [grant, gsigs, gend] = await client1 + const atc = ims.substring(ianc.size); // attachment + let dt = createTimestamp(); // grant datetime + + const [grant, gsigs, gend] = await issuerClient .ipex() .grant( - 'issuer', - aid2.prefix, + issuerAidName, + holderAID, '', acdc, issResult.acdcSaider, @@ -239,52 +290,57 @@ async function run() { undefined, dt ); - await client1 + await issuerClient .exchanges() - .sendFromEvents('issuer', 'credential', grant, gsigs, gend, [ - aid2.prefix, + .sendFromEvents(issuerAidName, 'credential', grant, gsigs, gend, [ + holderAID, ]); - console.log('Grant message sent'); - - // Recipient check issued credential - let grantNotification1 = null; - while (grantNotification1 == null) { - let notifications = await client2.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == '/exn/ipex/grant') { - grantNotification1 = notif; - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + console.log('Issuer: IPEX GRANT sent to holder'); - dt = new Date().toISOString().replace('Z', '000+00:00'); - const [admit, sigs, aend] = await client2.ipex().admit('recipient', '', grantNotification1.a.d!, dt); - await client2.ipex().submitAdmit('recipient', admit, sigs, aend, [aid1.prefix]); - console.log('Admit sent'); + // from the holder's perspective - wait for GRANT notification, + // perform admit, then mark GRANT notification as read + const holderNotifications = await waitForNotifications( + holderClient, + '/exn/ipex/grant' + ); + const grantNotification = holderNotifications[0]; // should only have one notification right now - await client2.notifications().mark(grantNotification1.i); - console.log('Notification marked'); + // Note: Credentials are no longer automatically accepted into a wallet. + // Pending an implementation in KERIA there will be the ability to + // auto-add credentials by automatically admitting credentials. + const [admit, sigs, aend] = await holderClient.ipex() + .admit( + holderAidName, + '', + grantNotification.a.d!, + createTimestamp()); + await holderClient.ipex() + .submitAdmit(holderAidName, admit, sigs, aend, [issuerAID]); + console.log('Holder: IPEX ADMIT sent'); - let creds2 = await client2.credentials().list('recipient'); - while (creds2.length < 1) { - console.log('No credentials yet...'); - await new Promise((resolve) => setTimeout(resolve, 1000)); - creds2 = await client2.credentials().list('recipient'); + await holderClient.notifications().mark(grantNotification.i); + console.log('Holder: IPEX GRANT notification marked'); + + // list credentials to show new credential received through IPEX GRANT+ADMIT + let holderCreds = await holderClient.credentials().list(); + while (holderCreds.length < 1) { + console.log('Holder: No credentials yet...'); + await new Promise((resolve) => setTimeout(resolve, 250)); + holderCreds = await holderClient.credentials().list(); } - assert.equal(creds2.length, 1) - assert.equal(creds2[0].sad.s, schemaSAID) - assert.equal(creds2[0].sad.i, aid1.prefix) - assert.equal(creds2[0].status.s, "0") // 0 = issued + const hldVleiAcdc: any = holderCreds[0]; + assert.equal(holderCreds.length, 1) + assert.equal(hldVleiAcdc.sad.s, schemaSAID) + assert.equal(hldVleiAcdc.sad.i, issuerAID) + assert.equal(hldVleiAcdc.status.s, "0") // 0 = issued console.log('Credential received by recipient'); // Present credential - dt = new Date().toISOString().replace('Z', '000+00:00'); - const [grant2, gsigs2, gend2] = await client2 + const [grant2, gsigs2, gend2] = await holderClient .ipex() .grant( - 'recipient', - aid3.prefix, + holderAidName, + verifierAID, '', acdc, issResult.acdcSaider, @@ -293,68 +349,66 @@ async function run() { issResult.anc, atc, undefined, - dt + createTimestamp() ); - await client2 + await holderClient .exchanges() - .sendFromEvents('recipient', 'presentation', grant2, gsigs2, gend2, [ - aid3.prefix, + .sendFromEvents(holderAidName, 'presentation', grant2, gsigs2, gend2, [ + verifierAID, ]); - console.log('Grant message sent for presentation'); + console.log('Holder: Grant message sent for presentation'); // Verifier check issued credential - let grantNotification2 = null; - while (grantNotification2 == null) { - let notifications = await client3.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == '/exn/ipex/grant') { - grantNotification2 = notif; - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + const verifierNotifications = await waitForNotifications( + verifierClient, + '/exn/ipex/grant' + ); + let verifierGrantNote = verifierNotifications[0]; - dt = new Date().toISOString().replace('Z', '000+00:00'); - const [admit3, sigs3, aend3] = await client3.ipex().admit('verifier', '', grantNotification2.a.d!, dt); - await client3.ipex().submitAdmit('verifier', admit3, sigs3, aend3, [aid2.prefix]); - console.log('Admit sent for presentation'); + const [admit3, sigs3, aend3] = await verifierClient.ipex() + .admit(verifierAidName, '', verifierGrantNote.a.d!, createTimestamp()); + await verifierClient.ipex() + .submitAdmit(verifierAidName, admit3, sigs3, aend3, [holderAID]); + console.log('Verifier: Admit sent for presentation'); - await client3.notifications().mark(grantNotification2.i); - console.log('Notification marked for presentation'); + await verifierClient.notifications().mark(verifierGrantNote.i); + console.log('Verifier: Notification marked for presentation'); - let creds3 = await client3.credentials().list('verifier'); - while (creds3.length < 1) { + // list credentials for verifier + let verifierCreds = await verifierClient.credentials().list(); + while (verifierCreds.length < 1) { console.log('No credentials yet...'); - await new Promise((resolve) => setTimeout(resolve, 1000)); - creds3 = await client3.credentials().list('verifier'); + await new Promise((resolve) => setTimeout(resolve, 250)); + verifierCreds = await verifierClient.credentials().list(); } - assert.equal(creds3.length, 1) - assert.equal(creds3[0].sad.s, schemaSAID) - assert.equal(creds3[0].sad.i, aid1.prefix) - assert.equal(creds3[0].status.s, "0") // 0 = issued + assert.equal(verifierCreds.length, 1) + assert.equal(verifierCreds[0].sad.s, schemaSAID) + assert.equal(verifierCreds[0].sad.i, issuerAID) + assert.equal(verifierCreds[0].status.s, "0") // 0 = issued console.log('Credential presented and received by verifier'); // Revoke credential - op1 = await client1.credentials().revoke('issuer', creds1[0].sad.d); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); + issOp = await issuerClient.credentials().revoke(issuerAidName, issCreds[0].sad.d); + while (!issOp['done']) { + issOp = await issuerClient.operations().get(issOp.name); + await new Promise((resolve) => setTimeout(resolve, 250)); } - creds1 = await client1.credentials().list('issuer'); - assert.equal(creds1.length, 1); - assert.equal(creds1[0].sad.s, schemaSAID); - assert.equal(creds1[0].sad.i, aid1.prefix); - assert.equal(creds1[0].status.s, '1'); // 1 = revoked - console.log('Credential revoked'); + issCreds = await issuerClient.credentials().list(); + const issVleiAcdc = issCreds[0] + assert.equal(issCreds.length, 1); + assert.equal(issVleiAcdc.sad.s, schemaSAID); + assert.equal(issVleiAcdc.sad.i, issuerAID); + assert.equal(issVleiAcdc.status.s, '1'); // 1 = revoked + console.log('Issuer Credential revoked'); // Recipient check revoked credential // let revoked = false // while (!revoked) { - // let cred2 = await client2.credentials().get('recipient', creds1[0].sad.d) + // let cred2 = await client2.credentials().get(holderAidName, creds1[0].sad.d) // if (cred2.status.s == "1") { // revoked = true // } - // await new Promise((resolve) => setTimeout(resolve, 1000)); + // await new Promise((resolve) => setTimeout(resolve, 250)); // } // assert.equal(creds2.length, 1) // assert.equal(creds2[0].sad.s, schemaSAID) @@ -365,9 +419,9 @@ async function run() { // Present revoked credential // await client1 // .credentials() - // .present('issuer', creds1[0].sad.d, 'verifier', true); + // .present(issuerAidName, creds1[0].sad.d, verifierAidName, true); // await new Promise((resolve) => setTimeout(resolve, 5000)); - // creds3 = await client3.credentials().list('verifier'); + // creds3 = await client3.credentials().list(verifierAidName); // assert.equal(creds3.length, 1); // assert.equal(creds3[0].sad.s, schemaSAID); // assert.equal(creds3[0].sad.i, aid1.prefix); From be31b15a4b74690fd51c27fbf9512960fe91ea0d Mon Sep 17 00:00:00 2001 From: Arshdeep Date: Thu, 16 Nov 2023 09:44:45 -0500 Subject: [PATCH 096/186] add join function in groups class to join multisig rotation event Signed-off-by: arshdeep singh --- src/keri/app/grouping.ts | 35 +++++++++++++++++++++++++++++++++++ test/app/grouping.test.ts | 5 +++++ 2 files changed, 40 insertions(+) diff --git a/src/keri/app/grouping.ts b/src/keri/app/grouping.ts index c53d5a31..153cdf13 100644 --- a/src/keri/app/grouping.ts +++ b/src/keri/app/grouping.ts @@ -53,4 +53,39 @@ export class Groups { let res = await this.client.fetch(path, method, data); return await res.json(); } + + /** + * Join multisig group using rotation event. + * This can be used by participants being asked to contribute keys to a rotation event to join an existing group. + * @async + * @param {string} [name] human readable name of group AID + * @param {any} [rot] rotation event + * @param {any} [sigs] signatures + * @param {string} [gid] prefix + * @param {string[]} [smids] array of particpants + * @param {string[]} [rmids] array of particpants + * @returns {Promise} A promise to the list of replay messages + */ + async join( + name: string, + rot: any, + sigs: any, //string[], + gid: string, + smids: string[], + rmids: string[] + ): Promise { + let path = `/identifiers/${name}/multisig/join`; + let method = 'POST'; + let data = { + tpc: 'multisig', + rot: rot.ked, + sigs: sigs, + gid: gid, + smids: smids, + rmids: rmids + }; + let res = await this.client.fetch(path, method, data); + return await res.json(); + } + } diff --git a/test/app/grouping.test.ts b/test/app/grouping.test.ts index 6e85221a..5992bc2d 100644 --- a/test/app/grouping.test.ts +++ b/test/app/grouping.test.ts @@ -181,5 +181,10 @@ describe('Grouping', () => { '/multisig/request/ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00' ); assert.equal(lastCall[1]!.method, 'GET'); + + await groups.join('aid1', { 'ked': {} }, ['sig'], 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', ['1', '2', '3'], ['a', 'b', 'c']); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/identifiers/aid1/multisig/join'); + assert.equal(lastCall[1]!.method, 'POST'); }); }); From 8cbaab3c5cba641f2edf5ff399d2051fb2e19510 Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 16 Nov 2023 17:03:51 +0100 Subject: [PATCH 097/186] fix single issuer holder script --- examples/integration-scripts/single-issuer-holder.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/integration-scripts/single-issuer-holder.ts b/examples/integration-scripts/single-issuer-holder.ts index 3fc83006..9d23b61b 100644 --- a/examples/integration-scripts/single-issuer-holder.ts +++ b/examples/integration-scripts/single-issuer-holder.ts @@ -112,7 +112,7 @@ async function issueCredential( await new Promise((resolve) => setTimeout(resolve, 1000)); } - const creds = await client.credentials().list(name); + const creds = await client.credentials().list(); assert.equal(creds.length, 1); assert.equal(creds[0].sad.s, SCHEMA_SAID); assert.equal(creds[0].status.s, '0'); @@ -261,11 +261,11 @@ async function run() { console.log('Notification marked!'); console.log('Listing credentials...'); - let credentials = await holderClient.credentials().list('holder'); + let credentials = await holderClient.credentials().list(); while (credentials.length < 1) { console.log('No credentials yet...'); await new Promise((resolve) => setTimeout(resolve, 1000)); - credentials = await holderClient.credentials().list('holder'); + credentials = await holderClient.credentials().list(); } console.log('Succeeded'); From 27faca287739b4710de6066cb347c3187666ac1f Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 16 Nov 2023 18:11:05 +0100 Subject: [PATCH 098/186] fix: remove name parameter from exchanges.get method --- src/keri/app/exchanging.ts | 17 +++++++---------- test/app/exchanging.test.ts | 15 +++++---------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts index 85ba3005..4ecde1f9 100644 --- a/src/keri/app/exchanging.ts +++ b/src/keri/app/exchanging.ts @@ -127,20 +127,17 @@ export class Exchanges { return await res.json(); } - /** - * Get exn messages + * Get exn message by said * @async - * @returns {Promise} A promise to the exn message - * @param name - * @param said + * @returns A promise to the exn message + * @param said The said of the exn message */ - async get(name:string, said:string) { - let path = `/identifiers/${name}/exchanges/${said}`; - let method = 'GET'; - let res = await this.client.fetch(path, method, null); + async get(said: string): Promise { + const path = `/exchanges/${said}`; + const method = 'GET'; + const res = await this.client.fetch(path, method, null); return await res.json(); - } } diff --git a/test/app/exchanging.test.ts b/test/app/exchanging.test.ts index e0da67fb..3d367c14 100644 --- a/test/app/exchanging.test.ts +++ b/test/app/exchanging.test.ts @@ -381,21 +381,16 @@ describe('exchange', () => { it('Get exchange', async () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let exchanges = client.exchanges(); - await exchanges.get( - 'aid1', - 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' - ); - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + const exchanges = client.exchanges(); + await exchanges.get('EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'); + const lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; assert.equal( lastCall[0]!, - url + - '/identifiers/aid1/exchanges/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + url + '/exchanges/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' ); assert.equal(lastCall[1]!.method, 'GET'); - }); }); From bcd83fc8fe00c2f291edc2e528a24b88a8e54a93 Mon Sep 17 00:00:00 2001 From: Kent Bull <65027257+kentbull@users.noreply.github.com> Date: Tue, 21 Nov 2023 05:13:09 -0700 Subject: [PATCH 099/186] fix multisig.ts usage - remove name param (#2) --- examples/integration-scripts/multisig.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.ts index dc1f2887..d7c5c40a 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.ts @@ -1161,7 +1161,7 @@ async function run() { msgSaid = await waitForMessage(client4, '/exn/ipex/grant'); console.log('Holder received exchange message with the grant message'); - res = await client4.exchanges().get('holder',msgSaid); + res = await client4.exchanges().get(msgSaid); let [admit, asigs, aend] = await client4 .ipex() From e972f8f64a1a268637e4c26addb2515f9be99fce Mon Sep 17 00:00:00 2001 From: lenkan Date: Tue, 21 Nov 2023 14:44:28 +0100 Subject: [PATCH 100/186] Draft for running integration tests --- .github/workflows/main.yml | 22 +- config/keria.json | 11 + config/witness-demo/wan.json | 8 + config/witness-demo/wes.json | 8 + config/witness-demo/wil.json | 8 + config/witness-demo/wit.json | 8 + config/witness-demo/wub.json | 8 + config/witness-demo/wyz.json | 8 + docker-compose.yaml | 76 +++++ .../single-issuer-holder.test.ts | 315 ++++++++++++++++++ .../single-issuer-holder.ts | 273 --------------- package.json | 5 +- tsconfig.build.json | 9 + tsconfig.json | 7 +- 14 files changed, 486 insertions(+), 280 deletions(-) create mode 100755 config/keria.json create mode 100755 config/witness-demo/wan.json create mode 100755 config/witness-demo/wes.json create mode 100755 config/witness-demo/wil.json create mode 100755 config/witness-demo/wit.json create mode 100755 config/witness-demo/wub.json create mode 100755 config/witness-demo/wyz.json create mode 100644 docker-compose.yaml create mode 100644 examples/integration-scripts/single-issuer-holder.test.ts delete mode 100644 examples/integration-scripts/single-issuer-holder.ts create mode 100644 tsconfig.build.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4f18e30a..ff4ff131 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ macOS-latest, ubuntu-latest] + os: [macOS-latest, ubuntu-latest] steps: - name: Checkout repo @@ -39,3 +39,23 @@ jobs: uses: codecov/codecov-action@v3 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + test: + name: Run integration test + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - uses: actions/setup-node@v2 + with: + node-version: '18.12.1' + cache: 'npm' + - name: install deps + run: npm ci + - name: Build + run: npm run build + - name: Start dependencies + run: docker compose up deps + - name: Run integration test + run: npm run test:integration diff --git a/config/keria.json b/config/keria.json new file mode 100755 index 00000000..54525b80 --- /dev/null +++ b/config/keria.json @@ -0,0 +1,11 @@ +{ + "iurls": [ + "http://witness-demo:5642/oobi/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha/controller?name=Wan&tag=witness", + "http://witness-demo:5643/oobi/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM/controller?name=Wes&tag=witness", + "http://witness-demo:5644/oobi/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX/controller?name=Wil&tag=witness" + ], + "keria": { + "dt": "2022-01-20T12:57:59.823350+00:00", + "curls": ["http://keria:3902"] + } +} diff --git a/config/witness-demo/wan.json b/config/witness-demo/wan.json new file mode 100755 index 00000000..3c077001 --- /dev/null +++ b/config/witness-demo/wan.json @@ -0,0 +1,8 @@ +{ + "dt": "2022-01-20T12:57:59.823350+00:00", + "wan": { + "dt": "2022-01-20T12:57:59.823350+00:00", + "curls": ["tcp://witness-demo:5632/", "http://witness-demo:5642/"] + }, + "iurls": [] +} diff --git a/config/witness-demo/wes.json b/config/witness-demo/wes.json new file mode 100755 index 00000000..dcbe6a27 --- /dev/null +++ b/config/witness-demo/wes.json @@ -0,0 +1,8 @@ +{ + "wes": { + "dt": "2022-01-20T12:57:59.823350+00:00", + "curls": ["tcp://witness-demo:5634/", "http://witness-demo:5644/"] + }, + "dt": "2022-01-20T12:57:59.823350+00:00", + "iurls": [] +} diff --git a/config/witness-demo/wil.json b/config/witness-demo/wil.json new file mode 100755 index 00000000..795b0d34 --- /dev/null +++ b/config/witness-demo/wil.json @@ -0,0 +1,8 @@ +{ + "wil": { + "dt": "2022-01-20T12:57:59.823350+00:00", + "curls": ["tcp://witness-demo:5633/", "http://witness-demo:5643/"] + }, + "dt": "2022-01-20T12:57:59.823350+00:00", + "iurls": [] +} diff --git a/config/witness-demo/wit.json b/config/witness-demo/wit.json new file mode 100755 index 00000000..e23352a5 --- /dev/null +++ b/config/witness-demo/wit.json @@ -0,0 +1,8 @@ +{ + "wit": { + "dt": "2022-01-20T12:57:59.823350+00:00", + "curls": ["tcp://witness-demo:5635/", "http://witness-demo:5645/"] + }, + "dt": "2022-01-20T12:57:59.823350+00:00", + "iurls": [] +} diff --git a/config/witness-demo/wub.json b/config/witness-demo/wub.json new file mode 100755 index 00000000..6f756675 --- /dev/null +++ b/config/witness-demo/wub.json @@ -0,0 +1,8 @@ +{ + "wub": { + "dt": "2022-01-20T12:57:59.823350+00:00", + "curls": ["tcp://witness-demo:5636/", "http://witness-demo:5646/"] + }, + "dt": "2022-01-20T12:57:59.823350+00:00", + "iurls": [] +} diff --git a/config/witness-demo/wyz.json b/config/witness-demo/wyz.json new file mode 100755 index 00000000..28fc6ebc --- /dev/null +++ b/config/witness-demo/wyz.json @@ -0,0 +1,8 @@ +{ + "wyz": { + "dt": "2022-01-20T12:57:59.823350+00:00", + "curls": ["tcp://witness-demo:5637/", "http://witness-demo:5647/"] + }, + "dt": "2022-01-20T12:57:59.823350+00:00", + "iurls": [] +} diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 00000000..f9f3ce60 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,76 @@ +services: + vlei-server: + image: gleif/vlei + command: + - vLEI-server + - -s + - ./schema/acdc + - -c + - ./samples/acdc/ + - -o + - ./samples/oobis/ + healthcheck: + test: + - CMD + - curl + - -f + - http://localhost:7723/oobi/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao + interval: 2s + timeout: 3s + retries: 5 + start_period: 2s + ports: + - 7723:7723 + + keria: + image: weboftrust/keria:latest + environment: + - KERI_AGENT_CORS=1 + - KERI_URL=http://keria:3902 + volumes: + - ./config/keria.json:/keria/config/keri/cf/keria.json + entrypoint: keria + command: + - start + - --config-dir + - /keria/config + - --config-file + - keria + - --name + - agent + healthcheck: + test: ['CMD', 'curl', '-f', 'http://localhost:3902/spec.yaml'] + interval: 2s + timeout: 3s + retries: 5 + start_period: 2s + ports: + - 3901:3901 + - 3902:3902 + - 3903:3903 + + witness-demo: + image: weboftrust/keri-witness-demo:1.1.0 + healthcheck: + test: ['CMD', 'curl', '-f', 'http://localhost:5642/oobi'] + interval: 2s + timeout: 3s + retries: 5 + start_period: 2s + volumes: + - ./config/witness-demo:/keripy/scripts/keri/cf/main + ports: + - 5642:5642 + - 5643:5643 + - 5644:5644 + + deps: + image: alpine + command: ['echo', 'Dependencies running'] + depends_on: + vlei-server: + condition: service_healthy + keria: + condition: service_healthy + witness-demo: + condition: service_healthy diff --git a/examples/integration-scripts/single-issuer-holder.test.ts b/examples/integration-scripts/single-issuer-holder.test.ts new file mode 100644 index 00000000..bea64a74 --- /dev/null +++ b/examples/integration-scripts/single-issuer-holder.test.ts @@ -0,0 +1,315 @@ +import assert from 'node:assert'; +import signify, { + SignifyClient, + CredentialResult, + messagize, + d, + Siger, +} from 'signify-ts'; + +const URL = 'http://127.0.0.1:3901'; +const BOOT_URL = 'http://127.0.0.1:3903'; +const WITNESS_HOST = process.env.WITNESS_HOST ?? 'witness-demo'; +const WITNESSES = [`http://${WITNESS_HOST}:5642/oobi`]; + +const SCHEMA_HOST = process.env.SCHEMA_HOST ?? 'vlei-server'; +const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const SCHEMA_OOBI = `http://${SCHEMA_HOST}:7723/oobi/${SCHEMA_SAID}`; + +function createTimestamp() { + const dt = new Date().toISOString().replace('Z', '000+00:00'); + return dt; +} + +async function connect(url: string, bootUrl: string) { + const client = new signify.SignifyClient( + url, + signify.randomPasscode(), + signify.Tier.low, + bootUrl + ); + + await client.boot(); + await client.connect(); + + return client; +} + +async function createIdentifier( + client: signify.SignifyClient, + name: string, + witnesses: string[] +) { + const icpResult1 = await client.identifiers().create(name, { + toad: witnesses.length, + wits: witnesses, + }); + const op = await icpResult1.op(); + await waitOperation(client, op.name, 5000); + const aid = await client.identifiers().get(name); + + if (!client.agent) { + throw new Error('No agent on client'); + } + + await client.identifiers().addEndRole(name, 'agent', client.agent.pre); + + return aid.prefix; +} + +async function getAgentOobi( + client: signify.SignifyClient, + name: string +): Promise { + const result = await client.oobis().get(name, 'agent'); + return result.oobis[0]; +} + +async function resolveOobi(client: SignifyClient, oobi: string, alias: string) { + console.log(`Resolve ${alias} -> ${oobi}`); + const op = await client.oobis().resolve(oobi, alias); + const result = await waitOperation(client, op.name, 5000); + return result.response; +} + +async function createRegistry( + client: SignifyClient, + name: string, + registryName: string +) { + const result = await client.registries().create({ name, registryName }); + const op = await result.op(); + await waitOperation(client, op.name, 5000); + + const registries = await client.registries().list(name); + assert.equal(registries.length, 1); + assert.equal(registries[0].name, registryName); + + return registries[0]; +} + +async function issueCredential( + client: SignifyClient, + name: string, + args: { registry: string; schema: string; recipient: string; data: unknown } +) { + const result: CredentialResult = await client + .credentials() + .issue(name, args.registry, args.schema, args.recipient, args.data); + + const op = await result.op(); + await waitOperation(client, op.name, 5000); + + const creds = await client.credentials().list(); + assert.equal(creds.length, 1); + assert.equal(creds[0].sad.s, args.schema); + assert.equal(creds[0].status.s, '0'); + + const acdc = new signify.Serder(result.acdc); + const iss = result.iserder; + const ianc = result.anc; + + const sigers = result.sigs.map((sig: string) => new Siger({ qb64: sig })); + const ims = d(messagize(ianc, sigers)); + + const atc = ims.substring(result.anc.size); + const dt = createTimestamp(); + + const [grant, gsigs, end] = await client + .ipex() + .grant( + name, + args.recipient, + '', + acdc, + result.acdcSaider, + iss, + result.issExnSaider, + result.anc, + atc, + undefined, + dt + ); + await client + .exchanges() + .sendFromEvents(name, 'credential', grant, gsigs, end, [ + args.recipient, + ]); + + console.log('Grant message sent'); + + return creds[0]; +} + +interface Notification { + i: string; + dt: string; + r: boolean; + a: { r: string; d?: string; m?: string }; +} + +async function waitForNotification( + client: SignifyClient, + route: string +): Promise { + // eslint-disable-next-line no-constant-condition + while (true) { + const notifications = await client.notifications().list(); + for (const notif of notifications.notes) { + if (notif.a.r == route) { + return notif; + } + } + + await new Promise((resolve) => setTimeout(resolve, 1000)); + } +} + +async function admitCredential( + client: SignifyClient, + name: string, + said: string, + recipient: string +) { + const dt = createTimestamp(); + + const [admit, sigs, end] = await client.ipex().admit(name, '', said, dt); + + await client.ipex().submitAdmit(name, admit, sigs, end, [recipient]); +} + +async function wait(fn: () => Promise, timeout: number = 10000) { + const start = Date.now(); + const errors: Error[] = []; + while (Date.now() - start < timeout) { + try { + const result = await fn(); + return result; + } catch (error) { + errors.push(error as Error); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + } + + throw new RetryError(`Retry failed after ${Date.now() - start} ms`, errors); +} + +async function waitOperation( + client: SignifyClient, + name: string, + timeout?: number +): Promise { + const now = Date.now(); + let op = await client.operations().get(name); + + while (!op['done']) { + op = await client.operations().get(name); + if (op['done']) { + return op; + } + + const elapsed = Date.now() - now; + if (timeout !== undefined && elapsed > timeout) { + throw new Error( + `Operation '${op.name}' time out after ${elapsed} ms` + ); + } + + await new Promise((resolve) => setTimeout(resolve, 1000)); + } +} + +class RetryError extends Error { + constructor( + message: string, + public errors: Error[] + ) { + super(message); + } +} + +test( + 'Single issuer holder', + async () => { + await signify.ready(); + const issuerClient = await connect(URL, BOOT_URL); + const holderClient = await connect(URL, BOOT_URL); + + await issuerClient.state(); + await holderClient.state(); + + const issuerWits = await Promise.all( + WITNESSES.map(async (oobi, i) => { + const result = await resolveOobi( + issuerClient, + oobi, + `witness-${i}` + ); + return result.i; + }) + ); + + const holderWits = await Promise.all( + WITNESSES.map(async (oobi, i) => { + const result = await resolveOobi( + holderClient, + oobi, + `witness-${i}` + ); + return result.i; + }) + ); + + // Create two identifiers, one for each client + const issuerPrefix = await createIdentifier( + issuerClient, + 'issuer', + issuerWits + ); + const holderPrefix = await createIdentifier( + holderClient, + 'holder', + holderWits + ); + + // Exchange OOBIs + const issuerOobi = await getAgentOobi(issuerClient, 'issuer'); + const holderOobi = await getAgentOobi(holderClient, 'holder'); + await resolveOobi(issuerClient, holderOobi, 'holder'); + await resolveOobi(issuerClient, SCHEMA_OOBI, 'schema'); + await resolveOobi(holderClient, issuerOobi, 'issuer'); + await resolveOobi(holderClient, SCHEMA_OOBI, 'schema'); + + await createRegistry(issuerClient, 'issuer', 'vLEI'); + + const registires = await issuerClient.registries().list('issuer'); + await issueCredential(issuerClient, 'issuer', { + registry: registires[0].regk, + schema: SCHEMA_SAID, + recipient: holderPrefix, + data: { + LEI: '5493001KJTIIGC8Y1R17', + }, + }); + + const grantNotification = await waitForNotification( + holderClient, + '/exn/ipex/grant' + ); + + await admitCredential( + holderClient, + 'holder', + grantNotification.a.d!, + issuerPrefix + ); + + await holderClient.notifications().mark(grantNotification.i); + + await wait(async () => { + const creds = await holderClient.credentials().list(); + assert(creds.length >= 1); + }); + }, + 1000 * 60 * 5 +); diff --git a/examples/integration-scripts/single-issuer-holder.ts b/examples/integration-scripts/single-issuer-holder.ts deleted file mode 100644 index 9d23b61b..00000000 --- a/examples/integration-scripts/single-issuer-holder.ts +++ /dev/null @@ -1,273 +0,0 @@ -import { strict as assert } from 'assert'; -import signify, { - CredentialResult, - Serder, - Siger, - SignifyClient, - d, - messagize, -} from 'signify-ts'; - -const URL = 'http://127.0.0.1:3901'; -const BOOT_URL = 'http://127.0.0.1:3903'; -const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; -const WITNESS_AIDS: string[] = []; // ['BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha']; -const SCHEMA_OOBI = - 'http://127.0.0.1:7723/oobi/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; - -await run(); - -function createTimestamp() { - const dt = new Date().toISOString().replace('Z', '000+00:00'); - return dt; -} - -async function connect() { - const client = new signify.SignifyClient( - URL, - signify.randomPasscode(), - signify.Tier.low, - BOOT_URL - ); - - await client.boot(); - await client.connect(); - - return client; -} - -async function createIdentifier(client: signify.SignifyClient, name: string) { - const icpResult1 = await client.identifiers().create(name, { - toad: WITNESS_AIDS.length, - wits: WITNESS_AIDS, - }); - let op = await icpResult1.op(); - while (!op.done) { - op = await client.operations().get(op.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - const aid = await client.identifiers().get(name); - - if (!client.agent) { - throw new Error('No agent on client'); - } - - await client.identifiers().addEndRole(name, 'agent', client.agent.pre); - - return aid.prefix; -} - -async function getAgentOobi( - client: SignifyClient, - name: string -): Promise { - const result = await client.oobis().get(name, 'agent'); - return result.oobis[0]; -} - -async function resolveOobi( - client: SignifyClient, - oobi: string, - alias: string -): Promise { - console.log(`Resolve ${alias} -> ${oobi}`); - let op = await client.oobis().resolve(oobi, alias); - while (!op['done']) { - op = await client.operations().get(op.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } -} - -async function createRegistry( - client: SignifyClient, - name: string, - registryName: string -) { - const result = await client.registries().create({ name, registryName }); - let op = await result.op(); - while (!op['done']) { - op = await client.operations().get(op.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - - const registries = await client.registries().list(name); - assert.equal(registries.length, 1); - assert.equal(registries[0].name, registryName); - - return registries[0]; -} - -async function issueCredential( - client: SignifyClient, - name: string, - args: { registry: string; schema: string; recipient: string; data: unknown } -) { - const result: CredentialResult = await client - .credentials() - .issue(name, args.registry, args.schema, args.recipient, args.data); - - let op = await result.op(); - while (!op['done']) { - op = await client.operations().get(op.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - - const creds = await client.credentials().list(); - assert.equal(creds.length, 1); - assert.equal(creds[0].sad.s, SCHEMA_SAID); - assert.equal(creds[0].status.s, '0'); - - const acdc = new Serder(result.acdc); - const iss = result.iserder; - const ianc = result.anc; - - const sigers = result.sigs.map((sig: string) => new Siger({ qb64: sig })); - const ims = d(messagize(ianc, sigers)); - - const atc = ims.substring(result.anc.size); - const dt = createTimestamp(); - - const [grant, gsigs, end] = await client - .ipex() - .grant( - name, - args.recipient, - '', - acdc, - result.acdcSaider, - iss, - result.issExnSaider, - result.anc, - atc, - undefined, - dt - ); - await client - .exchanges() - .sendFromEvents(name, 'credential', grant, gsigs, end, [ - args.recipient, - ]); - - console.log('Grant message sent'); - - return creds[0]; -} - -interface Notification { - i: string; - dt: string; - r: boolean; - a: { r: string; d?: string; m?: string }; -} - -async function waitForNotification( - client: SignifyClient, - route: string -): Promise { - while (true) { - let notifications = await client.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == route) { - return notif; - } - } - - await new Promise((resolve) => setTimeout(resolve, 1000)); - } -} - -async function admitCredential( - client: SignifyClient, - name: string, - said: string, - recipient: string -) { - const dt = createTimestamp(); - - const [admit, sigs, end] = await client.ipex().admit(name, '', said, dt); - - await client.ipex().submitAdmit(name, admit, sigs, end, [recipient]); -} - -async function run() { - await signify.ready(); - // Boot three clients - const issuerClient = await connect(); - const holderClient = await connect(); - - const issuerState = await issuerClient.state(); - const holderState = await holderClient.state(); - console.log( - 'Issuer connected. Client AID:', - issuerState.controller.state.i, - 'Agent AID: ', - issuerState.agent.i - ); - console.log( - 'Holder connected. Client AID:', - holderState.controller.state.i, - 'Agent AID: ', - holderState.agent.i - ); - - // Create two identifiers, one for each client - const issuerPrefix = await createIdentifier(issuerClient, 'issuer'); - const holderPrefix = await createIdentifier(holderClient, 'holder'); - console.log("Issuer's AID: ", issuerPrefix); - console.log("Holder's AID: ", holderPrefix); - - // Exchange OOBIs - console.log('Resolving OOBIs...'); - const issuerOobi = await getAgentOobi(issuerClient, 'issuer'); - const holderOobi = await getAgentOobi(holderClient, 'holder'); - await resolveOobi(issuerClient, holderOobi, 'holder'); - await resolveOobi(issuerClient, SCHEMA_OOBI, 'schema'); - await resolveOobi(holderClient, issuerOobi, 'issuer'); - await resolveOobi(holderClient, SCHEMA_OOBI, 'schema'); - - console.log('Resolved oobis'); - - await createRegistry(issuerClient, 'issuer', 'vLEI'); - - // Issue credential - const registires = await issuerClient.registries().list('issuer'); - const creds = await issueCredential(issuerClient, 'issuer', { - registry: registires[0].regk, - schema: SCHEMA_SAID, - recipient: holderPrefix, - data: { - LEI: '5493001KJTIIGC8Y1R17', - }, - }); - - console.log('Credential issued', creds); - - const grantNotification = await waitForNotification( - holderClient, - '/exn/ipex/grant' - ); - - console.log(grantNotification); - - await admitCredential( - holderClient, - 'holder', - grantNotification.a.d!, - issuerPrefix - ); - console.log('Admit sent!'); - - await holderClient.notifications().mark(grantNotification.i); - console.log('Notification marked!'); - - console.log('Listing credentials...'); - let credentials = await holderClient.credentials().list(); - while (credentials.length < 1) { - console.log('No credentials yet...'); - await new Promise((resolve) => setTimeout(resolve, 1000)); - credentials = await holderClient.credentials().list(); - } - - console.log('Succeeded'); - console.dir(credentials, { depth: 15 }); -} diff --git a/package.json b/package.json index 810703be..e97d8838 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,10 @@ "start": "npm run build:esm -- --watch", "build:cjs": "esbuild src/index.ts --bundle --outfile=dist/signify-ts.cjs --platform=neutral --format=cjs --sourcemap --packages=external", "build:esm": "esbuild src/index.ts --bundle --outfile=dist/signify-ts.mjs --platform=neutral --format=esm --sourcemap --packages=external", - "build:types": "tsc --declaration --outDir dist", + "build:types": "tsc -p tsconfig.build.json", "build": "npm run build:cjs && npm run build:esm && npm run build:types", - "test": "jest", + "test": "jest test/", + "test:integration": "jest examples/integration-scripts/", "lint": "npx eslint src test examples/integration-scripts examples/scripts", "prepare": "npm run build", "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..9ef7bc0b --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "include": ["src", "types"], + "extends": "./tsconfig.node.json", + "compilerOptions": { + "outDir": "dist", + "declaration": true, + "emitDeclarationOnly": true + } +} diff --git a/tsconfig.json b/tsconfig.json index 0c6dda3c..75753aef 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,8 @@ { - "include": ["src", "types"], + "include": ["src", "types", "test", "examples/integration-scripts"], "extends": "./tsconfig.node.json", "compilerOptions": { - "outDir": "dist", - "declaration": true, - "emitDeclarationOnly": true + "noEmit": true, + "allowImportingTsExtensions": true } } From f1585fc3cc4d1a73ad15c9b9551f710193b5b05e Mon Sep 17 00:00:00 2001 From: lenkan Date: Mon, 27 Nov 2023 15:11:58 +0100 Subject: [PATCH 101/186] add witness and randy integration tests add runInBand to avoid concurrency issues add salty, external module tests --- ...ternalModule.ts => externalModule.test.ts} | 6 ++--- .../integration-scripts/modules/bip39_shim.ts | 6 ++--- .../{randy.ts => randy.test.ts} | 17 ++++---------- .../{salty.ts => salty.test.ts} | 8 +++---- .../{witness.ts => witness.test.ts} | 23 +++++++++---------- package.json | 2 +- 6 files changed, 24 insertions(+), 38 deletions(-) rename examples/integration-scripts/{externalModule.ts => externalModule.test.ts} (96%) rename examples/integration-scripts/{randy.ts => randy.test.ts} (87%) rename examples/integration-scripts/{salty.ts => salty.test.ts} (98%) rename examples/integration-scripts/{witness.ts => witness.test.ts} (83%) diff --git a/examples/integration-scripts/externalModule.ts b/examples/integration-scripts/externalModule.test.ts similarity index 96% rename from examples/integration-scripts/externalModule.ts rename to examples/integration-scripts/externalModule.test.ts index 4651137a..85995b48 100644 --- a/examples/integration-scripts/externalModule.ts +++ b/examples/integration-scripts/externalModule.test.ts @@ -5,9 +5,7 @@ import { BIP39Shim } from './modules/bip39_shim'; const url = 'http://127.0.0.1:3901'; const boot_url = 'http://127.0.0.1:3903'; -await run(); - -async function run() { +test('bip39_ship', async () => { await signify.ready(); const bran1 = signify.randomPasscode(); const externalModule: signify.ExternalModule = { @@ -39,4 +37,4 @@ async function run() { }); let op = await icpResult.op(); assert.equal(op['done'], true); -} +}, 30000); diff --git a/examples/integration-scripts/modules/bip39_shim.ts b/examples/integration-scripts/modules/bip39_shim.ts index b9ef7d59..c8a624ff 100644 --- a/examples/integration-scripts/modules/bip39_shim.ts +++ b/examples/integration-scripts/modules/bip39_shim.ts @@ -1,4 +1,4 @@ -import bip39 from 'bip39'; +import { mnemonicToSeedSync, generateMnemonic } from 'bip39'; import { Diger, Signer, MtrDex } from 'signify-ts'; export class BIP39Shim { @@ -36,7 +36,7 @@ export class BIP39Shim { let keys = []; for (let idx = 0; idx < count; idx++) { let keyId = `${this.stem}-${this.pidx}-${kidx + idx}`; - let seed = bip39.mnemonicToSeedSync(this.mnemonics, keyId); + let seed = mnemonicToSeedSync(this.mnemonics, keyId); let signer = new Signer({ raw: new Uint8Array(seed), code: MtrDex.Ed25519_Seed, @@ -141,6 +141,6 @@ export class BIP39Shim { } generateMnemonic(strength: number) { - return bip39.generateMnemonic(strength); + return generateMnemonic(strength); } } diff --git a/examples/integration-scripts/randy.ts b/examples/integration-scripts/randy.test.ts similarity index 87% rename from examples/integration-scripts/randy.ts rename to examples/integration-scripts/randy.test.ts index 5c925e85..8dce2590 100644 --- a/examples/integration-scripts/randy.ts +++ b/examples/integration-scripts/randy.test.ts @@ -4,9 +4,7 @@ import signify from 'signify-ts'; const url = 'http://127.0.0.1:3901'; const boot_url = 'http://127.0.0.1:3903'; -await run(); - -async function run() { +test('randy', async () => { await signify.ready(); // Boot client const bran1 = signify.randomPasscode(); @@ -18,13 +16,7 @@ async function run() { ); await client1.boot(); await client1.connect(); - const state1 = await client1.state(); - console.log( - 'Client 1 connected. Client AID:', - state1.controller.state.i, - 'Agent AID: ', - state1.agent.i - ); + await client1.state(); let icpResult = await client1 .identifiers() @@ -50,7 +42,7 @@ async function run() { let ked = op['response']; let ixn = new signify.Serder(ked); assert.equal(ixn.ked['s'], '1'); - assert.deepEqual(ixn.ked['a'], [icp.pre]); + assert.deepEqual([...ixn.ked['a']], [icp.pre]); aids = await client1.identifiers().list(); assert.equal(aids.aids.length, 1); @@ -77,5 +69,4 @@ async function run() { assert.equal(dig.qb64, icp.digers[0].qb64); log = await events.get(aid['prefix']); assert.equal(log.length, 3); - console.log('Randy test passed'); -} +}, 30000); diff --git a/examples/integration-scripts/salty.ts b/examples/integration-scripts/salty.test.ts similarity index 98% rename from examples/integration-scripts/salty.ts rename to examples/integration-scripts/salty.test.ts index 281881e3..6013a26c 100644 --- a/examples/integration-scripts/salty.ts +++ b/examples/integration-scripts/salty.test.ts @@ -4,9 +4,7 @@ import signify from 'signify-ts'; const url = 'http://127.0.0.1:3901'; const boot_url = 'http://127.0.0.1:3903'; -await run(); - -async function run() { +test('salty', async () => { await signify.ready(); // Boot client const bran1 = signify.randomPasscode(); @@ -145,7 +143,7 @@ async function run() { let ixn = new signify.Serder(ked); assert.equal(ixn.ked['d'], 'ENsmRAg_oM7Hl1S-GTRMA7s4y760lQMjzl0aqOQ2iTce'); assert.equal(ixn.ked['s'], '2'); - assert.deepEqual(ixn.ked['a'], [icp.pre]); + assert.deepEqual([...ixn.ked['a']], [icp.pre]); aid = await client1.identifiers().get('aid1'); const state = aid['state']; @@ -169,4 +167,4 @@ async function run() { assert.equal(serder.pre, ixn.pre); assert.equal(serder.ked['d'], ixn.ked['d']); console.log('Salty test passed'); -} +}, 30000); diff --git a/examples/integration-scripts/witness.ts b/examples/integration-scripts/witness.test.ts similarity index 83% rename from examples/integration-scripts/witness.ts rename to examples/integration-scripts/witness.test.ts index 37a24a79..04c1d930 100644 --- a/examples/integration-scripts/witness.ts +++ b/examples/integration-scripts/witness.test.ts @@ -2,11 +2,12 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; +const WITNESS_HOST = process.env.WITNESS_HOST ?? 'witness-demo'; +const WITNESS_AID = 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'; const url = 'http://127.0.0.1:3901'; const boot_url = 'http://127.0.0.1:3903'; -await run(); -async function run() { +test('test witness', async () => { await signify.ready(); // Boot client const bran1 = signify.randomPasscode(); @@ -26,12 +27,10 @@ async function run() { state1.agent.i ); - const witness = 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'; - // Client 1 resolves witness OOBI let op1 = await client1 .oobis() - .resolve('http://127.0.0.1:5642/oobi/' + witness, 'wit'); + .resolve(`http://${WITNESS_HOST}:5642/oobi/` + WITNESS_AID, 'wit'); while (!op1['done']) { op1 = await client1.operations().get(op1.name); await new Promise((resolve) => setTimeout(resolve, 1000)); @@ -41,7 +40,7 @@ async function run() { // Client 1 creates AID with 1 witness let icpResult1 = await client1.identifiers().create('aid1', { toad: 1, - wits: ['BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'], + wits: [WITNESS_AID], }); op1 = await icpResult1.op(); while (!op1['done']) { @@ -51,7 +50,7 @@ async function run() { let aid1 = await client1.identifiers().get('aid1'); console.log('AID:', aid1.prefix); assert.equal(aid1.state.b.length, 1); - assert.equal(aid1.state.b[0], witness); + assert.equal(aid1.state.b[0], WITNESS_AID); icpResult1 = await client1.identifiers().rotate('aid1'); op1 = await icpResult1.op(); @@ -61,12 +60,12 @@ async function run() { } aid1 = await client1.identifiers().get('aid1'); assert.equal(aid1.state.b.length, 1); - assert.equal(aid1.state.b[0], witness); + assert.equal(aid1.state.b[0], WITNESS_AID); // Remove witness icpResult1 = await client1 .identifiers() - .rotate('aid1', { cuts: [witness] }); + .rotate('aid1', { cuts: [WITNESS_AID] }); op1 = await icpResult1.op(); while (!op1['done']) { @@ -80,7 +79,7 @@ async function run() { icpResult1 = await client1 .identifiers() - .rotate('aid1', { adds: [witness] }); + .rotate('aid1', { adds: [WITNESS_AID] }); op1 = await icpResult1.op(); while (!op1['done']) { @@ -90,5 +89,5 @@ async function run() { aid1 = await client1.identifiers().get('aid1'); assert.equal(aid1.state.b.length, 1); assert.equal(aid1.state.b.length, 1); - assert.equal(aid1.state.b[0], witness); -} + assert.equal(aid1.state.b[0], WITNESS_AID); +}, 30000); diff --git a/package.json b/package.json index e97d8838..a75d79af 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "build:types": "tsc -p tsconfig.build.json", "build": "npm run build:cjs && npm run build:esm && npm run build:types", "test": "jest test/", - "test:integration": "jest examples/integration-scripts/", + "test:integration": "jest examples/integration-scripts/ --runInBand", "lint": "npx eslint src test examples/integration-scripts examples/scripts", "prepare": "npm run build", "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", From da2e82d2cc2b36c28364382aca434c80d0f01cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Lenksj=C3=B6?= <5889538+lenkan@users.noreply.github.com> Date: Tue, 28 Nov 2023 09:58:35 +0100 Subject: [PATCH 102/186] Update examples/integration-scripts/externalModule.test.ts Fix spelling error --- examples/integration-scripts/externalModule.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/integration-scripts/externalModule.test.ts b/examples/integration-scripts/externalModule.test.ts index 85995b48..f8048cea 100644 --- a/examples/integration-scripts/externalModule.test.ts +++ b/examples/integration-scripts/externalModule.test.ts @@ -5,7 +5,7 @@ import { BIP39Shim } from './modules/bip39_shim'; const url = 'http://127.0.0.1:3901'; const boot_url = 'http://127.0.0.1:3903'; -test('bip39_ship', async () => { +test('bip39_shim', async () => { await signify.ready(); const bran1 = signify.randomPasscode(); const externalModule: signify.ExternalModule = { From a7b6b6ef61588ba3aa37e0a5b549e3ac763435cc Mon Sep 17 00:00:00 2001 From: lenkan Date: Tue, 28 Nov 2023 14:01:48 +0100 Subject: [PATCH 103/186] add multisig to integration tests --- .../{multisig.ts => multisig.test.ts} | 293 ++++++++++-------- 1 file changed, 169 insertions(+), 124 deletions(-) rename examples/integration-scripts/{multisig.ts => multisig.test.ts} (87%) diff --git a/examples/integration-scripts/multisig.ts b/examples/integration-scripts/multisig.test.ts similarity index 87% rename from examples/integration-scripts/multisig.ts rename to examples/integration-scripts/multisig.test.ts index d7c5c40a..a0af2b91 100644 --- a/examples/integration-scripts/multisig.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -1,40 +1,51 @@ import { strict as assert } from 'assert'; -import signify, { Serder } from 'signify-ts'; -import { SignifyClient } from '../../dist'; - -const url = 'http://127.0.0.1:3901'; -const boot_url = 'http://127.0.0.1:3903'; - -await run(); - -async function run() { +import signify, { SignifyClient, Serder } from 'signify-ts'; + +const URL = 'http://127.0.0.1:3901'; +const BOOT_URL = 'http://127.0.0.1:3903'; +const WITNESS_HOST = process.env.WITHESS_HOST ?? "witness-demo"; +const WITNESS_OOBIS = [ + `http://${WITNESS_HOST}:5642/oobi`, + `http://${WITNESS_HOST}:5643/oobi`, + `http://${WITNESS_HOST}:5644/oobi`, +]; + +const SCHEMA_HOST = process.env.SCHEMA_HOST ?? 'vlei-server'; +const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const SCHEMA_OOBI = `http://${SCHEMA_HOST}:7723/oobi/${SCHEMA_SAID}`; + +test('multisig', async function run() { await signify.ready(); // Boot Four clients - const client1 = await bootClient(); - const client2 = await bootClient(); - const client3 = await bootClient(); - const client4 = await bootClient(); + const [client1, client2, client3, client4] = await Promise.all([ + bootClient(), + bootClient(), + bootClient(), + bootClient(), + ]); // Create four identifiers, one for each client - let aid1 = await createAID(client1, 'member1'); - let aid2 = await createAID(client2, 'member2'); - let aid3 = await createAID(client3, 'member3'); - let aid4 = await createAID(client4, 'holder'); + let [aid1, aid2, aid3, aid4] = await Promise.all([ + createAID(client1, 'member1', WITNESS_OOBIS), + createAID(client2, 'member2', WITNESS_OOBIS), + createAID(client3, 'member3', WITNESS_OOBIS), + createAID(client4, 'holder', WITNESS_OOBIS), + ]); // Exchange OOBIs - let schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; - let schemaOobi = 'http://127.0.0.1:7723/oobi/' + schemaSAID; console.log('Resolving OOBIs'); - let oobi1 = await client1.oobis().get('member1', 'agent'); - let oobi2 = await client2.oobis().get('member2', 'agent'); - let oobi3 = await client3.oobis().get('member3', 'agent'); - let oobi4 = await client4.oobis().get('holder', 'agent'); + const [oobi1, oobi2, oobi3, oobi4] = await Promise.all([ + client1.oobis().get('member1', 'agent'), + client2.oobis().get('member2', 'agent'), + client3.oobis().get('member3', 'agent'), + client4.oobis().get('holder', 'agent'), + ]); let op1 = await client1.oobis().resolve(oobi2.oobis[0], 'member2'); op1 = await waitForOp(client1, op1); op1 = await client1.oobis().resolve(oobi3.oobis[0], 'member3'); op1 = await waitForOp(client1, op1); - op1 = await client1.oobis().resolve(schemaOobi, 'schema'); + op1 = await client1.oobis().resolve(SCHEMA_OOBI, 'schema'); op1 = await waitForOp(client1, op1); op1 = await client1.oobis().resolve(oobi4.oobis[0], 'holder'); op1 = await waitForOp(client1, op1); @@ -44,7 +55,7 @@ async function run() { op2 = await waitForOp(client2, op2); op2 = await client2.oobis().resolve(oobi3.oobis[0], 'member3'); op2 = await waitForOp(client2, op2); - op2 = await client2.oobis().resolve(schemaOobi, 'schema'); + op2 = await client2.oobis().resolve(SCHEMA_OOBI, 'schema'); op2 = await waitForOp(client2, op2); op2 = await client2.oobis().resolve(oobi4.oobis[0], 'holder'); op2 = await waitForOp(client2, op2); @@ -54,7 +65,7 @@ async function run() { op3 = await waitForOp(client3, op3); op3 = await client3.oobis().resolve(oobi2.oobis[0], 'member2'); op3 = await waitForOp(client3, op3); - op3 = await client3.oobis().resolve(schemaOobi, 'schema'); + op3 = await client3.oobis().resolve(SCHEMA_OOBI, 'schema'); op3 = await waitForOp(client3, op3); op3 = await client3.oobis().resolve(oobi4.oobis[0], 'holder'); op3 = await waitForOp(client3, op3); @@ -67,7 +78,7 @@ async function run() { op4 = await client4.oobis().resolve(oobi3.oobis[0], 'member3'); op4 = await waitForOp(client4, op4); - op4 = await client4.oobis().resolve(schemaOobi, 'schema'); + op4 = await client4.oobis().resolve(SCHEMA_OOBI, 'schema'); op4 = await waitForOp(client4, op4); console.log('Holder resolved 4 OOBIs'); @@ -110,12 +121,8 @@ async function run() { mhab: aid1, isith: 3, nsith: 3, - toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], + toad: aid1.state.b.length, + wits: aid1.state.b, states: states, rstates: rstates, }); @@ -336,7 +343,9 @@ async function run() { //Member2 check for notifications and join the authorization msgSaid = await waitForMessage(client2, '/multisig/rpy'); - console.log('Member2 received exchange message to join the end role authorization'); + console.log( + 'Member2 received exchange message to join the end role authorization' + ); res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; // stamp, eid and role are provided in the exn message @@ -382,7 +391,9 @@ async function run() { //Member3 check for notifications and join the authorization msgSaid = await waitForMessage(client3, '/multisig/rpy'); - console.log('Member3 received exchange message to join the end role authorization'); + console.log( + 'Member3 received exchange message to join the end role authorization' + ); res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; rpystamp = exn.e.rpy.dt; @@ -443,8 +454,8 @@ async function run() { let data = { i: 'EBgew7O4yp8SBle0FU-wwN3GtnaroI0BQfBGAj33QiIG', s: '0', - d: 'EBgew7O4yp8SBle0FU-wwN3GtnaroI0BQfBGAj33QiIG' - }; + d: 'EBgew7O4yp8SBle0FU-wwN3GtnaroI0BQfBGAj33QiIG', + }; let eventResponse1 = await client1.identifiers().interact('multisig', data); op1 = await eventResponse1.op(); serder = eventResponse1.serder; @@ -477,7 +488,9 @@ async function run() { // Member2 check for notifications and join the interaction event msgSaid = await waitForMessage(client2, '/multisig/ixn'); - console.log('Member2 received exchange message to join the interaction event'); + console.log( + 'Member2 received exchange message to join the interaction event' + ); res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; let ixn = exn.e.ixn; @@ -513,7 +526,9 @@ async function run() { // Member3 check for notifications and join the interaction event msgSaid = await waitForMessage(client3, '/multisig/ixn'); - console.log('Member3 received exchange message to join the interaction event'); + console.log( + 'Member3 received exchange message to join the interaction event' + ); res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; ixn = exn.e.ixn; @@ -597,7 +612,7 @@ async function run() { op4 = await waitForOp(client4, op4); op4 = await client4.keyStates().query(aid3.prefix, 1); op4 = await waitForOp(client4, op4); - + rstates = [aid1State, aid2State, aid3State]; states = rstates; @@ -718,7 +733,7 @@ async function run() { hab = await client1.identifiers().get('multisig'); aid = hab['prefix']; - + // Multisig Registry creation aid1 = await client1.identifiers().get('member1'); aid2 = await client2.identifiers().get('member2'); @@ -763,7 +778,9 @@ async function run() { // Member2 check for notifications and join the create registry event msgSaid = await waitForMessage(client2, '/multisig/vcp'); - console.log('Member2 received exchange message to join the create registry event'); + console.log( + 'Member2 received exchange message to join the create registry event' + ); res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; @@ -803,7 +820,9 @@ async function run() { // Member3 check for notifications and join the create registry event msgSaid = await waitForMessage(client3, '/multisig/vcp'); - console.log('Member3 received exchange message to join the create registry event'); + console.log( + 'Member3 received exchange message to join the create registry event' + ); res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; @@ -853,15 +872,15 @@ async function run() { const vcdata = { LEI: '5493001KJTIIGC8Y1R17', }; - let holder = aid4.prefix + let holder = aid4.prefix; - let TIME = new Date().toISOString().replace('Z', '000+00:00');; + let TIME = new Date().toISOString().replace('Z', '000+00:00'); let credRes = await client1 .credentials() .issue( 'multisig', regk, - schemaSAID, + SCHEMA_SAID, holder, vcdata, undefined, @@ -899,11 +918,15 @@ async function run() { recp ); - console.log('Member1 initiated credential creation, waiting for others to join...'); + console.log( + 'Member1 initiated credential creation, waiting for others to join...' + ); // Member2 check for notifications and join the credential create event msgSaid = await waitForMessage(client2, '/multisig/iss'); - console.log('Member2 received exchange message to join the credential create event'); + console.log( + 'Member2 received exchange message to join the credential create event' + ); res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; @@ -912,7 +935,7 @@ async function run() { .issue( 'multisig', regk2, - schemaSAID, + SCHEMA_SAID, holder, vcdata, undefined, @@ -953,7 +976,9 @@ async function run() { // Member3 check for notifications and join the create registry event msgSaid = await waitForMessage(client3, '/multisig/iss'); - console.log('Member3 received exchange message to join the credential create event'); + console.log( + 'Member3 received exchange message to join the credential create event' + ); res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; @@ -962,7 +987,7 @@ async function run() { .issue( 'multisig', regk3, - schemaSAID, + SCHEMA_SAID, holder, vcdata, undefined, @@ -1024,18 +1049,23 @@ async function run() { let [grant, gsigs, end] = await client1 .ipex() - .grant('multisig', holder, '', acdc, acdcSaider, iss, issExnSaider, ianc, atc1, undefined, stamp); + .grant( + 'multisig', + holder, + '', + acdc, + acdcSaider, + iss, + issExnSaider, + ianc, + atc1, + undefined, + stamp + ); await client1 .exchanges() - .sendFromEvents( - 'multisig', - 'credential', - grant, - gsigs, - end, - [holder] - ); + .sendFromEvents('multisig', 'credential', grant, gsigs, end, [holder]); mstate = m['state']; seal = [ @@ -1044,9 +1074,7 @@ async function run() { ]; sigers = gsigs.map((sig: any) => new signify.Siger({ qb64: sig })); - let gims = signify.d( - signify.messagize(grant, sigers, seal) - ); + let gims = signify.d(signify.messagize(grant, sigers, seal)); atc = gims.substring(grant.size); atc += end; let gembeds: any = { @@ -1064,8 +1092,10 @@ async function run() { gembeds, recp ); - - console.log('Member1 initiated grant message, waiting for others to join...'); + + console.log( + 'Member1 initiated grant message, waiting for others to join...' + ); msgSaid = await waitForMessage(client2, '/multisig/exn'); console.log('Member2 received exchange message to join the grant message'); @@ -1074,24 +1104,29 @@ async function run() { let [grant2, gsigs2, end2] = await client2 .ipex() - .grant('multisig', holder, '', acdc, acdcSaider, iss, issExnSaider, ianc, atc2, undefined, stamp); - - await client2 - .exchanges() - .sendFromEvents( + .grant( 'multisig', - 'credential', - grant2, - gsigs2, - end2, - [holder] + holder, + '', + acdc, + acdcSaider, + iss, + issExnSaider, + ianc, + atc2, + undefined, + stamp ); - + + await client2 + .exchanges() + .sendFromEvents('multisig', 'credential', grant2, gsigs2, end2, [ + holder, + ]); + sigers = gsigs2.map((sig: any) => new signify.Siger({ qb64: sig })); - gims = signify.d( - signify.messagize(grant2, sigers, seal) - ); + gims = signify.d(signify.messagize(grant2, sigers, seal)); atc = gims.substring(grant2.size); atc += end2; @@ -1120,24 +1155,29 @@ async function run() { let [grant3, gsigs3, end3] = await client3 .ipex() - .grant('multisig', holder, '', acdc, acdcSaider, iss, issExnSaider, ianc, atc3, undefined, stamp); - - await client3 - .exchanges() - .sendFromEvents( + .grant( 'multisig', - 'credential', - grant3, - gsigs3, - end3, - [holder] + holder, + '', + acdc, + acdcSaider, + iss, + issExnSaider, + ianc, + atc3, + undefined, + stamp ); + await client3 + .exchanges() + .sendFromEvents('multisig', 'credential', grant3, gsigs3, end3, [ + holder, + ]); + sigers = gsigs3.map((sig: any) => new signify.Siger({ qb64: sig })); - gims = signify.d( - signify.messagize(grant3, sigers, seal) - ); + gims = signify.d(signify.messagize(grant3, sigers, seal)); atc = gims.substring(grant3.size); atc += end3; @@ -1167,27 +1207,27 @@ async function run() { .ipex() .admit('holder', '', res.exn.d); - res = await client4.ipex().submitAdmit('holder', admit, asigs, aend, [m['prefix']] ); - + res = await client4 + .ipex() + .submitAdmit('holder', admit, asigs, aend, [m['prefix']]); + console.log('Holder creates and sends admit message'); msgSaid = await waitForMessage(client1, '/exn/ipex/admit'); console.log('Member1 received exchange message with the admit response'); - let creds = await client4.credentials().list('holder'); - console.log(`Holder holds ${creds.length} credential`) - + let creds = await client4.credentials().list(); + console.log(`Holder holds ${creds.length} credential`); +}, 240000); -} - -async function waitForOp(client:SignifyClient, op:any) { +async function waitForOp(client: SignifyClient, op: any) { while (!op['done']) { op = await client.operations().get(op.name); await new Promise((resolve) => setTimeout(resolve, 1000)); } - return op + return op; } -async function waitForMessage(client:SignifyClient, route:string) { +async function waitForMessage(client: SignifyClient, route: string) { let msgSaid = ''; while (msgSaid == '') { let notifications = await client.notifications().list(); @@ -1199,18 +1239,12 @@ async function waitForMessage(client:SignifyClient, route:string) { } await new Promise((resolve) => setTimeout(resolve, 1000)); } - return msgSaid - + return msgSaid; } -async function bootClient():Promise{ +async function bootClient(): Promise { let bran = signify.randomPasscode(); - let client = new signify.SignifyClient( - url, - bran, - signify.Tier.low, - boot_url - ); + let client = new SignifyClient(URL, bran, signify.Tier.low, BOOT_URL); await client.boot(); await client.connect(); let state = await client.state(); @@ -1220,24 +1254,35 @@ async function bootClient():Promise{ 'Agent AID: ', state.agent.i ); - return client + return client; } -async function createAID(client:SignifyClient, name:string){ +async function createAID( + client: SignifyClient, + name: string, + witnesses: string[] +) { + const wits = await resolveWitnessAids(client, witnesses); let icpResult1 = await client.identifiers().create(name, { - toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], + toad: wits.length, + wits: wits, }); let op = await icpResult1.op(); op = await waitForOp(client, op); let aid = await client.identifiers().get(name); - await client - .identifiers() - .addEndRole(name, 'agent', client!.agent!.pre); - console.log(name, "AID:", aid.prefix); - return aid + await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); + console.log(name, 'AID:', aid.prefix); + return aid; +} + +async function resolveWitnessAids(client: SignifyClient, oobis: string[]) { + return await Promise.all( + oobis.map(async (oobi) => { + const op = await waitForOp( + client, + await client.oobis().resolve(oobi) + ); + return op.response.i; + }) + ); } From 11198c2b6fbd5a62a79d114ee47a9061fded1b4c Mon Sep 17 00:00:00 2001 From: lenkan Date: Wed, 29 Nov 2023 17:40:35 +0100 Subject: [PATCH 104/186] add instructions for integration tests to readme --- README.md | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ad34ea32..21942284 100644 --- a/README.md +++ b/README.md @@ -39,13 +39,71 @@ The code is built using Typescript and running code locally requires a Mac or Li npm install ``` -Typescript source files needs to be transpiled before running scripts +Typescript source files needs to be transpiled before running scripts or integration tests - Build: ```bash npm run build ``` +### Unit testing + +To run unit tests + +```bash +npm test +``` + +### Integration testing + +The integration tests depends on a local instance of KERIA, vLEI-Server and Witness Demo. These are specified in the [Docker Compose](./docker-compose.yaml) file. To start the dependencies, use docker compose: + +```bash +docker compose up deps +``` + +If successful, it should print someting like this: + +```bash +$ docker compose up deps +[+] Running 5/4 + ✔ Network signify-ts_default Created 0.0s + ✔ Container signify-ts-vlei-server-1 Created 0.1s + ✔ Container signify-ts-keria-1 Created 0.1s + ✔ Container signify-ts-witness-demo-1 Created 0.1s + ✔ Container signify-ts-deps-1 Created 0.0s +Attaching to signify-ts-deps-1 +signify-ts-deps-1 | Dependencies running +signify-ts-deps-1 exited with code 0 +``` + +**Important!** The integration tests runs on the build output in `dist/` directory. Make sure to run build before running the integration tests. + +```bash +npm run build +``` + +Use the npm script "test:integration" to run all integration tests in sequence: + +```bash +npm run test:integration +``` + +Or, use execute `jest` directly to run a specific integration test, for example: + +```bash +npx jest examples/integration-scripts/credentials.test.ts +``` + +### Old integration scripts + +To run any of the old integration scripts that has not yet been converted to an integration test. Use `ts-node-esm` + +```bash +npx ts-node-esm examples/integration-scripts/challenge.ts +``` + +# Diagrams Account Creation Workflow From abfb94c8785435a032efca562a48d0b478667cee Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 30 Nov 2023 12:06:46 +0100 Subject: [PATCH 105/186] add a way to resolve to local environment instead of docker --- README.md | 8 ++++ .../externalModule.test.ts | 6 +-- examples/integration-scripts/randy.test.ts | 6 +-- examples/integration-scripts/salty.test.ts | 6 +-- .../single-issuer-holder.test.ts | 33 +++++++------- .../integration-scripts/utils/resolve-env.ts | 44 +++++++++++++++++++ examples/integration-scripts/witness.test.ts | 9 ++-- 7 files changed, 83 insertions(+), 29 deletions(-) create mode 100644 examples/integration-scripts/utils/resolve-env.ts diff --git a/README.md b/README.md index 21942284..fe4a70e6 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,14 @@ Or, use execute `jest` directly to run a specific integration test, for example: npx jest examples/integration-scripts/credentials.test.ts ``` +It is also possible to run the tests using local instances of vLEI, Keria, and witness network. Set the environment variable `TEST_ENVIRONMENT` to `local`, e.g: + +``` +TEST_ENVIRONMENT=local npx jest examples/integration-scripts/credentials.test.ts +``` + +This changes the discovery urls to use `localhost` instead of the hostnames inside the docker network. + ### Old integration scripts To run any of the old integration scripts that has not yet been converted to an integration test. Use `ts-node-esm` diff --git a/examples/integration-scripts/externalModule.test.ts b/examples/integration-scripts/externalModule.test.ts index f8048cea..aa4c13c2 100644 --- a/examples/integration-scripts/externalModule.test.ts +++ b/examples/integration-scripts/externalModule.test.ts @@ -1,9 +1,9 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { BIP39Shim } from './modules/bip39_shim'; +import { resolveEnvironment } from './utils/resolve-env'; -const url = 'http://127.0.0.1:3901'; -const boot_url = 'http://127.0.0.1:3903'; +const { url, bootUrl } = resolveEnvironment(); test('bip39_shim', async () => { await signify.ready(); @@ -17,7 +17,7 @@ test('bip39_shim', async () => { url, bran1, signify.Tier.low, - boot_url, + bootUrl, [externalModule] ); await client1.boot(); diff --git a/examples/integration-scripts/randy.test.ts b/examples/integration-scripts/randy.test.ts index 8dce2590..0a6d823f 100644 --- a/examples/integration-scripts/randy.test.ts +++ b/examples/integration-scripts/randy.test.ts @@ -1,8 +1,8 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; -const url = 'http://127.0.0.1:3901'; -const boot_url = 'http://127.0.0.1:3903'; +const { url, bootUrl } = resolveEnvironment(); test('randy', async () => { await signify.ready(); @@ -12,7 +12,7 @@ test('randy', async () => { url, bran1, signify.Tier.low, - boot_url + bootUrl ); await client1.boot(); await client1.connect(); diff --git a/examples/integration-scripts/salty.test.ts b/examples/integration-scripts/salty.test.ts index 6013a26c..9d1da56b 100644 --- a/examples/integration-scripts/salty.test.ts +++ b/examples/integration-scripts/salty.test.ts @@ -1,8 +1,8 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; -const url = 'http://127.0.0.1:3901'; -const boot_url = 'http://127.0.0.1:3903'; +const { url, bootUrl } = resolveEnvironment(); test('salty', async () => { await signify.ready(); @@ -12,7 +12,7 @@ test('salty', async () => { url, bran1, signify.Tier.low, - boot_url + bootUrl ); await client1.boot(); await client1.connect(); diff --git a/examples/integration-scripts/single-issuer-holder.test.ts b/examples/integration-scripts/single-issuer-holder.test.ts index bea64a74..9bac4fe3 100644 --- a/examples/integration-scripts/single-issuer-holder.test.ts +++ b/examples/integration-scripts/single-issuer-holder.test.ts @@ -6,15 +6,10 @@ import signify, { d, Siger, } from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; -const URL = 'http://127.0.0.1:3901'; -const BOOT_URL = 'http://127.0.0.1:3903'; -const WITNESS_HOST = process.env.WITNESS_HOST ?? 'witness-demo'; -const WITNESSES = [`http://${WITNESS_HOST}:5642/oobi`]; - -const SCHEMA_HOST = process.env.SCHEMA_HOST ?? 'vlei-server'; const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; -const SCHEMA_OOBI = `http://${SCHEMA_HOST}:7723/oobi/${SCHEMA_SAID}`; +const { bootUrl, url, vleiServerUrl, witnessUrls } = resolveEnvironment(); function createTimestamp() { const dt = new Date().toISOString().replace('Z', '000+00:00'); @@ -232,17 +227,17 @@ test( 'Single issuer holder', async () => { await signify.ready(); - const issuerClient = await connect(URL, BOOT_URL); - const holderClient = await connect(URL, BOOT_URL); + const issuerClient = await connect(url, bootUrl); + const holderClient = await connect(url, bootUrl); await issuerClient.state(); await holderClient.state(); const issuerWits = await Promise.all( - WITNESSES.map(async (oobi, i) => { + witnessUrls.map(async (url, i) => { const result = await resolveOobi( issuerClient, - oobi, + url + '/oobi', `witness-${i}` ); return result.i; @@ -250,10 +245,10 @@ test( ); const holderWits = await Promise.all( - WITNESSES.map(async (oobi, i) => { + witnessUrls.map(async (url, i) => { const result = await resolveOobi( holderClient, - oobi, + url + '/oobi', `witness-${i}` ); return result.i; @@ -276,9 +271,17 @@ test( const issuerOobi = await getAgentOobi(issuerClient, 'issuer'); const holderOobi = await getAgentOobi(holderClient, 'holder'); await resolveOobi(issuerClient, holderOobi, 'holder'); - await resolveOobi(issuerClient, SCHEMA_OOBI, 'schema'); + await resolveOobi( + issuerClient, + vleiServerUrl + '/oobi/' + SCHEMA_SAID, + 'schema' + ); await resolveOobi(holderClient, issuerOobi, 'issuer'); - await resolveOobi(holderClient, SCHEMA_OOBI, 'schema'); + await resolveOobi( + holderClient, + vleiServerUrl + '/oobi/' + SCHEMA_SAID, + 'schema' + ); await createRegistry(issuerClient, 'issuer', 'vLEI'); diff --git a/examples/integration-scripts/utils/resolve-env.ts b/examples/integration-scripts/utils/resolve-env.ts new file mode 100644 index 00000000..0f604a1c --- /dev/null +++ b/examples/integration-scripts/utils/resolve-env.ts @@ -0,0 +1,44 @@ +export type TestEnvironmentPreset = 'local' | 'docker'; + +export interface TestEnvironment { + url: string; + bootUrl: string; + vleiServerUrl: string; + witnessUrls: string[]; +} + +export function resolveEnvironment( + input?: TestEnvironmentPreset +): TestEnvironment { + const preset = input ?? process.env.TEST_ENVIRONMENT ?? 'docker'; + + const url = 'http://127.0.0.1:3901'; + const bootUrl = 'http://127.0.0.1:3903'; + + switch (preset) { + case 'docker': + return { + url, + bootUrl, + witnessUrls: [ + 'http://witness-demo:5642', + 'http://witness-demo:5643', + 'http://witness-demo:5644', + ], + vleiServerUrl: 'http://vlei-server:7723', + }; + case 'local': + return { + url, + bootUrl, + vleiServerUrl: 'http://localhost:7723', + witnessUrls: [ + 'http://localhost:5642', + 'http://localhost:5643', + 'http://localhost:5644', + ], + }; + default: + throw new Error(`Unknown test environment preset '${preset}'`); + } +} diff --git a/examples/integration-scripts/witness.test.ts b/examples/integration-scripts/witness.test.ts index 04c1d930..3de604b0 100644 --- a/examples/integration-scripts/witness.test.ts +++ b/examples/integration-scripts/witness.test.ts @@ -1,11 +1,10 @@ // This scrip also work if you start keria with no config file with witness urls import { strict as assert } from 'assert'; import signify from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; -const WITNESS_HOST = process.env.WITNESS_HOST ?? 'witness-demo'; const WITNESS_AID = 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'; -const url = 'http://127.0.0.1:3901'; -const boot_url = 'http://127.0.0.1:3903'; +const { url, bootUrl, witnessUrls } = resolveEnvironment(); test('test witness', async () => { await signify.ready(); @@ -15,7 +14,7 @@ test('test witness', async () => { url, bran1, signify.Tier.low, - boot_url + bootUrl ); await client1.boot(); await client1.connect(); @@ -30,7 +29,7 @@ test('test witness', async () => { // Client 1 resolves witness OOBI let op1 = await client1 .oobis() - .resolve(`http://${WITNESS_HOST}:5642/oobi/` + WITNESS_AID, 'wit'); + .resolve(witnessUrls[0] + `/oobi/${WITNESS_AID}`, 'wit'); while (!op1['done']) { op1 = await client1.operations().get(op1.name); await new Promise((resolve) => setTimeout(resolve, 1000)); From 12acc532f6dfb39ca764ce191660cbb007b09811 Mon Sep 17 00:00:00 2001 From: lenkan Date: Tue, 21 Nov 2023 14:04:33 +0100 Subject: [PATCH 106/186] enable integration tests for multisig.ts and credentials.ts - Adding args and result interfaces for issue and grant methods - Trying to clarify the flow of data --- .../{credentials.ts => credentials.test.ts} | 242 +++++------ examples/integration-scripts/multisig.test.ts | 317 ++++++--------- .../single-issuer-holder.test.ts | 105 ++--- src/keri/app/coring.ts | 10 +- src/keri/app/credentialing.ts | 377 ++++++++---------- src/keri/core/utils.ts | 18 +- test/app/credentialing.test.ts | 46 +-- test/core/utils.test.ts | 8 +- 8 files changed, 484 insertions(+), 639 deletions(-) rename examples/integration-scripts/{credentials.ts => credentials.test.ts} (72%) diff --git a/examples/integration-scripts/credentials.ts b/examples/integration-scripts/credentials.test.ts similarity index 72% rename from examples/integration-scripts/credentials.ts rename to examples/integration-scripts/credentials.test.ts index 39c7f632..64c03c44 100644 --- a/examples/integration-scripts/credentials.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -6,18 +6,30 @@ const boot_url = 'http://127.0.0.1:3903'; const WAN_WITNESS_AID = 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'; const WIL_WITNESS_AID = 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM'; const WES_WITNESS_AID = 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX'; +const WITNESS_HOST = 'witness-demo'; +const WITNESS_OOBIS = [ + `http://${WITNESS_HOST}:5642/oobi/${WAN_WITNESS_AID}/controller?name=Wan&tag=witness`, + `http://${WITNESS_HOST}:5643/oobi/${WIL_WITNESS_AID}/controller?name=Wil&tag=witness`, + `http://${WITNESS_HOST}:5644/oobi/${WES_WITNESS_AID}/controller?name=Wes&tag=witness`, +]; + const KLI_WITNESS_DEMO_PREFIXES = [ WAN_WITNESS_AID, WIL_WITNESS_AID, WES_WITNESS_AID, ]; +// Credential Schema discovery through credential schema OOBI resolution +const qviSchemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const vLEIServerHostUrl = 'http://vlei-server:7723/oobi'; +const schemaOobiUrl = `${vLEIServerHostUrl}/${qviSchemaSAID}`; + // Boots an agent and connects to it, returning the connected SignifyClient async function bootAndConnect( - bran: string = signify.randomPasscode(), - agentUrl: string = url, - bootUrl: string = boot_url, - tier: signify.Tier = signify.Tier.low + bran: string = signify.randomPasscode(), + agentUrl: string = url, + bootUrl: string = boot_url, + tier: signify.Tier = signify.Tier.low ) { const client = new signify.SignifyClient(agentUrl, bran, tier, bootUrl); await client.boot(); @@ -40,8 +52,8 @@ interface Notification { // checks for notifications on a route and returns them as an array async function waitForNotifications( - client: signify.SignifyClient, - route: string + client: signify.SignifyClient, + route: string ): Promise { const awaitedNotifications = []; while (true) { @@ -58,36 +70,44 @@ async function waitForNotifications( return awaitedNotifications; } -await run(); +async function resolveWitnesses(client: signify.SignifyClient) { + await Promise.all( + WITNESS_OOBIS.map((oobi) => client.oobis().resolve(oobi)) + ); +} -// main test function -async function run() { +test('credentials', async () => { await signify.ready(); // Boot three clients one each for issuer, holder, and verifier const issuerClient = await bootAndConnect(signify.randomPasscode()); const holderClient = await bootAndConnect(signify.randomPasscode()); const verifierClient = await bootAndConnect(signify.randomPasscode()); + await Promise.all([ + resolveWitnesses(issuerClient), + resolveWitnesses(holderClient), + resolveWitnesses(verifierClient), + ]); const state1 = await issuerClient.state(); const state2 = await holderClient.state(); const state3 = await verifierClient.state(); console.log( - 'Issuer connected.\n\tHolder Controller AID:', - state1.controller.state.i, - '\n\tIssuer Agent AID: ', - state1.agent.i + 'Issuer connected.\n\tHolder Controller AID:', + state1.controller.state.i, + '\n\tIssuer Agent AID: ', + state1.agent.i ); console.log( - 'Holder connected.\n\tHolder Controller AID:', - state2.controller.state.i, - '\n\tHolder Agent AID: ', - state2.agent.i + 'Holder connected.\n\tHolder Controller AID:', + state2.controller.state.i, + '\n\tHolder Agent AID: ', + state2.agent.i ); console.log( - 'Verifier connected.\n\tVerifier Controller AID:', - state3.controller.state.i, - '\n\tVerifier Agent AID: ', - state3.agent.i + 'Verifier connected.\n\tVerifier Controller AID:', + state3.controller.state.i, + '\n\tVerifier Agent AID: ', + state3.agent.i ); const issuerAidName = 'issuer'; @@ -105,7 +125,7 @@ async function run() { await new Promise((resolve) => setTimeout(resolve, 250)); } const issAidResp = await issuerClient.identifiers().get(issuerAidName); - const issuerAID = issAidResp.prefix + const issuerAID = issAidResp.prefix; await issuerClient .identifiers() .addEndRole(issuerAidName, 'agent', issuerClient!.agent!.pre); @@ -121,23 +141,25 @@ async function run() { await new Promise((resolve) => setTimeout(resolve, 250)); } const hldAidResp = await holderClient.identifiers().get(holderAidName); - const holderAID = hldAidResp.prefix + const holderAID = hldAidResp.prefix; await holderClient .identifiers() .addEndRole(holderAidName, 'agent', holderClient!.agent!.pre); console.log("Recipient's AID:", holderAID); - let verifierIcpRes = await verifierClient.identifiers().create(verifierAidName, { - toad: 3, - wits: [...KLI_WITNESS_DEMO_PREFIXES], - }); + let verifierIcpRes = await verifierClient + .identifiers() + .create(verifierAidName, { + toad: 3, + wits: [...KLI_WITNESS_DEMO_PREFIXES], + }); let vfyOp = await verifierIcpRes.op(); while (!vfyOp['done']) { vfyOp = await verifierClient.operations().get(vfyOp.name); await new Promise((resolve) => setTimeout(resolve, 250)); } const vfyAidResp = await verifierClient.identifiers().get(verifierAidName); - const verifierAID = vfyAidResp.prefix + const verifierAID = vfyAidResp.prefix; await verifierClient .identifiers() .addEndRole(verifierAidName, 'agent', verifierClient!.agent!.pre); @@ -148,11 +170,6 @@ async function run() { // OOBIs for credential schema and agent discovery console.log('Resolving Schema and Agent OOBIs...'); - // Credential Schema discovery through credential schema OOBI resolution - const qviSchemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; - const vLEIServerHostUrl = 'http://127.0.0.1:7723/oobi'; - let schemaOobiUrl = `${vLEIServerHostUrl}/${qviSchemaSAID}`; - console.log(`Resolving schema OOBIs with ${schemaOobiUrl}`); issOp = await issuerClient.oobis().resolve(schemaOobiUrl, 'schema'); while (!issOp['done']) { @@ -181,15 +198,21 @@ async function run() { console.log('Getting Agent OOBIs for issuer, holder, and verifier'); let issAgentOOBI = await issuerClient.oobis().get(issuerAidName, 'agent'); let hldAgentOOBI = await holderClient.oobis().get(holderAidName, 'agent'); - let vfyAgentOOBI = await verifierClient.oobis().get(verifierAidName, 'agent'); + let vfyAgentOOBI = await verifierClient + .oobis() + .get(verifierAidName, 'agent'); // issuer -> holder, verifier - issOp = await issuerClient.oobis().resolve(hldAgentOOBI.oobis[0], holderAidName); + issOp = await issuerClient + .oobis() + .resolve(hldAgentOOBI.oobis[0], holderAidName); while (!issOp['done']) { issOp = await issuerClient.operations().get(issOp.name); await new Promise((resolve) => setTimeout(resolve, 250)); } - issOp = await issuerClient.oobis().resolve(vfyAgentOOBI.oobis[0], verifierAidName); + issOp = await issuerClient + .oobis() + .resolve(vfyAgentOOBI.oobis[0], verifierAidName); while (!issOp['done']) { issOp = await issuerClient.operations().get(issOp.name); await new Promise((resolve) => setTimeout(resolve, 250)); @@ -197,12 +220,16 @@ async function run() { console.log('Issuer resolved 2 OOBIs: [holder, verifier]'); // holder -> issuer, verifier - hldOp = await holderClient.oobis().resolve(issAgentOOBI.oobis[0], issuerAidName); + hldOp = await holderClient + .oobis() + .resolve(issAgentOOBI.oobis[0], issuerAidName); while (!hldOp['done']) { hldOp = await holderClient.operations().get(hldOp.name); await new Promise((resolve) => setTimeout(resolve, 250)); } - hldOp = await holderClient.oobis().resolve(vfyAgentOOBI.oobis[0], verifierAidName); + hldOp = await holderClient + .oobis() + .resolve(vfyAgentOOBI.oobis[0], verifierAidName); while (!hldOp['done']) { hldOp = await holderClient.operations().get(hldOp.name); await new Promise((resolve) => setTimeout(resolve, 250)); @@ -210,12 +237,16 @@ async function run() { console.log('Holder resolved 2 OOBIs: [issuer, verifier]'); // verifier -> issuer, holder - vfyOp = await verifierClient.oobis().resolve(issAgentOOBI.oobis[0], issuerAidName); + vfyOp = await verifierClient + .oobis() + .resolve(issAgentOOBI.oobis[0], issuerAidName); while (!vfyOp['done']) { vfyOp = await verifierClient.operations().get(vfyOp.name); await new Promise((resolve) => setTimeout(resolve, 250)); } - vfyOp = await verifierClient.oobis().resolve(hldAgentOOBI.oobis[0], holderAidName); + vfyOp = await verifierClient + .oobis() + .resolve(hldAgentOOBI.oobis[0], holderAidName); while (!vfyOp['done']) { vfyOp = await verifierClient.operations().get(vfyOp.name); await new Promise((resolve) => setTimeout(resolve, 250)); @@ -247,10 +278,14 @@ async function run() { const vcdata = { LEI: '5493001KJTIIGC8Y1R17', }; - const issResult = await issuerClient - .credentials() - .issue(issuerAidName, registry.regk, schemaSAID, holderAID, vcdata); - issOp = await issResult.op(); + const issResult = await issuerClient.credentials().issue({ + issuerName: issuerAidName, + registryId: registry.regk, + schemaId: schemaSAID, + recipient: holderAID, + data: vcdata, + }); + issOp = issResult.op; while (!issOp['done']) { issOp = await issuerClient.operations().get(issOp.name); await new Promise((resolve) => setTimeout(resolve, 250)); @@ -260,36 +295,20 @@ async function run() { assert.equal(issCreds[0].sad.s, schemaSAID); assert.equal(issCreds[0].sad.i, issuerAID); assert.equal(issCreds[0].status.s, '0'); // 0 = issued - console.log(`Issuer: credential created with data: ${JSON.stringify(vcdata)}`); - - // prepare IPEX GRANT message - const acdc = new signify.Serder(issResult.acdc); - const iss = issResult.iserder; - const ianc = issResult.anc; - - const sigers = issResult.sigs.map( - (sig: string) => new signify.Siger({ qb64: sig }) + console.log( + `Issuer: credential created with data: ${JSON.stringify(vcdata)}` ); - const ims = signify.d(signify.messagize(ianc, sigers)); - const atc = ims.substring(ianc.size); // attachment - let dt = createTimestamp(); // grant datetime - - const [grant, gsigs, gend] = await issuerClient - .ipex() - .grant( - issuerAidName, - holderAID, - '', - acdc, - issResult.acdcSaider, - iss, - issResult.issExnSaider, - issResult.anc, - atc, - undefined, - dt - ); + // prepare IPEX GRANT message + const dt = createTimestamp(); // grant datetime + const [grant, gsigs, gend] = await issuerClient.ipex().grant({ + senderName: issuerAidName, + acdc: issResult.acdc, + anc: issResult.anc, + iss: issResult.iss, + recipient: holderAID, + datetime: dt, + }); await issuerClient .exchanges() .sendFromEvents(issuerAidName, 'credential', grant, gsigs, gend, [ @@ -300,22 +319,20 @@ async function run() { // from the holder's perspective - wait for GRANT notification, // perform admit, then mark GRANT notification as read const holderNotifications = await waitForNotifications( - holderClient, - '/exn/ipex/grant' + holderClient, + '/exn/ipex/grant' ); const grantNotification = holderNotifications[0]; // should only have one notification right now // Note: Credentials are no longer automatically accepted into a wallet. // Pending an implementation in KERIA there will be the ability to // auto-add credentials by automatically admitting credentials. - const [admit, sigs, aend] = await holderClient.ipex() - .admit( - holderAidName, - '', - grantNotification.a.d!, - createTimestamp()); - await holderClient.ipex() - .submitAdmit(holderAidName, admit, sigs, aend, [issuerAID]); + const [admit, sigs, aend] = await holderClient + .ipex() + .admit(holderAidName, '', grantNotification.a.d!, createTimestamp()); + await holderClient + .ipex() + .submitAdmit(holderAidName, admit, sigs, aend, [issuerAID]); console.log('Holder: IPEX ADMIT sent'); await holderClient.notifications().mark(grantNotification.i); @@ -329,28 +346,21 @@ async function run() { holderCreds = await holderClient.credentials().list(); } const hldVleiAcdc: any = holderCreds[0]; - assert.equal(holderCreds.length, 1) - assert.equal(hldVleiAcdc.sad.s, schemaSAID) - assert.equal(hldVleiAcdc.sad.i, issuerAID) - assert.equal(hldVleiAcdc.status.s, "0") // 0 = issued + assert.equal(holderCreds.length, 1); + assert.equal(hldVleiAcdc.sad.s, schemaSAID); + assert.equal(hldVleiAcdc.sad.i, issuerAID); + assert.equal(hldVleiAcdc.status.s, '0'); // 0 = issued console.log('Credential received by recipient'); // Present credential - const [grant2, gsigs2, gend2] = await holderClient - .ipex() - .grant( - holderAidName, - verifierAID, - '', - acdc, - issResult.acdcSaider, - iss, - issResult.issExnSaider, - issResult.anc, - atc, - undefined, - createTimestamp() - ); + const [grant2, gsigs2, gend2] = await holderClient.ipex().grant({ + senderName: holderAidName, + recipient: verifierAID, + acdc: issResult.acdc, + anc: issResult.anc, + iss: issResult.iss, + datetime: createTimestamp(), + }); await holderClient .exchanges() .sendFromEvents(holderAidName, 'presentation', grant2, gsigs2, gend2, [ @@ -360,15 +370,17 @@ async function run() { // Verifier check issued credential const verifierNotifications = await waitForNotifications( - verifierClient, - '/exn/ipex/grant' + verifierClient, + '/exn/ipex/grant' ); let verifierGrantNote = verifierNotifications[0]; - const [admit3, sigs3, aend3] = await verifierClient.ipex() - .admit(verifierAidName, '', verifierGrantNote.a.d!, createTimestamp()); - await verifierClient.ipex() - .submitAdmit(verifierAidName, admit3, sigs3, aend3, [holderAID]); + const [admit3, sigs3, aend3] = await verifierClient + .ipex() + .admit(verifierAidName, '', verifierGrantNote.a.d!, createTimestamp()); + await verifierClient + .ipex() + .submitAdmit(verifierAidName, admit3, sigs3, aend3, [holderAID]); console.log('Verifier: Admit sent for presentation'); await verifierClient.notifications().mark(verifierGrantNote.i); @@ -381,20 +393,22 @@ async function run() { await new Promise((resolve) => setTimeout(resolve, 250)); verifierCreds = await verifierClient.credentials().list(); } - assert.equal(verifierCreds.length, 1) - assert.equal(verifierCreds[0].sad.s, schemaSAID) - assert.equal(verifierCreds[0].sad.i, issuerAID) - assert.equal(verifierCreds[0].status.s, "0") // 0 = issued + assert.equal(verifierCreds.length, 1); + assert.equal(verifierCreds[0].sad.s, schemaSAID); + assert.equal(verifierCreds[0].sad.i, issuerAID); + assert.equal(verifierCreds[0].status.s, '0'); // 0 = issued console.log('Credential presented and received by verifier'); // Revoke credential - issOp = await issuerClient.credentials().revoke(issuerAidName, issCreds[0].sad.d); + issOp = await issuerClient + .credentials() + .revoke(issuerAidName, issCreds[0].sad.d); while (!issOp['done']) { issOp = await issuerClient.operations().get(issOp.name); await new Promise((resolve) => setTimeout(resolve, 250)); } issCreds = await issuerClient.credentials().list(); - const issVleiAcdc = issCreds[0] + const issVleiAcdc = issCreds[0]; assert.equal(issCreds.length, 1); assert.equal(issVleiAcdc.sad.s, schemaSAID); assert.equal(issVleiAcdc.sad.i, issuerAID); @@ -427,4 +441,4 @@ async function run() { // assert.equal(creds3[0].sad.i, aid1.prefix); // assert.equal(creds3[0].status.s, '1'); // 1 = revoked // console.log('Revocation presented and received by verifier'); -} +}, 60000); diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index a0af2b91..12b94632 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -1,18 +1,21 @@ import { strict as assert } from 'assert'; -import signify, { SignifyClient, Serder } from 'signify-ts'; - -const URL = 'http://127.0.0.1:3901'; -const BOOT_URL = 'http://127.0.0.1:3903'; -const WITNESS_HOST = process.env.WITHESS_HOST ?? "witness-demo"; -const WITNESS_OOBIS = [ - `http://${WITNESS_HOST}:5642/oobi`, - `http://${WITNESS_HOST}:5643/oobi`, - `http://${WITNESS_HOST}:5644/oobi`, +import signify, { + SignifyClient, + Serder, + IssueCredentialResult, +} from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; + +const { url, bootUrl, witnessUrls, vleiServerUrl } = resolveEnvironment(); +const WITNESS_AIDS = [ + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ]; -const SCHEMA_HOST = process.env.SCHEMA_HOST ?? 'vlei-server'; +const WITNESS_OOBIS = witnessUrls.map((url) => `${url}/oobi`); const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; -const SCHEMA_OOBI = `http://${SCHEMA_HOST}:7723/oobi/${SCHEMA_SAID}`; +const SCHEMA_OOBI = `${vleiServerUrl}/oobi/${SCHEMA_SAID}`; test('multisig', async function run() { await signify.ready(); @@ -26,10 +29,10 @@ test('multisig', async function run() { // Create four identifiers, one for each client let [aid1, aid2, aid3, aid4] = await Promise.all([ - createAID(client1, 'member1', WITNESS_OOBIS), - createAID(client2, 'member2', WITNESS_OOBIS), - createAID(client3, 'member3', WITNESS_OOBIS), - createAID(client4, 'holder', WITNESS_OOBIS), + createAID(client1, 'member1', WITNESS_AIDS), + createAID(client2, 'member2', WITNESS_AIDS), + createAID(client3, 'member3', WITNESS_AIDS), + createAID(client4, 'holder', WITNESS_AIDS), ]); // Exchange OOBIs @@ -875,48 +878,16 @@ test('multisig', async function run() { let holder = aid4.prefix; let TIME = new Date().toISOString().replace('Z', '000+00:00'); - let credRes = await client1 - .credentials() - .issue( - 'multisig', - regk, - SCHEMA_SAID, - holder, - vcdata, - undefined, - undefined, - TIME - ); - op1 = await credRes.op(); - - let acdc = new signify.Serder(credRes.acdc); - let iss = credRes.iserder; - let ianc = credRes.anc; - let isigs = credRes.sigs; - let acdcSaider = credRes.acdcSaider; - let issExnSaider = credRes.issExnSaider; - - sigers = isigs.map((sig: any) => new signify.Siger({ qb64: sig })); - ims = signify.d(signify.messagize(ianc, sigers)); - let atc1 = ims.substring(ianc.size); - - let vcembeds = { - acdc: [acdc, ''], - iss: [iss, ''], - anc: [ianc, atc1], - }; - recp = [aid2['state'], aid3['state']].map((state) => state['i']); - await client1 - .exchanges() - .send( - 'member1', - 'multisig', - aid1, - '/multisig/iss', - { gid: aid }, - vcembeds, - recp - ); + let credRes = await client1.credentials().issue({ + issuerName: 'multisig', + registryId: regk, + schemaId: SCHEMA_SAID, + data: vcdata, + recipient: holder, + datetime: TIME, + }); + op1 = credRes.op; + await multisigIssue(client1, 'member1', 'multisig', credRes); console.log( 'Member1 initiated credential creation, waiting for others to join...' @@ -930,48 +901,17 @@ test('multisig', async function run() { res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; - let credRes2 = await client2 - .credentials() - .issue( - 'multisig', - regk2, - SCHEMA_SAID, - holder, - vcdata, - undefined, - undefined, - exn.e.acdc.a.dt - ); - - op2 = await credRes2.op(); - - acdc = new signify.Serder(credRes2.acdc); - iss = credRes2.iserder; - ianc = credRes2.anc; - isigs = credRes2.sigs; - - sigers = isigs.map((sig: any) => new signify.Siger({ qb64: sig })); - ims = signify.d(signify.messagize(ianc, sigers)); - let atc2 = ims.substring(ianc.size); - - vcembeds = { - acdc: [acdc, ''], - iss: [iss, ''], - anc: [ianc, atc2], - }; + const credRes2 = await client2.credentials().issue({ + issuerName: 'multisig', + registryId: regk2, + schemaId: SCHEMA_SAID, + data: vcdata, + datetime: exn.e.acdc.a.dt, + recipient: holder, + }); - recp = [aid1['state'], aid3['state']].map((state) => state['i']); - await client2 - .exchanges() - .send( - 'member2', - 'multisig', - aid2, - '/multisig/iss', - { gid: aid }, - vcembeds, - recp - ); + op2 = credRes2.op; + await multisigIssue(client2, 'member2', 'multisig', credRes2); console.log('Member2 joins credential create event, waiting for others...'); // Member3 check for notifications and join the create registry event @@ -982,47 +922,17 @@ test('multisig', async function run() { res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; - let credRes3 = await client3 - .credentials() - .issue( - 'multisig', - regk3, - SCHEMA_SAID, - holder, - vcdata, - undefined, - undefined, - exn.e.acdc.a.dt - ); - - op3 = await credRes3.op(); - acdc = new signify.Serder(credRes3.acdc); - iss = credRes3.iserder; - ianc = credRes3.anc; - isigs = credRes3.sigs; - - sigers = isigs.map((sig: any) => new signify.Siger({ qb64: sig })); - ims = signify.d(signify.messagize(ianc, sigers)); - let atc3 = ims.substring(ianc.size); - - vcembeds = { - acdc: [acdc, ''], - iss: [iss, ''], - anc: [ianc, atc3], - }; + let credRes3 = await client3.credentials().issue({ + issuerName: 'multisig', + registryId: regk3, + schemaId: SCHEMA_SAID, + recipient: holder, + data: vcdata, + datetime: exn.e.acdc.a.dt, + }); - recp = [aid1['state'], aid2['state']].map((state) => state['i']); - await client3 - .exchanges() - .send( - 'member3', - 'multisig', - aid3, - '/multisig/iss', - { gid: aid }, - vcembeds, - recp - ); + op3 = credRes3.op; + await multisigIssue(client3, 'member3', 'multisig', credRes3); console.log('Member3 joins credential create event, waiting for others...'); // Check completion @@ -1047,21 +957,14 @@ test('multisig', async function run() { console.log('Starting grant message'); stamp = new Date().toISOString().replace('Z', '000+00:00'); - let [grant, gsigs, end] = await client1 - .ipex() - .grant( - 'multisig', - holder, - '', - acdc, - acdcSaider, - iss, - issExnSaider, - ianc, - atc1, - undefined, - stamp - ); + let [grant, gsigs, end] = await client1.ipex().grant({ + senderName: 'multisig', + acdc: credRes.acdc, + anc: credRes.anc, + iss: credRes.iss, + recipient: holder, + datetime: stamp, + }); await client1 .exchanges() @@ -1102,21 +1005,14 @@ test('multisig', async function run() { res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; - let [grant2, gsigs2, end2] = await client2 - .ipex() - .grant( - 'multisig', - holder, - '', - acdc, - acdcSaider, - iss, - issExnSaider, - ianc, - atc2, - undefined, - stamp - ); + let [grant2, gsigs2, end2] = await client2.ipex().grant({ + senderName: 'multisig', + recipient: holder, + acdc: credRes2.acdc, + anc: credRes2.anc, + iss: credRes3.iss, + datetime: stamp, + }); await client2 .exchanges() @@ -1153,21 +1049,14 @@ test('multisig', async function run() { res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; - let [grant3, gsigs3, end3] = await client3 - .ipex() - .grant( - 'multisig', - holder, - '', - acdc, - acdcSaider, - iss, - issExnSaider, - ianc, - atc3, - undefined, - stamp - ); + let [grant3, gsigs3, end3] = await client3.ipex().grant({ + senderName: 'multisig', + recipient: holder, + acdc: credRes3.acdc, + anc: credRes3.anc, + iss: credRes3.iss, + datetime: stamp, + }); await client3 .exchanges() @@ -1244,7 +1133,7 @@ async function waitForMessage(client: SignifyClient, route: string) { async function bootClient(): Promise { let bran = signify.randomPasscode(); - let client = new SignifyClient(URL, bran, signify.Tier.low, BOOT_URL); + let client = new SignifyClient(url, bran, signify.Tier.low, bootUrl); await client.boot(); await client.connect(); let state = await client.state(); @@ -1254,15 +1143,12 @@ async function bootClient(): Promise { 'Agent AID: ', state.agent.i ); + + await resolveWitnesses(client); return client; } -async function createAID( - client: SignifyClient, - name: string, - witnesses: string[] -) { - const wits = await resolveWitnessAids(client, witnesses); +async function createAID(client: SignifyClient, name: string, wits: string[]) { let icpResult1 = await client.identifiers().create(name, { toad: wits.length, wits: wits, @@ -1275,14 +1161,47 @@ async function createAID( return aid; } -async function resolveWitnessAids(client: SignifyClient, oobis: string[]) { - return await Promise.all( - oobis.map(async (oobi) => { - const op = await waitForOp( - client, - await client.oobis().resolve(oobi) - ); - return op.response.i; - }) +async function resolveWitnesses(client: SignifyClient) { + await Promise.all( + WITNESS_OOBIS.map((oobi) => client.oobis().resolve(oobi)) ); } + +async function multisigIssue( + client: SignifyClient, + memberName: string, + groupName: string, + result: IssueCredentialResult +) { + const leaderHab = await client.identifiers().get(memberName); + const groupHab = await client.identifiers().get(groupName); + const members = await client.identifiers().members(groupName); + + const keeper = client.manager!.get(groupHab); + const sigs = await keeper.sign(signify.b(result.anc.raw)); + const sigers = sigs.map((sig: string) => new signify.Siger({ qb64: sig })); + const ims = signify.d(signify.messagize(result.anc, sigers)); + const atc = ims.substring(result.anc.size); + + const embeds = { + acdc: [result.acdc, ''], + iss: [result.iss, ''], + anc: [result.anc, atc], + }; + + const recipients = members.signing + .map((m: { aid: string }) => m.aid) + .filter((aid: string) => aid !== leaderHab.prefix); + + await client + .exchanges() + .send( + memberName, + 'multisig', + leaderHab, + '/multisig/iss', + { gid: groupHab.prefix }, + embeds, + recipients + ); +} diff --git a/examples/integration-scripts/single-issuer-holder.test.ts b/examples/integration-scripts/single-issuer-holder.test.ts index 9bac4fe3..fa6e838f 100644 --- a/examples/integration-scripts/single-issuer-holder.test.ts +++ b/examples/integration-scripts/single-issuer-holder.test.ts @@ -1,10 +1,8 @@ import assert from 'node:assert'; import signify, { SignifyClient, - CredentialResult, - messagize, - d, - Siger, + IssueCredentialArgs, + Operation, } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; @@ -40,7 +38,7 @@ async function createIdentifier( wits: witnesses, }); const op = await icpResult1.op(); - await waitOperation(client, op.name, 5000); + await waitOperation(client, op, 5000); const aid = await client.identifiers().get(name); if (!client.agent) { @@ -63,7 +61,7 @@ async function getAgentOobi( async function resolveOobi(client: SignifyClient, oobi: string, alias: string) { console.log(`Resolve ${alias} -> ${oobi}`); const op = await client.oobis().resolve(oobi, alias); - const result = await waitOperation(client, op.name, 5000); + const result = await waitOperation<{ i: string }>(client, op, 5000); return result.response; } @@ -74,7 +72,7 @@ async function createRegistry( ) { const result = await client.registries().create({ name, registryName }); const op = await result.op(); - await waitOperation(client, op.name, 5000); + await waitOperation(client, op, 5000); const registries = await client.registries().list(name); assert.equal(registries.length, 1); @@ -85,51 +83,35 @@ async function createRegistry( async function issueCredential( client: SignifyClient, - name: string, - args: { registry: string; schema: string; recipient: string; data: unknown } + args: IssueCredentialArgs ) { - const result: CredentialResult = await client - .credentials() - .issue(name, args.registry, args.schema, args.recipient, args.data); + const result = await client.credentials().issue(args); - const op = await result.op(); - await waitOperation(client, op.name, 5000); + await waitOperation(client, result.op, 5000); const creds = await client.credentials().list(); assert.equal(creds.length, 1); - assert.equal(creds[0].sad.s, args.schema); + assert.equal(creds[0].sad.s, args.schemaId); assert.equal(creds[0].status.s, '0'); - const acdc = new signify.Serder(result.acdc); - const iss = result.iserder; - const ianc = result.anc; - - const sigers = result.sigs.map((sig: string) => new Siger({ qb64: sig })); - const ims = d(messagize(ianc, sigers)); - - const atc = ims.substring(result.anc.size); const dt = createTimestamp(); - const [grant, gsigs, end] = await client - .ipex() - .grant( - name, - args.recipient, - '', - acdc, - result.acdcSaider, - iss, - result.issExnSaider, - result.anc, - atc, - undefined, - dt - ); - await client - .exchanges() - .sendFromEvents(name, 'credential', grant, gsigs, end, [ - args.recipient, - ]); + if (args.recipient) { + const [grant, gsigs, end] = await client.ipex().grant({ + senderName: args.issuerName, + recipient: args.recipient, + datetime: dt, + acdc: result.acdc, + anc: result.anc, + iss: result.iss, + }); + + await client + .exchanges() + .sendFromEvents(args.issuerName, 'credential', grant, gsigs, end, [ + args.recipient, + ]); + } console.log('Grant message sent'); @@ -189,29 +171,25 @@ async function wait(fn: () => Promise, timeout: number = 10000) { throw new RetryError(`Retry failed after ${Date.now() - start} ms`, errors); } -async function waitOperation( +async function waitOperation( client: SignifyClient, - name: string, - timeout?: number -): Promise { - const now = Date.now(); - let op = await client.operations().get(name); - - while (!op['done']) { - op = await client.operations().get(name); - if (op['done']) { - return op; - } + op: Operation, + timeout: number = 30000 +): Promise> { + const start = Date.now(); + while (Date.now() - start < timeout) { + const current = (await client + .operations() + .get(op.name)) as Operation; - const elapsed = Date.now() - now; - if (timeout !== undefined && elapsed > timeout) { - throw new Error( - `Operation '${op.name}' time out after ${elapsed} ms` - ); + if (current.done) { + return current; } await new Promise((resolve) => setTimeout(resolve, 1000)); } + + throw new Error(`Operation timed out after ${Date.now() - start}ms`); } class RetryError extends Error { @@ -286,9 +264,10 @@ test( await createRegistry(issuerClient, 'issuer', 'vLEI'); const registires = await issuerClient.registries().list('issuer'); - await issueCredential(issuerClient, 'issuer', { - registry: registires[0].regk, - schema: SCHEMA_SAID, + await issueCredential(issuerClient, { + issuerName: 'issuer', + registryId: registires[0].regk, + schemaId: SCHEMA_SAID, recipient: holderPrefix, data: { LEI: '5493001KJTIIGC8Y1R17', diff --git a/src/keri/app/coring.ts b/src/keri/app/coring.ts index de96b104..193f7588 100644 --- a/src/keri/app/coring.ts +++ b/src/keri/app/coring.ts @@ -60,6 +60,12 @@ export class Oobis { } } +export interface Operation { + done: boolean; + name: string; + response: T; +} + /** * Operations * @remarks @@ -79,9 +85,9 @@ export class Operations { * Get operation status * @async * @param {string} name Name of the operation - * @returns {Promise} A promise to the status of the operation + * @returns {Promise} A promise to the status of the operation */ - async get(name: string): Promise { + async get(name: string): Promise> { let path = `/operations/${name}`; let data = null; let method = 'GET'; diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 3e7074d3..6676a6d6 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -21,6 +21,7 @@ import { serializeACDCAttachment, serializeIssExnAttachment, } from '../core/utils'; +import { Operation } from './coring'; /** Types of credentials */ export class CredentialTypes { @@ -36,61 +37,84 @@ export interface CredentialFilter { limit?: number; } -export class CredentialResult { - private readonly _acdc: any; - private readonly _iserder: Serder; - private readonly _anc: Serder; - private readonly _sigs: string[]; - private readonly _acdcSaider: Saider; - private readonly _issExnSaider: Saider; - private readonly promise: Promise; +export interface IssueCredentialArgs { + /** + * Name of the issuer identifier + */ + issuerName: string; - constructor( - acdc: Dict, - iserder: Serder, - anc: Serder, - sigs: any[], - acdcSaider: Saider, - issExnSaider: Saider, - promise: Promise - ) { - this._acdc = acdc; - this._iserder = iserder; - this._anc = anc; - this._sigs = sigs; - this._acdcSaider = acdcSaider; - this._issExnSaider = issExnSaider; - this.promise = promise; - } + /** + * QB64 AID of credential registry + */ + registryId: string; - get acdc() { - return this._acdc; - } + /** + * SAID Of the schema + */ + schemaId: string; - get iserder() { - return this._iserder; - } + /** + * Prefix of recipient identifier + */ + recipient?: string; - get acdcSaider() { - return this._acdcSaider; - } + /** + * Credential data + */ + data?: Record; - get issExnSaider() { - return this._issExnSaider; - } + /** + * Credential rules + */ + rules?: Record; - get anc() { - return this._anc; - } + /** + * Credential sources + */ + source?: Record; - get sigs() { - return this._sigs; - } + /** + * Datetime to set for the credential + */ + datetime?: string; - async op(): Promise { - let res = await this.promise; - return await res.json(); - } + /** + * Flag to issue a credential with privacy preserving features + */ + privacy?: boolean; +} + +export interface IssueCredentialResult { + acdc: Serder; + anc: Serder; + iss: Serder; + op: Operation; +} + +export interface IpexGrantArgs { + /** + * Alias for the IPEX sender AID + */ + senderName: string; + + /** + * Prefix of the IPEX recipient AID + */ + recipient: string; + + /** + * Message to send + */ + message?: string; + + /** + * qb64 SAID of agree message this grant is responding to + */ + agree?: string; + datetime?: string; + acdc: Serder; + iss: Serder; + anc: Serder; } /** @@ -156,161 +180,94 @@ export class Credentials { /** * Issue a credential - * @async - * @param {string} name Name or alias of the identifier - * @param {string} registy qb64 AID of credential registry - * @param {string} schema SAID of the schema - * @param {string} [recipient] Optional prefix of recipient identifier - * @param {any} [credentialData] Optional credential data - * @param {any} [rules] Optional credential rules - * @param {any} [source] Optional credential sources - * @param {string} [datetime] Optional datetime to set for the credential - * @param {boolean} [priv=false] Flag to issue a credential with privacy preserving features - * @returns {Promise} A promise to the long-running operation */ - async issue( - name: string, - registy: string, - schema: string, - recipient?: string, - credentialData?: any, - rules?: any, - source?: any, - datetime?: string, - priv: boolean = false - ): Promise { - // Create Credential - let hab = await this.client.identifiers().get(name); - let pre: string = hab.prefix; - - const dt = - datetime === undefined - ? new Date().toISOString().replace('Z', '000+00:00') - : datetime; - - const vsacdc = versify(Ident.ACDC, undefined, Serials.JSON, 0); - const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); - - let cred: any = { - v: vsacdc, - d: '', - }; - let subject: any = { - d: '', - }; - if (priv) { - cred.u = new Salter({}); - subject.u = new Salter({}); + async issue(args: IssueCredentialArgs): Promise { + const hab = await this.client.identifiers().get(args.issuerName); + const estOnly = hab.state.c !== undefined && hab.state.c.includes('EO'); + if (estOnly) { + // TODO implement rotation event + throw new Error('Establishment only not implemented'); } - if (recipient != undefined) { - subject.i = recipient; + if (!this.client.manager) { + throw new Error('No manager on client'); } - subject.dt = dt; - subject = { ...subject, ...credentialData }; - const [, a] = Saider.saidify(subject, undefined, undefined, 'd'); + const keeper = this.client.manager.get(hab); - cred = { ...cred, i: pre }; - cred.ri = registy; - cred = { ...cred, ...{ s: schema }, ...{ a: a } }; + const dt = + args.datetime ?? new Date().toISOString().replace('Z', '000+00:00'); - if (source !== undefined) { - cred.e = source; - } - if (rules !== undefined) { - cred.r = rules; - } - const [vcSaider, vc] = Saider.saidify(cred); + const [, subject] = Saider.saidify({ + d: '', + u: args.privacy ? new Salter({}) : undefined, + i: args.recipient, + dt: dt, + ...args.data, + }); - // Create iss - let _iss = { - v: vs, + const [, acdc] = Saider.saidify({ + v: versify(Ident.ACDC, undefined, Serials.JSON, 0), + d: '', + u: args.privacy ? new Salter({}) : undefined, + i: hab.prefix, + ri: args.registryId, + s: args.schemaId, + a: subject, + e: args.source, + r: args.rules, + }); + + const [, iss] = Saider.saidify({ + v: versify(Ident.KERI, undefined, Serials.JSON, 0), t: Ilks.iss, d: '', - i: vc.d, + i: acdc.d, s: '0', - ri: registy, + ri: args.registryId, dt: dt, - }; - - let [issSaider, iss] = Saider.saidify(_iss); - let iserder = new Serder(iss); - - // Create paths and sign - let keeper = this.client!.manager!.get(hab); - - let state = hab.state; - if (state.c !== undefined && state.c.includes('EO')) { - var estOnly = true; - } else { - var estOnly = false; - } - let sn = Number(state.s); - let dig = state.d; - - let data: any = [ - { - i: iss.i, - s: iss.s, - d: iss.d, - }, - ]; + }); - // Create ixn - let ixn = {}; - let anc: Serder; - let sigs = []; - if (estOnly) { - // TODO implement rotation event - throw new Error('Establishment only not implemented'); - } else { - anc = interact({ - pre: pre, - sn: sn + 1, - data: data, - dig: dig, - version: undefined, - kind: undefined, - }); - sigs = await keeper.sign(b(anc.raw)); - ixn = anc.ked; - } + const sn = Number(hab.state.s); + const anc = interact({ + pre: hab.prefix, + sn: sn + 1, + data: [ + { + i: iss.i, + s: iss.s, + d: iss.d, + }, + ], + dig: hab.state.d, + version: undefined, + kind: undefined, + }); - let res = this.issueFromEvents(hab, name, vc, iss, ixn, sigs); - return new CredentialResult( - vc, - iserder, - anc, - sigs, - vcSaider, - issSaider, - res - ); - } + const sigs = await keeper.sign(b(anc.raw)); - issueFromEvents( - hab: Dict, - name: string, - vc: Dict, - iss: Dict, - ixn: Dict, - sigs: any[] - ) { - let path = `/identifiers/${name}/credentials`; - let method = 'POST'; - let body: any = { - acdc: vc, + const path = `/identifiers/${hab.name}/credentials`; + const method = 'POST'; + const body = { + acdc: acdc, iss: iss, - ixn: ixn, - sigs: sigs, + ixn: anc.ked, + sigs, + [keeper.algo]: keeper.params(), }; - let keeper = this.client!.manager!.get(hab); - body[keeper.algo] = keeper.params(); - let headers = new Headers({ + const headers = new Headers({ Accept: 'application/json+cesr', }); - return this.client.fetch(path, method, body, headers); + + const res = await this.client.fetch(path, method, body, headers); + const op = await res.json(); + + return { + acdc: new Serder(acdc), + iss: new Serder(iss), + anc, + op, + }; } /** @@ -740,46 +697,24 @@ export class Ipex { /** * Create an IPEX grant EXN message - * @async - * @param {string} name Name or alias of the identifier - * @param {string} recp qb64 AID of recipient of the grant - * @param {string} message accompany human readable description of the credential being issued - * @param {Serder} acdc Credential - * @param acdcSaider The Saider instance of an ACDC. Typically comes from the Creder instance yet Creder is not yet ported to SignifyTS - * @param {Serder} iss TEL issuance event - * @param issSaider The Saider instance of the iss EXN interaction event for an ACDC. ypically comes from the Creder instance yet Creder is not yet ported to SignifyTS - * @param {Serder} anc Anchoring event - * @param {string} atc attachments for the anchoring event - * @param {string} agree Option qb64 SAID of agree message this grant is responding to - * @param {string} datetime Optional datetime to set for the credential - * @returns {Promise} A promise to the long-running operation */ - async grant( - name: string, - recp: string, - message: string, - acdc: Serder, - acdcSaider: Saider, - iss: Serder, - issSaider: Saider, - anc: Serder, - atc: string, - agree?: string, - datetime?: string - ): Promise<[Serder, string[], string]> { - let hab = await this.client.identifiers().get(name); - let data: any = { - m: message, - i: recp, + async grant(args: IpexGrantArgs): Promise<[Serder, string[], string]> { + const hab = await this.client.identifiers().get(args.senderName); + const data = { + m: args.message ?? '', + i: args.recipient, }; - let acdcAtc = d(serializeACDCAttachment(acdc, acdcSaider)); - let issAtc = d(serializeIssExnAttachment(anc, issSaider)); + const keeper = this.client.manager?.get(hab); + const sigs = await keeper.sign(b(args.anc.raw)); + const sigers = sigs.map((sig: string) => new Siger({ qb64: sig })); + const ims = d(messagize(args.anc, sigers)); + const atc = ims.substring(args.anc.size); - let embeds: any = { - acdc: [acdc, acdcAtc], - iss: [iss, issAtc], - anc: [anc, atc], + const embeds: Record = { + acdc: [args.acdc, d(serializeACDCAttachment(args.acdc))], + iss: [args.iss, d(serializeIssExnAttachment(args.anc))], + anc: [args.anc, atc], }; return this.client @@ -790,8 +725,8 @@ export class Ipex { data, embeds, undefined, - datetime, - agree + args.datetime, + args.agree ); } diff --git a/src/keri/core/utils.ts b/src/keri/core/utils.ts index 2db51abc..15e8f7c5 100644 --- a/src/keri/core/utils.ts +++ b/src/keri/core/utils.ts @@ -99,7 +99,7 @@ export function range(start: number, stop: number, step: number) { export function intToBytes(value: number, length: number): Uint8Array { const byteArray = new Uint8Array(length); // Assuming a 4-byte integer (32 bits) - for (let index = byteArray.length-1; index >= 0; index--) { + for (let index = byteArray.length - 1; index >= 0; index--) { let byte = value & 0xff; byteArray[index] = byte; value = (value - byte) / 256; @@ -109,18 +109,16 @@ export function intToBytes(value: number, length: number): Uint8Array { export function bytesToInt(ar: Uint8Array): number { let value = 0; - for (let i = 0; i { const registry = 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX'; const schema = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; const isuee = 'EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p'; - await credentials.issue( - 'aid1', - registry, - schema, - isuee, - { LEI: '1234' }, - {}, - {}, - undefined, - false - ); + await credentials.issue({ + issuerName: 'aid1', + registryId: registry, + schemaId: schema, + recipient: isuee, + data: { LEI: '1234' }, + source: {}, + rules: {}, + privacy: false, + }); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; lastBody = JSON.parse(lastCall[1]!.body!.toString()); assert.equal(lastCall[0]!, url + '/identifiers/aid1/credentials'); @@ -359,19 +359,15 @@ describe('Ipex', () => { kind: undefined, }); - let [grant, gsigs, end] = await ipex.grant( - 'multisig', - holder, - '', - new Serder(acdc), - acdcSaider, - iserder, - issSaider, + let [grant, gsigs, end] = await ipex.grant({ + senderName: 'multisig', + recipient: holder, + message: '', + acdc: new Serder(acdc), + iss: iserder, anc, - '-vtest', - undefined, - mockCredential.sad.a.dt - ); + datetime: mockCredential.sad.a.dt, + }); assert.deepStrictEqual(grant.ked, { v: 'KERI10JSON0004b1_', @@ -426,8 +422,8 @@ describe('Ipex', () => { end, '-LAg4AACA' + '-e-acdc-IABBHsidiI6IkFDREMxMEpTT04wMDAxOTdfIiwiZCI6IkVN0AAAAAAAAAAAAAAAAAAAAAAAEMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo-LAW5AACAA' + - '-e-iss-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAAAENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW-LAE5AACAA' + - '-e-anc-vtest' + '-e-iss-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAAAECVCyxNpB4PJkpLbWqI02WXs1wf7VUxPNY2W28SN2qqm-LAa5AACAA' + + '-e-anc-AABAADMtDfNihvCSXJNp1VronVojcPGo--0YZ4Kh6CAnowRnn4Or4FgZQqaqCEv6XVS413qfZoVp8j2uxTTPkItO7ED' ); let [admit, asigs, aend] = await ipex.admit( diff --git a/test/core/utils.test.ts b/test/core/utils.test.ts index 40b294c2..7ddc1579 100644 --- a/test/core/utils.test.ts +++ b/test/core/utils.test.ts @@ -6,12 +6,12 @@ import { describe(serializeIssExnAttachment, () => { it('serializes iss data', () => { - const [saider, data] = Saider.saidify({ + const [, data] = Saider.saidify({ d: '', v: versify(Ident.KERI, undefined, Serials.JSON, 0), }); - const result = serializeIssExnAttachment(new Serder(data), saider); + const result = serializeIssExnAttachment(new Serder(data)); expect(d(result)).toEqual( '-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAAAEKZPmzJqhx76bcC2ftPQgeRirmOd8ZBOtGVqHJrSm7F1' @@ -21,7 +21,7 @@ describe(serializeIssExnAttachment, () => { describe(serializeACDCAttachment, () => { it('serializes acdc data', () => { - const [saider, data] = Saider.saidify({ + const [, data] = Saider.saidify({ d: '', v: versify(Ident.ACDC, undefined, Serials.JSON, 0), a: { @@ -29,7 +29,7 @@ describe(serializeACDCAttachment, () => { }, }); - const result = serializeACDCAttachment(new Serder(data), saider); + const result = serializeACDCAttachment(new Serder(data)); expect(d(result)).toEqual( '-IABBHsiZCI6IkVORTZzbWw4X1NMZVIzdk9NajRJRExLX2Nn0AAAAAAAAAAAAAAAAAAAAAAAENE6sml8_SLeR3vOMj4IDLK_cgd-A-vtg0Jnu7ozdBjW' From f28d87f878af87f81c2d6e6fc330228c3eccbfe8 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 1 Dec 2023 15:37:07 +0200 Subject: [PATCH 107/186] add witness identifiers --- examples/integration-scripts/utils/resolve-env.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/examples/integration-scripts/utils/resolve-env.ts b/examples/integration-scripts/utils/resolve-env.ts index 0f604a1c..0aab6943 100644 --- a/examples/integration-scripts/utils/resolve-env.ts +++ b/examples/integration-scripts/utils/resolve-env.ts @@ -5,8 +5,13 @@ export interface TestEnvironment { bootUrl: string; vleiServerUrl: string; witnessUrls: string[]; + witnessIds: string[]; } +const WAN = "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha"; +const WIL = "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM"; +const WES = "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"; + export function resolveEnvironment( input?: TestEnvironmentPreset ): TestEnvironment { @@ -25,6 +30,7 @@ export function resolveEnvironment( 'http://witness-demo:5643', 'http://witness-demo:5644', ], + witnessIds: [WAN, WIL, WES], vleiServerUrl: 'http://vlei-server:7723', }; case 'local': @@ -37,6 +43,7 @@ export function resolveEnvironment( 'http://localhost:5643', 'http://localhost:5644', ], + witnessIds: [WAN, WIL, WES], }; default: throw new Error(`Unknown test environment preset '${preset}'`); From 74c4fe2ab4977886127e5e41ede0c6c5d6aaae6e Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 1 Dec 2023 15:38:40 +0200 Subject: [PATCH 108/186] Implement test-setup --- .../test-setup-clients.test.ts | 29 ++++ .../test-setup-single-client.test.ts | 24 +++ .../integration-scripts/utils/test-setup.ts | 137 ++++++++++++++++++ .../integration-scripts/utils/test-util.ts | 21 +++ 4 files changed, 211 insertions(+) create mode 100644 examples/integration-scripts/test-setup-clients.test.ts create mode 100644 examples/integration-scripts/test-setup-single-client.test.ts create mode 100644 examples/integration-scripts/utils/test-setup.ts create mode 100644 examples/integration-scripts/utils/test-util.ts diff --git a/examples/integration-scripts/test-setup-clients.test.ts b/examples/integration-scripts/test-setup-clients.test.ts new file mode 100644 index 00000000..29540239 --- /dev/null +++ b/examples/integration-scripts/test-setup-clients.test.ts @@ -0,0 +1,29 @@ +import { SignifyClient } from "signify-ts"; +import { getOrCreateClients, getOrCreateContact, getOrCreateIdentifier } from "./utils/test-setup"; + +let client1: SignifyClient, client2: SignifyClient; +let name1_id: string, name1_oobi: string; +let name2_id: string, name2_oobi: string; +let contact1_id: string, contact2_id: string;; + +beforeAll(async () => { + // create two clients with random secrets + [client1, client2] = await getOrCreateClients(2); +}); +beforeAll(async () => { + [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, "name1"); + [name2_id, name2_oobi] = await getOrCreateIdentifier(client2, "name2"); +}); +beforeAll(async () => { + contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); + contact2_id = await getOrCreateContact(client1, "contact2", name2_oobi); +}); + +describe("test-setup-clients", () => { + test("step1", async () => { + expect(name1_id).toEqual(contact1_id); + }); + test("step2", async () => { + expect(name2_id).toEqual(contact2_id); + }); +}); diff --git a/examples/integration-scripts/test-setup-single-client.test.ts b/examples/integration-scripts/test-setup-single-client.test.ts new file mode 100644 index 00000000..c565c79c --- /dev/null +++ b/examples/integration-scripts/test-setup-single-client.test.ts @@ -0,0 +1,24 @@ +import { SignifyClient } from "signify-ts"; +import { getOrCreateClients, getOrCreateIdentifier } from "./utils/test-setup"; + +let client: SignifyClient; +let name1_id: string, name1_oobi: string; + +beforeAll(async () => { + // Create client with pre-defined secret. Allows working with known identifiers + [client] = await getOrCreateClients(1, ["0ADF2TpptgqcDE5IQUF1HeTp"]); +}); +beforeAll(async () => { + [name1_id, name1_oobi] = await getOrCreateIdentifier(client, "name1"); +}); + +describe("test-setup-single-client", () => { + test("step1", async () => { + expect(client.agent?.pre).toEqual("EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc"); + expect(client.controller?.pre).toEqual("EB3UGWwIMq7ppzcQ697ImQIuXlBG5jzh-baSx-YG3-tY"); + }); + test("step2", async () => { + expect(name1_id).toEqual("ENpvkzG5PhOXPn0LOBIRR6wyd8YXZPW9dn7Drxd7jJcH"); + expect(name1_oobi).toEqual("http://localhost:3902/oobi/ENpvkzG5PhOXPn0LOBIRR6wyd8YXZPW9dn7Drxd7jJcH/agent/EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc"); + }); +}); diff --git a/examples/integration-scripts/utils/test-setup.ts b/examples/integration-scripts/utils/test-setup.ts new file mode 100644 index 00000000..dba1e533 --- /dev/null +++ b/examples/integration-scripts/utils/test-setup.ts @@ -0,0 +1,137 @@ +import { CreateIdentiferArgs, EventResult, SignifyClient, Tier, randomPasscode, ready } from "signify-ts"; +import { resolveEnvironment } from "./resolve-env"; +import { waitOperation } from "./test-util"; + +/** + * Connect or boot a number of SignifyClient instances + * @example + * Create two clients with random secrets + * let client1: SignifyClient, client2: SignifyClient; + * beforeAll(async () => { + * [client1, client2] = await getOrCreateClients(2); + * }); + * @example + * Launch jest from shell with pre-defined secrets + * $ SIGNIFY_SECRETS="0ACqshJKkJ7DDXcaDuwnmI8s,0ABqicvyicXGvIVg6Ih-dngE" npx jest ./tests + */ +export async function getOrCreateClients(count: number, brans: string[] | undefined = undefined): Promise { + let tasks: Promise[] = []; + let secrets = process.env["SIGNIFY_SECRETS"]?.split(","); + for (let i = 0; i < count; i++) { + tasks.push(getOrCreateClient(brans?.at(i) ?? secrets?.at(i) ?? undefined)); + } + let clients: SignifyClient[] = await Promise.all(tasks); + console.log(`SIGNIFY_SECRETS="${clients.map(i => i.bran).join(",")}"`); + return clients; +} + +/** + * Connect or boot a SignifyClient instance + */ +export async function getOrCreateClient(bran: string | undefined = undefined): Promise { + let env = resolveEnvironment(); + await ready(); + bran ??= randomPasscode(); + bran = bran.padEnd(21, "_"); + let client = new SignifyClient(env.url, bran, Tier.low, env.bootUrl); + try { + await client.connect(); + } catch { + let res = await client.boot(); + if (!res.ok) throw new Error(); + await client.connect(); + } + console.log("client", { agent: client.agent?.pre, controller: client.controller.pre }); + return client; +} + +/** + * Get or create a Keri identifier. Uses default witness config from `resolveEnvironment` + * @example + * Create a Keri identifier before running tests + * let name1_id: string, name1_oobi: string; + * beforeAll(async () => { + * [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, "name1"); + * }); + * @see resolveEnvironment + */ +export async function getOrCreateIdentifier(client: SignifyClient, name: string): Promise<[string, string]> { + let id: any = undefined; + try { + let identfier = await client.identifiers().get(name); + // console.log("identifiers.get", identfier); + id = identfier.prefix; + } catch { + let env = resolveEnvironment(); + let args: CreateIdentiferArgs = { + toad: env.witnessIds.length, + wits: env.witnessIds + }; + let result: EventResult = await client.identifiers().create(name, args); + let op = await result.op(); + op = await waitOperation(client, op); + // console.log("identifiers.create", op); + id = op.response.i; + } + let eid = client.agent?.pre!; + if (!await hasEndRole(client, name, "agent", eid)) { + let result: EventResult = await client.identifiers().addEndRole(name, "agent", eid); + let op = await result.op(); + op = await waitOperation(client, op); + // console.log("identifiers.addEndRole", op); + } + let oobi = await client.oobis().get(name, "agent"); + let result: [string, string] = [id, oobi.oobis[0]]; + console.log(name, result); + return result; +} + +/** + * Get list of end role authorizations for a Keri idenfitier + */ +export async function getEndRoles(client: SignifyClient, alias: string, role?: string): Promise { + let path = (role !== undefined) ? `/identifiers/${alias}/endroles/${role}` : `/identifiers/${alias}/endroles`; + let response: Response = await client.fetch(path, "GET", null); + if (!response.ok) throw new Error(await response.text()); + let result = await response.json(); + // console.log("getEndRoles", result); + return result; +} + +/** + * Test if end role is authorized for a Keri identifier + */ +export async function hasEndRole(client: SignifyClient, alias: string, role: string, eid: string): Promise { + let list = await getEndRoles(client, alias, role); + for (let i of list) { + if (i.role === role && i.eid === eid) { + return true; + } + } + return false; +} + +/** + * Get or resolve a Keri contact + * @example + * Create a Keri contact before running tests + * let contact1_id: string; + * beforeAll(async () => { + * contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); + * }); + */ +export async function getOrCreateContact(client: SignifyClient, name: string, oobi: string): Promise { + let list = await client.contacts().list(undefined, "alias", `^${name}$`); + // console.log("contacts.list", list); + if (list.length > 0) { + let contact = list[0]; + if (contact.oobi === oobi) { + // console.log("contacts.id", contact.id); + return contact.id; + } + } + let op = await client.oobis().resolve(oobi, name); + op = await waitOperation(client, op); + // console.log("oobis.resolve", op); + return op.response.i; +} diff --git a/examples/integration-scripts/utils/test-util.ts b/examples/integration-scripts/utils/test-util.ts new file mode 100644 index 00000000..df0f7505 --- /dev/null +++ b/examples/integration-scripts/utils/test-util.ts @@ -0,0 +1,21 @@ +import { SignifyClient } from "signify-ts"; + +export function sleep(ms: number): Promise { + return new Promise(resolve => { + setTimeout(resolve, ms); + }); +} + +/** + * Poll for operation to become completed + */ +export async function waitOperation(client: SignifyClient, op: any, retries: number | undefined = undefined): Promise { + const WAIT = 500; // 0.5 seconds + retries ??= 10; // default 10 retries or 5 seconds + while (retries-- > 0) { + op = await client.operations().get(op.name); + if (op.done === true) return op; + await sleep(WAIT); + } + throw new Error(`Timeout: operation ${op.name}`); +} From 4295964f1dbc5b65a60b72f523789376f04d1195 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 1 Dec 2023 15:38:58 +0200 Subject: [PATCH 109/186] ixn and rot integration tests --- .../integration-scripts/singlesig-ixn.test.ts | 65 ++++++++++++++++ .../integration-scripts/singlesig-rot.test.ts | 76 +++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 examples/integration-scripts/singlesig-ixn.test.ts create mode 100644 examples/integration-scripts/singlesig-rot.test.ts diff --git a/examples/integration-scripts/singlesig-ixn.test.ts b/examples/integration-scripts/singlesig-ixn.test.ts new file mode 100644 index 00000000..0393daf1 --- /dev/null +++ b/examples/integration-scripts/singlesig-ixn.test.ts @@ -0,0 +1,65 @@ +import { EventResult, SignifyClient } from "signify-ts"; +import { getOrCreateClients, getOrCreateContact, getOrCreateIdentifier } from "./utils/test-setup"; +import { waitOperation } from "./utils/test-util"; + +let client1: SignifyClient, client2: SignifyClient; +let name1_id: string, name1_oobi: string; +let contact1_id: string; + +beforeAll(async () => { + [client1, client2] = await getOrCreateClients(2); +}); +beforeAll(async () => { + [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, "name1"); +}); +beforeAll(async () => { + contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); +}); + +interface KeyState { + i: string; + s: string; + [property: string]: any +} + +describe("singlesig-ixn", () => { + test("step1", async () => { + expect(name1_id).toEqual(contact1_id); + + let keystate1 = await client1.keyStates().get(name1_id); + expect(keystate1).toHaveLength(1); + + let keystate2 = await client2.keyStates().get(contact1_id); + expect(keystate2).toHaveLength(1); + + // local and remote keystate sequence match + expect(keystate1[0].s).toEqual(keystate2[0].s); + }); + test("ixn1", async () => { + // local keystate before ixn + let keystate0: KeyState = (await client1.keyStates().get(name1_id)).at(0); + expect(keystate0).not.toBeNull(); + + // ixn + let result: EventResult = await client1.identifiers().interact("name1", {}); + await waitOperation(client1, await result.op()); + + // local keystate after ixn + let keystate1: KeyState = (await client1.keyStates().get(name1_id)).at(0); + expect(parseInt(keystate1.s)).toBeGreaterThan(0); + // sequence has incremented + expect(parseInt(keystate1.s)).toEqual(parseInt(keystate0.s) + 1); + + // remote keystate after ixn + let keystate2: KeyState = (await client2.keyStates().get(contact1_id)).at(0); + // remote keystate is one behind + expect(parseInt(keystate2.s)).toEqual(parseInt(keystate1.s) - 1); + + // refresh remote keystate + let op = await client2.keyStates().query(contact1_id, parseInt(keystate1.s), undefined); + op = await waitOperation(client2, op); + let keystate3: KeyState = op.response; + // local and remote keystate match + expect(keystate3.s).toEqual(keystate1.s); + }); +}); diff --git a/examples/integration-scripts/singlesig-rot.test.ts b/examples/integration-scripts/singlesig-rot.test.ts new file mode 100644 index 00000000..a45be5d7 --- /dev/null +++ b/examples/integration-scripts/singlesig-rot.test.ts @@ -0,0 +1,76 @@ +import { EventResult, RotateIdentifierArgs, SignifyClient } from "signify-ts"; +import { getOrCreateClients, getOrCreateContact, getOrCreateIdentifier } from "./utils/test-setup"; +import { waitOperation } from "./utils/test-util"; + +let client1: SignifyClient, client2: SignifyClient; +let name1_id: string, name1_oobi: string; +let contact1_id: string; + +beforeAll(async () => { + [client1, client2] = await getOrCreateClients(2); +}); +beforeAll(async () => { + [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, "name1"); +}); +beforeAll(async () => { + contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); +}); + +interface KeyState { + i: string; + s: string; + k: string[]; + n: string[]; + [property: string]: any +} + +describe("singlesig-rot", () => { + test("step1", async () => { + expect(name1_id).toEqual(contact1_id); + + let keystate1 = await client1.keyStates().get(name1_id); + expect(keystate1).toHaveLength(1); + + let keystate2 = await client2.keyStates().get(contact1_id); + expect(keystate2).toHaveLength(1); + + // local and remote keystate sequence match + expect(keystate1[0].s).toEqual(keystate2[0].s); + }); + test("rot1", async () => { + // local keystate before rot + let keystate0: KeyState = (await client1.keyStates().get(name1_id)).at(0); + expect(keystate0).not.toBeNull(); + expect(keystate0.k).toHaveLength(1); + expect(keystate0.n).toHaveLength(1); + + // rot + let args: RotateIdentifierArgs = {}; + let result: EventResult = await client1.identifiers().rotate("name1", args); + await waitOperation(client1, await result.op()); + + // local keystate after rot + let keystate1: KeyState = (await client1.keyStates().get(name1_id)).at(0); + expect(parseInt(keystate1.s)).toBeGreaterThan(0); + // sequence has incremented + expect(parseInt(keystate1.s)).toEqual(parseInt(keystate0.s) + 1); + // current keys changed + expect(keystate1.k[0]).not.toEqual(keystate0.k[0]); + // next key hashes changed + expect(keystate1.n[0]).not.toEqual(keystate0.n[0]); + + // remote keystate after rot + let keystate2: KeyState = (await client2.keyStates().get(contact1_id)).at(0); + // remote keystate is one behind + expect(parseInt(keystate2.s)).toEqual(parseInt(keystate1.s) - 1); + + // refresh remote keystate + let op = await client2.keyStates().query(contact1_id, parseInt(keystate1.s), undefined); + op = await waitOperation(client2, op); + let keystate3: KeyState = op.response; + // local and remote keystate match + expect(keystate3.s).toEqual(keystate1.s); + expect(keystate3.k[0]).toEqual(keystate1.k[0]); + expect(keystate3.n[0]).toEqual(keystate1.n[0]); + }); +}); From 1cde65e994b61df58e4a59840ae66fa4fd02ccf0 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 1 Dec 2023 21:20:21 +0200 Subject: [PATCH 110/186] fix config file, keria was not accepting --- config/keria.json | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/config/keria.json b/config/keria.json index 54525b80..2fcc8194 100755 --- a/config/keria.json +++ b/config/keria.json @@ -1,11 +1,17 @@ { - "iurls": [ - "http://witness-demo:5642/oobi/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha/controller?name=Wan&tag=witness", - "http://witness-demo:5643/oobi/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM/controller?name=Wes&tag=witness", - "http://witness-demo:5644/oobi/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX/controller?name=Wil&tag=witness" - ], + "dt": "2023-12-01T10:05:25.062609+00:00", "keria": { - "dt": "2022-01-20T12:57:59.823350+00:00", - "curls": ["http://keria:3902"] - } -} + "dt": "2023-12-01T10:05:25.062609+00:00", + "curls": [ + "http://keria:3902/" + ] + }, + "iurls": [ + "http://witness-demo:5642/oobi/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha/controller", + "http://witness-demo:5643/oobi/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM/controller", + "http://witness-demo:5644/oobi/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX/controller", + "http://witness-demo:5645/oobi/BM35JN8XeJSEfpxopjn5jr7tAHCE5749f0OobhMLCorE/controller", + "http://witness-demo:5646/oobi/BIj15u5V11bkbtAxMA7gcNJZcax-7TgaBMLsQnMHpYHP/controller", + "http://witness-demo:5647/oobi/BF2rZTW79z4IXocYRQnjjsOuvFUQv-ptCf8Yltd7PfsM/controller" + ] + } \ No newline at end of file From 1ceebc706d7f86479a21a95c4e7c48eca6f41ce2 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 1 Dec 2023 21:20:40 +0200 Subject: [PATCH 111/186] add preset property --- examples/integration-scripts/utils/resolve-env.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/integration-scripts/utils/resolve-env.ts b/examples/integration-scripts/utils/resolve-env.ts index 0aab6943..9cb1cf79 100644 --- a/examples/integration-scripts/utils/resolve-env.ts +++ b/examples/integration-scripts/utils/resolve-env.ts @@ -1,6 +1,7 @@ export type TestEnvironmentPreset = 'local' | 'docker'; export interface TestEnvironment { + preset: TestEnvironmentPreset; url: string; bootUrl: string; vleiServerUrl: string; @@ -23,6 +24,7 @@ export function resolveEnvironment( switch (preset) { case 'docker': return { + preset: preset, url, bootUrl, witnessUrls: [ @@ -35,6 +37,7 @@ export function resolveEnvironment( }; case 'local': return { + preset: preset, url, bootUrl, vleiServerUrl: 'http://localhost:7723', From 6be5208cd5eb4223e5cdfccf62771fb23d45cde6 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 1 Dec 2023 21:21:03 +0200 Subject: [PATCH 112/186] fix identifiers --- .../test-setup-single-client.test.ts | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/examples/integration-scripts/test-setup-single-client.test.ts b/examples/integration-scripts/test-setup-single-client.test.ts index c565c79c..6123c8e2 100644 --- a/examples/integration-scripts/test-setup-single-client.test.ts +++ b/examples/integration-scripts/test-setup-single-client.test.ts @@ -1,5 +1,6 @@ import { SignifyClient } from "signify-ts"; import { getOrCreateClients, getOrCreateIdentifier } from "./utils/test-setup"; +import { resolveEnvironment } from "./utils/resolve-env"; let client: SignifyClient; let name1_id: string, name1_oobi: string; @@ -18,7 +19,22 @@ describe("test-setup-single-client", () => { expect(client.controller?.pre).toEqual("EB3UGWwIMq7ppzcQ697ImQIuXlBG5jzh-baSx-YG3-tY"); }); test("step2", async () => { - expect(name1_id).toEqual("ENpvkzG5PhOXPn0LOBIRR6wyd8YXZPW9dn7Drxd7jJcH"); - expect(name1_oobi).toEqual("http://localhost:3902/oobi/ENpvkzG5PhOXPn0LOBIRR6wyd8YXZPW9dn7Drxd7jJcH/agent/EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc"); + let env = resolveEnvironment(); + let oobi = await client.oobis().get("name1", "witness"); + expect(oobi.oobis).toHaveLength(3); + switch (env.preset) { + case "local": + expect(name1_oobi).toEqual(`http://localhost:3902/oobi/${name1_id}/agent/EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc`); + expect(oobi.oobis[0]).toEqual(`http://localhost:5642/oobi/${name1_id}/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha`); + expect(oobi.oobis[1]).toEqual(`http://localhost:5643/oobi/${name1_id}/witness/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM`); + expect(oobi.oobis[2]).toEqual(`http://localhost:5644/oobi/${name1_id}/witness/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX`); + break; + case "docker": + expect(name1_oobi).toEqual(`http://keria:3902/oobi/${name1_id}/agent/EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc`); + expect(oobi.oobis[0]).toEqual(`http://witness-demo:5642/oobi/${name1_id}/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha`); + expect(oobi.oobis[1]).toEqual(`http://witness-demo:5643/oobi/${name1_id}/witness/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM`); + expect(oobi.oobis[2]).toEqual(`http://witness-demo:5644/oobi/${name1_id}/witness/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX`); + break; + } }); }); From e6e544f14be17ee16b4ab4d60020ffacd1c694aa Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 1 Dec 2023 21:21:16 +0200 Subject: [PATCH 113/186] updates --- examples/integration-scripts/utils/test-setup.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/integration-scripts/utils/test-setup.ts b/examples/integration-scripts/utils/test-setup.ts index dba1e533..6053dd58 100644 --- a/examples/integration-scripts/utils/test-setup.ts +++ b/examples/integration-scripts/utils/test-setup.ts @@ -55,7 +55,7 @@ export async function getOrCreateClient(bran: string | undefined = undefined): P * }); * @see resolveEnvironment */ -export async function getOrCreateIdentifier(client: SignifyClient, name: string): Promise<[string, string]> { +export async function getOrCreateIdentifier(client: SignifyClient, name: string, kargs: CreateIdentiferArgs | undefined = undefined): Promise<[string, string]> { let id: any = undefined; try { let identfier = await client.identifiers().get(name); @@ -63,11 +63,11 @@ export async function getOrCreateIdentifier(client: SignifyClient, name: string) id = identfier.prefix; } catch { let env = resolveEnvironment(); - let args: CreateIdentiferArgs = { + kargs ??= { toad: env.witnessIds.length, wits: env.witnessIds }; - let result: EventResult = await client.identifiers().create(name, args); + let result: EventResult = await client.identifiers().create(name, kargs); let op = await result.op(); op = await waitOperation(client, op); // console.log("identifiers.create", op); From 8279f85191919cce0bb1d72ec51142f655f57fc5 Mon Sep 17 00:00:00 2001 From: lenkan Date: Fri, 1 Dec 2023 21:51:46 +0100 Subject: [PATCH 114/186] run npm run lint -- --fix --- .eslintrc | 3 +- examples/integration-scripts/challenge.ts | 10 +- .../integration-scripts/credentials.test.ts | 24 +-- examples/integration-scripts/delegation.ts | 8 +- .../externalModule.test.ts | 6 +- .../integration-scripts/modules/bip39_shim.ts | 30 ++-- examples/integration-scripts/multisig.test.ts | 62 +++---- examples/integration-scripts/randy.test.ts | 6 +- .../integration-scripts/request-present.ts | 28 +-- examples/integration-scripts/salty.test.ts | 4 +- .../integration-scripts/singlesig-ixn.test.ts | 14 +- .../integration-scripts/singlesig-rot.test.ts | 16 +- .../test-setup-single-client.test.ts | 4 +- .../integration-scripts/utils/test-setup.ts | 40 ++--- examples/scripts/client.ts | 38 ++-- examples/scripts/list_notifications.ts | 56 +++--- examples/scripts/make_endroles.ts | 38 ++-- .../scripts/multisig-create-credential.ts | 66 +++---- src/keri/app/aiding.ts | 162 ++++++++--------- src/keri/app/clienting.ts | 22 +-- src/keri/app/contacting.ts | 60 +++---- src/keri/app/controller.ts | 100 +++++------ src/keri/app/coring.ts | 62 +++---- src/keri/app/credentialing.ts | 166 +++++++++--------- src/keri/app/escrowing.ts | 8 +- src/keri/app/exchanging.ts | 32 ++-- src/keri/app/grouping.ts | 22 +-- src/keri/app/habery.ts | 14 +- src/keri/app/notifying.ts | 26 +-- src/keri/core/authing.ts | 26 +-- src/keri/core/bexter.ts | 20 +-- src/keri/core/cipher.ts | 2 +- src/keri/core/core.ts | 12 +- src/keri/core/counter.ts | 40 ++--- src/keri/core/decrypter.ts | 8 +- src/keri/core/diger.ts | 2 +- src/keri/core/encrypter.ts | 10 +- src/keri/core/eventing.ts | 58 +++--- src/keri/core/httping.ts | 32 ++-- src/keri/core/indexer.ts | 80 ++++----- src/keri/core/keeping.ts | 78 ++++---- src/keri/core/manager.ts | 148 ++++++++-------- src/keri/core/matter.ts | 80 ++++----- src/keri/core/pather.ts | 6 +- src/keri/core/prefixer.ts | 26 +-- src/keri/core/saider.ts | 14 +- src/keri/core/salter.ts | 4 +- src/keri/core/serder.ts | 16 +- src/keri/core/signer.ts | 4 +- src/keri/core/tholder.ts | 26 +-- src/keri/core/utils.ts | 42 ++--- src/keri/core/vdring.ts | 8 +- src/keri/end/ending.ts | 28 +-- test/app/aiding.test.ts | 22 +-- test/app/clienting.test.ts | 18 +- test/app/contacting.test.ts | 20 +-- test/app/controller.test.ts | 6 +- test/app/coring.test.ts | 32 ++-- test/app/credentialing.test.ts | 36 ++-- test/app/escrowing.test.ts | 14 +- test/app/exchanging.test.ts | 76 ++++---- test/app/grouping.test.ts | 14 +- test/app/habery.test.ts | 18 +- test/app/notifying.test.ts | 16 +- test/app/registry.test.ts | 24 +-- test/core/authing.test.ts | 26 +-- test/core/counter.test.ts | 10 +- test/core/decrypter.test.ts | 36 ++-- test/core/encrypter.test.ts | 22 +-- test/core/eventing.test.ts | 10 +- test/core/httping.test.ts | 18 +- test/core/indexer.test.ts | 24 +-- test/core/manager.test.ts | 92 +++++----- test/core/matter.test.ts | 2 +- test/core/prefixer.test.ts | 22 +-- test/core/saider.test.ts | 10 +- test/core/salter.test.ts | 6 +- test/core/serder.test.ts | 28 +-- test/core/signer.test.ts | 8 +- test/core/vdring.test.ts | 6 +- test/core/verfer.test.ts | 22 +-- test/end/ending.test.ts | 46 ++--- 82 files changed, 1290 insertions(+), 1291 deletions(-) diff --git a/.eslintrc b/.eslintrc index b4245e37..bb7a5e07 100644 --- a/.eslintrc +++ b/.eslintrc @@ -16,7 +16,6 @@ "@typescript-eslint/no-explicit-any": "warn", "@typescript-eslint/no-namespace": "warn", "@typescript-eslint/ban-types": "warn", - "@typescript-eslint/no-unused-vars": "warn", - "@typescript-eslint/ban-ts-comment": "warn" + "@typescript-eslint/no-unused-vars": "warn" } } diff --git a/examples/integration-scripts/challenge.ts b/examples/integration-scripts/challenge.ts index d67ad5bd..be815fa5 100644 --- a/examples/integration-scripts/challenge.ts +++ b/examples/integration-scripts/challenge.ts @@ -49,7 +49,7 @@ async function run() { assert.equal(challenge1_big.words.length, 24); // Create two identifiers, one for each client - let icpResult1 = await client1.identifiers().create('alice', { + const icpResult1 = await client1.identifiers().create('alice', { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -68,7 +68,7 @@ async function run() { .addEndRole('alice', 'agent', client1!.agent!.pre); console.log("Alice's AID:", aid1.i); - let icpResult2 = await client2.identifiers().create('bob', { + const icpResult2 = await client2.identifiers().create('bob', { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -86,8 +86,8 @@ async function run() { console.log("Bob's AID:", aid2.i); // Exchenge OOBIs - let oobi1 = await client1.oobis().get('alice', 'agent'); - let oobi2 = await client2.oobis().get('bob', 'agent'); + const oobi1 = await client1.oobis().get('alice', 'agent'); + const oobi2 = await client2.oobis().get('bob', 'agent'); op1 = await client1.oobis().resolve(oobi2.oobis[0], 'bob'); while (!op1['done']) { @@ -121,7 +121,7 @@ async function run() { console.log('Alice verified challenge response'); //Alice mark response as accepted - let exn = new Serder(op1.response.exn); + const exn = new Serder(op1.response.exn); op1 = await client1.challenges().responded('alice', aid2.i, exn.ked.d); console.log('Alice marked challenge response as accepted'); diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index 64c03c44..d49db9ae 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -57,8 +57,8 @@ async function waitForNotifications( ): Promise { const awaitedNotifications = []; while (true) { - let notifications = await client.notifications().list(); - for (let note of notifications.notes) { + const notifications = await client.notifications().list(); + for (const note of notifications.notes) { if (note.a.r === route) { awaitedNotifications.push(note); } @@ -115,7 +115,7 @@ test('credentials', async () => { const verifierAidName = 'verifier'; // Create two identifiers, one for each client - let issuerIcpRes = await issuerClient.identifiers().create(issuerAidName, { + const issuerIcpRes = await issuerClient.identifiers().create(issuerAidName, { toad: 3, wits: [...KLI_WITNESS_DEMO_PREFIXES], }); @@ -131,7 +131,7 @@ test('credentials', async () => { .addEndRole(issuerAidName, 'agent', issuerClient!.agent!.pre); console.log("Issuer's AID:", issuerAID); - let holderIcpRes = await holderClient.identifiers().create(holderAidName, { + const holderIcpRes = await holderClient.identifiers().create(holderAidName, { toad: 3, wits: [...KLI_WITNESS_DEMO_PREFIXES], }); @@ -147,7 +147,7 @@ test('credentials', async () => { .addEndRole(holderAidName, 'agent', holderClient!.agent!.pre); console.log("Recipient's AID:", holderAID); - let verifierIcpRes = await verifierClient + const verifierIcpRes = await verifierClient .identifiers() .create(verifierAidName, { toad: 3, @@ -187,18 +187,18 @@ test('credentials', async () => { await new Promise((resolve) => setTimeout(resolve, 250)); } - let issSchema = await issuerClient.schemas().get(schemaSAID); + const issSchema = await issuerClient.schemas().get(schemaSAID); assert.equal(issSchema.$id, schemaSAID); - let hldSchemas = await holderClient.schemas().list(); + const hldSchemas = await holderClient.schemas().list(); assert.equal(hldSchemas.length, 1); assert.equal(hldSchemas[0].$id, schemaSAID); console.log('Resolved QVI Schema OOBI for issuer, holder, and verifier'); // Agent discovery through OOBI exchange between issuer, holder, and verifier console.log('Getting Agent OOBIs for issuer, holder, and verifier'); - let issAgentOOBI = await issuerClient.oobis().get(issuerAidName, 'agent'); - let hldAgentOOBI = await holderClient.oobis().get(holderAidName, 'agent'); - let vfyAgentOOBI = await verifierClient + const issAgentOOBI = await issuerClient.oobis().get(issuerAidName, 'agent'); + const hldAgentOOBI = await holderClient.oobis().get(holderAidName, 'agent'); + const vfyAgentOOBI = await verifierClient .oobis() .get(verifierAidName, 'agent'); @@ -263,7 +263,7 @@ test('credentials', async () => { issOp = await issuerClient.operations().get(issOp.name); await new Promise((resolve) => setTimeout(resolve, 250)); } - let registries = await issuerClient.registries().list(issuerAidName); + const registries = await issuerClient.registries().list(issuerAidName); const registry = registries[0]; assert.equal(registries.length, 1); assert.equal(registry.name, registryName); @@ -373,7 +373,7 @@ test('credentials', async () => { verifierClient, '/exn/ipex/grant' ); - let verifierGrantNote = verifierNotifications[0]; + const verifierGrantNote = verifierNotifications[0]; const [admit3, sigs3, aend3] = await verifierClient .ipex() diff --git a/examples/integration-scripts/delegation.ts b/examples/integration-scripts/delegation.ts index 66005721..797f43f5 100644 --- a/examples/integration-scripts/delegation.ts +++ b/examples/integration-scripts/delegation.ts @@ -43,7 +43,7 @@ async function run() { ); // Client 1 create delegator AID - let icpResult1 = await client1.identifiers().create('delegator', { + const icpResult1 = await client1.identifiers().create('delegator', { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -64,7 +64,7 @@ async function run() { // Client 2 resolves delegator OOBI console.log('Client 2 resolving delegator OOBI'); - let oobi1 = await client1.oobis().get('delegator', 'agent'); + const oobi1 = await client1.oobis().get('delegator', 'agent'); let op2 = await client2.oobis().resolve(oobi1.oobis[0], 'delegator'); while (!op2['done']) { op2 = await client2.operations().get(op2.name); @@ -73,11 +73,11 @@ async function run() { console.log('OOBI resolved'); // Client 2 creates delegate AID - let icpResult2 = await client2 + const icpResult2 = await client2 .identifiers() .create('delegate', { delpre: aid1.prefix }); op2 = await icpResult2.op(); - let delegatePrefix = op2.name.split('.')[1]; + const delegatePrefix = op2.name.split('.')[1]; console.log("Delegate's prefix:", delegatePrefix); console.log('Delegate waiting for approval...'); diff --git a/examples/integration-scripts/externalModule.test.ts b/examples/integration-scripts/externalModule.test.ts index aa4c13c2..8729ec02 100644 --- a/examples/integration-scripts/externalModule.test.ts +++ b/examples/integration-scripts/externalModule.test.ts @@ -29,12 +29,12 @@ test('bip39_shim', async () => { 'Agent AID: ', state1.agent.i ); - let words = new BIP39Shim(0, {}).generateMnemonic(256); - let icpResult = await client1.identifiers().create('aid1', { + const words = new BIP39Shim(0, {}).generateMnemonic(256); + const icpResult = await client1.identifiers().create('aid1', { algo: signify.Algos.extern, extern_type: 'bip39_shim', extern: { mnemonics: words }, }); - let op = await icpResult.op(); + const op = await icpResult.op(); assert.equal(op['done'], true); }, 30000); diff --git a/examples/integration-scripts/modules/bip39_shim.ts b/examples/integration-scripts/modules/bip39_shim.ts index c8a624ff..355297f8 100644 --- a/examples/integration-scripts/modules/bip39_shim.ts +++ b/examples/integration-scripts/modules/bip39_shim.ts @@ -33,11 +33,11 @@ export class BIP39Shim { } keys(count: number, kidx: number, transferable: boolean) { - let keys = []; + const keys = []; for (let idx = 0; idx < count; idx++) { - let keyId = `${this.stem}-${this.pidx}-${kidx + idx}`; - let seed = mnemonicToSeedSync(this.mnemonics, keyId); - let signer = new Signer({ + const keyId = `${this.stem}-${this.pidx}-${kidx + idx}`; + const seed = mnemonicToSeedSync(this.mnemonics, keyId); + const signer = new Signer({ raw: new Uint8Array(seed), code: MtrDex.Ed25519_Seed, transferable: transferable, @@ -48,15 +48,15 @@ export class BIP39Shim { } incept(transferable: boolean) { - let signers = this.keys(this.icount, this.kidx, transferable); - let verfers = signers.map((signer) => signer.verfer.qb64); + const signers = this.keys(this.icount, this.kidx, transferable); + const verfers = signers.map((signer) => signer.verfer.qb64); - let nsigners = this.keys( + const nsigners = this.keys( this.ncount, this.kidx + this.icount, transferable ); - let digers = nsigners.map( + const digers = nsigners.map( (nsigner) => new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 ); @@ -64,23 +64,23 @@ export class BIP39Shim { } rotate(ncount: number, transferable: boolean) { - let signers = this.keys( + const signers = this.keys( this.ncount, this.kidx + this.icount, transferable ); - let verfers = signers.map((signer) => signer.verfer.qb64); + const verfers = signers.map((signer) => signer.verfer.qb64); this.kidx = this.kidx + this.icount; this.icount = this.ncount; this.ncount = ncount; - let nsigners = this.keys( + const nsigners = this.keys( this.ncount, this.kidx + this.icount, this.transferable ); - let digers = nsigners.map( + const digers = nsigners.map( (nsigner) => new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 ); @@ -94,10 +94,10 @@ export class BIP39Shim { indices: number[] | undefined = undefined, ondices: number[] | undefined = undefined ) { - let signers = this.keys(this.icount, this.kidx, this.transferable); + const signers = this.keys(this.icount, this.kidx, this.transferable); if (indexed) { - let sigers = []; + const sigers = []; let i = 0; for (const [j, signer] of signers.entries()) { if (indices != undefined) { @@ -132,7 +132,7 @@ export class BIP39Shim { } return sigers.map((siger) => siger.qb64); } else { - let cigars = []; + const cigars = []; for (const [_, signer] of signers.entries()) { cigars.push(signer.sign(ser)); } diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index 12b94632..3ab15bfe 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -289,17 +289,17 @@ test('multisig', async function run() { `[${identifiers3.aids[1].prefix}]` ); - let multisig = identifiers3.aids[1].prefix; + const multisig = identifiers3.aids[1].prefix; // Multisig end role // for brevity, this script authorize only the agent of member 1 // a full implementation should repeat the process to authorize all agents - let members = await client1.identifiers().members('multisig'); + const members = await client1.identifiers().members('multisig'); let hab = await client1.identifiers().get('multisig'); let aid = hab['prefix']; - let signing = members['signing']; - let eid1 = Object.keys(signing[0].ends.agent)[0]; //agent of member 1 + const signing = members['signing']; + const eid1 = Object.keys(signing[0].ends.agent)[0]; //agent of member 1 // other agent eids can be obtained with // let eid2 = Object.keys(signing[1].ends.agent)[0]; // let eid3 = Object.keys(signing[2].ends.agent)[0]; @@ -446,7 +446,7 @@ test('multisig', async function run() { console.log(`End role authorization for agent ${eid1}completed!`); // Holder resolve multisig OOBI - let oobimultisig = await client1.oobis().get('multisig', 'agent'); + const oobimultisig = await client1.oobis().get('multisig', 'agent'); op4 = await client4.oobis().resolve(oobimultisig.oobis[0], 'multisig'); op4 = await waitForOp(client4, op4); console.log(`Holder resolved multisig OOBI`); @@ -593,16 +593,16 @@ test('multisig', async function run() { // Update new key states op1 = await client1.keyStates().query(aid2.prefix, 1); op1 = await waitForOp(client1, op1); - let aid2State = op1['response']; + const aid2State = op1['response']; op1 = await client1.keyStates().query(aid3.prefix, 1); op1 = await waitForOp(client1, op1); - let aid3State = op1['response']; + const aid3State = op1['response']; op2 = await client2.keyStates().query(aid3.prefix, 1); op2 = await waitForOp(client2, op2); op2 = await client2.keyStates().query(aid1.prefix, 1); op2 = await waitForOp(client2, op2); - let aid1State = op2['response']; + const aid1State = op2['response']; op3 = await client3.keyStates().query(aid1.prefix, 1); op3 = await waitForOp(client3, op3); @@ -744,14 +744,14 @@ test('multisig', async function run() { console.log('Starting multisig registry creation'); - let vcpRes1 = await client1.registries().create({ + const vcpRes1 = await client1.registries().create({ name: 'multisig', registryName: 'vLEI Registry', nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', }); op1 = await vcpRes1.op(); serder = vcpRes1.regser; - let regk = serder.pre; + const regk = serder.pre; let anc = vcpRes1.serder; sigs = vcpRes1.sigs; @@ -787,14 +787,14 @@ test('multisig', async function run() { res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; - let vcpRes2 = await client2.registries().create({ + const vcpRes2 = await client2.registries().create({ name: 'multisig', registryName: 'vLEI Registry', nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', }); op2 = await vcpRes2.op(); serder = vcpRes2.regser; - let regk2 = serder.pre; + const regk2 = serder.pre; anc = vcpRes2.serder; sigs = vcpRes2.sigs; @@ -830,14 +830,14 @@ test('multisig', async function run() { res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; - let vcpRes3 = await client3.registries().create({ + const vcpRes3 = await client3.registries().create({ name: 'multisig', registryName: 'vLEI Registry', nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', }); op3 = await vcpRes3.op(); serder = vcpRes3.regser; - let regk3 = serder.pre; + const regk3 = serder.pre; anc = vcpRes3.serder; sigs = vcpRes3.sigs; @@ -875,10 +875,10 @@ test('multisig', async function run() { const vcdata = { LEI: '5493001KJTIIGC8Y1R17', }; - let holder = aid4.prefix; + const holder = aid4.prefix; - let TIME = new Date().toISOString().replace('Z', '000+00:00'); - let credRes = await client1.credentials().issue({ + const TIME = new Date().toISOString().replace('Z', '000+00:00'); + const credRes = await client1.credentials().issue({ issuerName: 'multisig', registryId: regk, schemaId: SCHEMA_SAID, @@ -922,7 +922,7 @@ test('multisig', async function run() { res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; - let credRes3 = await client3.credentials().issue({ + const credRes3 = await client3.credentials().issue({ issuerName: 'multisig', registryId: regk3, schemaId: SCHEMA_SAID, @@ -941,7 +941,7 @@ test('multisig', async function run() { op3 = await waitForOp(client3, op3); console.log('Multisig create credential completed!'); - let m = await client1.identifiers().get('multisig'); + const m = await client1.identifiers().get('multisig'); // Update states op1 = await client1.keyStates().query(m.prefix, 4); @@ -957,7 +957,7 @@ test('multisig', async function run() { console.log('Starting grant message'); stamp = new Date().toISOString().replace('Z', '000+00:00'); - let [grant, gsigs, end] = await client1.ipex().grant({ + const [grant, gsigs, end] = await client1.ipex().grant({ senderName: 'multisig', acdc: credRes.acdc, anc: credRes.anc, @@ -1005,7 +1005,7 @@ test('multisig', async function run() { res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; - let [grant2, gsigs2, end2] = await client2.ipex().grant({ + const [grant2, gsigs2, end2] = await client2.ipex().grant({ senderName: 'multisig', recipient: holder, acdc: credRes2.acdc, @@ -1049,7 +1049,7 @@ test('multisig', async function run() { res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; - let [grant3, gsigs3, end3] = await client3.ipex().grant({ + const [grant3, gsigs3, end3] = await client3.ipex().grant({ senderName: 'multisig', recipient: holder, acdc: credRes3.acdc, @@ -1092,7 +1092,7 @@ test('multisig', async function run() { console.log('Holder received exchange message with the grant message'); res = await client4.exchanges().get(msgSaid); - let [admit, asigs, aend] = await client4 + const [admit, asigs, aend] = await client4 .ipex() .admit('holder', '', res.exn.d); @@ -1104,7 +1104,7 @@ test('multisig', async function run() { msgSaid = await waitForMessage(client1, '/exn/ipex/admit'); console.log('Member1 received exchange message with the admit response'); - let creds = await client4.credentials().list(); + const creds = await client4.credentials().list(); console.log(`Holder holds ${creds.length} credential`); }, 240000); @@ -1119,8 +1119,8 @@ async function waitForOp(client: SignifyClient, op: any) { async function waitForMessage(client: SignifyClient, route: string) { let msgSaid = ''; while (msgSaid == '') { - let notifications = await client.notifications().list(); - for (let notif of notifications.notes) { + const notifications = await client.notifications().list(); + for (const notif of notifications.notes) { if (notif.a.r == route) { msgSaid = notif.a.d; await client.notifications().mark(notif.i); @@ -1132,11 +1132,11 @@ async function waitForMessage(client: SignifyClient, route: string) { } async function bootClient(): Promise { - let bran = signify.randomPasscode(); - let client = new SignifyClient(url, bran, signify.Tier.low, bootUrl); + const bran = signify.randomPasscode(); + const client = new SignifyClient(url, bran, signify.Tier.low, bootUrl); await client.boot(); await client.connect(); - let state = await client.state(); + const state = await client.state(); console.log( 'Client AID:', state.controller.state.i, @@ -1149,13 +1149,13 @@ async function bootClient(): Promise { } async function createAID(client: SignifyClient, name: string, wits: string[]) { - let icpResult1 = await client.identifiers().create(name, { + const icpResult1 = await client.identifiers().create(name, { toad: wits.length, wits: wits, }); let op = await icpResult1.op(); op = await waitForOp(client, op); - let aid = await client.identifiers().get(name); + const aid = await client.identifiers().get(name); await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); console.log(name, 'AID:', aid.prefix); return aid; diff --git a/examples/integration-scripts/randy.test.ts b/examples/integration-scripts/randy.test.ts index 0a6d823f..f8f396ca 100644 --- a/examples/integration-scripts/randy.test.ts +++ b/examples/integration-scripts/randy.test.ts @@ -40,7 +40,7 @@ test('randy', async () => { op = await icpResult.op(); assert.equal(op['done'], true); let ked = op['response']; - let ixn = new signify.Serder(ked); + const ixn = new signify.Serder(ked); assert.equal(ixn.ked['s'], '1'); assert.deepEqual([...ixn.ked['a']], [icp.pre]); @@ -56,13 +56,13 @@ test('randy', async () => { op = await icpResult.op(); assert.equal(op['done'], true); ked = op['response']; - let rot = new signify.Serder(ked); + const rot = new signify.Serder(ked); assert.equal(rot.ked['s'], '2'); assert.equal(rot.verfers.length, 1); assert.equal(rot.digers.length, 1); assert.notEqual(rot.verfers[0].qb64, icp.verfers[0].qb64); assert.notEqual(rot.digers[0].qb64, icp.digers[0].qb64); - let dig = new signify.Diger( + const dig = new signify.Diger( { code: signify.MtrDex.Blake3_256 }, rot.verfers[0].qb64b ); diff --git a/examples/integration-scripts/request-present.ts b/examples/integration-scripts/request-present.ts index bbb88667..da00f5b2 100644 --- a/examples/integration-scripts/request-present.ts +++ b/examples/integration-scripts/request-present.ts @@ -117,10 +117,10 @@ async function run() { // Exchenge OOBIs console.log('Resolving OOBIs...'); - let oobi1 = await client1.oobis().get('issuer', 'agent'); - let oobi2 = await client2.oobis().get('recipient', 'agent'); - let oobi3 = await client3.oobis().get('verifier', 'agent'); - let schemaOobi = 'http://127.0.0.1:7723/oobi/' + schemaSAID; + const oobi1 = await client1.oobis().get('issuer', 'agent'); + const oobi2 = await client2.oobis().get('recipient', 'agent'); + const oobi3 = await client3.oobis().get('verifier', 'agent'); + const schemaOobi = 'http://127.0.0.1:7723/oobi/' + schemaSAID; op1 = await client1.oobis().resolve(oobi2.oobis[0], 'recipient'); while (!op1['done']) { @@ -179,12 +179,12 @@ async function run() { op1 = await client1.operations().get(op1.name); await new Promise((resolve) => setTimeout(resolve, 1000)); } - let registries = await client1.registries().list('issuer'); + const registries = await client1.registries().list('issuer'); assert.equal(registries.length, 1); assert.equal(registries[0].name, 'vLEI'); - let schema = await client1.schemas().get(schemaSAID); + const schema = await client1.schemas().get(schemaSAID); assert.equal(schema.$id, schemaSAID); - let schemas = await client2.schemas().list(); + const schemas = await client2.schemas().list(); assert.equal(schemas.length, 1); assert.equal(schemas[0].$id, schemaSAID); console.log('Registry created'); @@ -200,7 +200,7 @@ async function run() { op1 = await client1.operations().get(op1.name); await new Promise((resolve) => setTimeout(resolve, 1000)); } - let creds1 = await client1.credentials().list('issuer'); + const creds1 = await client1.credentials().list('issuer'); assert.equal(creds1.length, 1); assert.equal(creds1[0].sad.s, schemaSAID); assert.equal(creds1[0].sad.i, aid1.prefix); @@ -208,7 +208,7 @@ async function run() { console.log('Credential issued'); // Recipient check issued credential - let creds2 = await client2.credentials().list('recipient'); + const creds2 = await client2.credentials().list('recipient'); assert.equal(creds2.length, 1); assert.equal(creds2[0].sad.s, schemaSAID); assert.equal(creds2[0].sad.i, aid1.prefix); @@ -221,8 +221,8 @@ async function run() { // Recipient checks for a presentation request notification let requestReceived = false; while (!requestReceived) { - let notifications = await client2.notifications().list(); - for (let notif of notifications) { + const notifications = await client2.notifications().list(); + for (const notif of notifications) { if (notif.a.r == '/presentation/request') { assert.equal(notif.a.schema.n, schemaSAID); requestReceived = true; @@ -240,8 +240,8 @@ async function run() { // Verifier checks for a presentation notification requestReceived = false; while (!requestReceived) { - let notifications = await client3.notifications().list(); - for (let notif of notifications) { + const notifications = await client3.notifications().list(); + for (const notif of notifications) { if (notif.a.r == '/presentation') { assert.equal(notif.a.schema.n, schemaSAID); requestReceived = true; @@ -251,7 +251,7 @@ async function run() { await new Promise((resolve) => setTimeout(resolve, 1000)); } - let creds3 = await client3 + const creds3 = await client3 .credentials() .list('verifier', { filter: { '-i': { $eq: aid1.prefix } } }); // filter by issuer assert.equal(creds3.length, 1); diff --git a/examples/integration-scripts/salty.test.ts b/examples/integration-scripts/salty.test.ts index 9d1da56b..c0b78d80 100644 --- a/examples/integration-scripts/salty.test.ts +++ b/examples/integration-scripts/salty.test.ts @@ -122,7 +122,7 @@ test('salty', async () => { op = await icpResult.op(); assert.equal(op['done'], true); let ked = op['response']; - let rot = new signify.Serder(ked); + const rot = new signify.Serder(ked); assert.equal(rot.ked['d'], 'EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg'); assert.equal(rot.ked['s'], '1'); assert.equal(rot.verfers.length, 1); @@ -140,7 +140,7 @@ test('salty', async () => { op = await icpResult.op(); assert.equal(op['done'], true); ked = op['response']; - let ixn = new signify.Serder(ked); + const ixn = new signify.Serder(ked); assert.equal(ixn.ked['d'], 'ENsmRAg_oM7Hl1S-GTRMA7s4y760lQMjzl0aqOQ2iTce'); assert.equal(ixn.ked['s'], '2'); assert.deepEqual([...ixn.ked['a']], [icp.pre]); diff --git a/examples/integration-scripts/singlesig-ixn.test.ts b/examples/integration-scripts/singlesig-ixn.test.ts index 0393daf1..20df9484 100644 --- a/examples/integration-scripts/singlesig-ixn.test.ts +++ b/examples/integration-scripts/singlesig-ixn.test.ts @@ -26,10 +26,10 @@ describe("singlesig-ixn", () => { test("step1", async () => { expect(name1_id).toEqual(contact1_id); - let keystate1 = await client1.keyStates().get(name1_id); + const keystate1 = await client1.keyStates().get(name1_id); expect(keystate1).toHaveLength(1); - let keystate2 = await client2.keyStates().get(contact1_id); + const keystate2 = await client2.keyStates().get(contact1_id); expect(keystate2).toHaveLength(1); // local and remote keystate sequence match @@ -37,28 +37,28 @@ describe("singlesig-ixn", () => { }); test("ixn1", async () => { // local keystate before ixn - let keystate0: KeyState = (await client1.keyStates().get(name1_id)).at(0); + const keystate0: KeyState = (await client1.keyStates().get(name1_id)).at(0); expect(keystate0).not.toBeNull(); // ixn - let result: EventResult = await client1.identifiers().interact("name1", {}); + const result: EventResult = await client1.identifiers().interact("name1", {}); await waitOperation(client1, await result.op()); // local keystate after ixn - let keystate1: KeyState = (await client1.keyStates().get(name1_id)).at(0); + const keystate1: KeyState = (await client1.keyStates().get(name1_id)).at(0); expect(parseInt(keystate1.s)).toBeGreaterThan(0); // sequence has incremented expect(parseInt(keystate1.s)).toEqual(parseInt(keystate0.s) + 1); // remote keystate after ixn - let keystate2: KeyState = (await client2.keyStates().get(contact1_id)).at(0); + const keystate2: KeyState = (await client2.keyStates().get(contact1_id)).at(0); // remote keystate is one behind expect(parseInt(keystate2.s)).toEqual(parseInt(keystate1.s) - 1); // refresh remote keystate let op = await client2.keyStates().query(contact1_id, parseInt(keystate1.s), undefined); op = await waitOperation(client2, op); - let keystate3: KeyState = op.response; + const keystate3: KeyState = op.response; // local and remote keystate match expect(keystate3.s).toEqual(keystate1.s); }); diff --git a/examples/integration-scripts/singlesig-rot.test.ts b/examples/integration-scripts/singlesig-rot.test.ts index a45be5d7..3f88fb92 100644 --- a/examples/integration-scripts/singlesig-rot.test.ts +++ b/examples/integration-scripts/singlesig-rot.test.ts @@ -28,10 +28,10 @@ describe("singlesig-rot", () => { test("step1", async () => { expect(name1_id).toEqual(contact1_id); - let keystate1 = await client1.keyStates().get(name1_id); + const keystate1 = await client1.keyStates().get(name1_id); expect(keystate1).toHaveLength(1); - let keystate2 = await client2.keyStates().get(contact1_id); + const keystate2 = await client2.keyStates().get(contact1_id); expect(keystate2).toHaveLength(1); // local and remote keystate sequence match @@ -39,18 +39,18 @@ describe("singlesig-rot", () => { }); test("rot1", async () => { // local keystate before rot - let keystate0: KeyState = (await client1.keyStates().get(name1_id)).at(0); + const keystate0: KeyState = (await client1.keyStates().get(name1_id)).at(0); expect(keystate0).not.toBeNull(); expect(keystate0.k).toHaveLength(1); expect(keystate0.n).toHaveLength(1); // rot - let args: RotateIdentifierArgs = {}; - let result: EventResult = await client1.identifiers().rotate("name1", args); + const args: RotateIdentifierArgs = {}; + const result: EventResult = await client1.identifiers().rotate("name1", args); await waitOperation(client1, await result.op()); // local keystate after rot - let keystate1: KeyState = (await client1.keyStates().get(name1_id)).at(0); + const keystate1: KeyState = (await client1.keyStates().get(name1_id)).at(0); expect(parseInt(keystate1.s)).toBeGreaterThan(0); // sequence has incremented expect(parseInt(keystate1.s)).toEqual(parseInt(keystate0.s) + 1); @@ -60,14 +60,14 @@ describe("singlesig-rot", () => { expect(keystate1.n[0]).not.toEqual(keystate0.n[0]); // remote keystate after rot - let keystate2: KeyState = (await client2.keyStates().get(contact1_id)).at(0); + const keystate2: KeyState = (await client2.keyStates().get(contact1_id)).at(0); // remote keystate is one behind expect(parseInt(keystate2.s)).toEqual(parseInt(keystate1.s) - 1); // refresh remote keystate let op = await client2.keyStates().query(contact1_id, parseInt(keystate1.s), undefined); op = await waitOperation(client2, op); - let keystate3: KeyState = op.response; + const keystate3: KeyState = op.response; // local and remote keystate match expect(keystate3.s).toEqual(keystate1.s); expect(keystate3.k[0]).toEqual(keystate1.k[0]); diff --git a/examples/integration-scripts/test-setup-single-client.test.ts b/examples/integration-scripts/test-setup-single-client.test.ts index 6123c8e2..f8be928f 100644 --- a/examples/integration-scripts/test-setup-single-client.test.ts +++ b/examples/integration-scripts/test-setup-single-client.test.ts @@ -19,8 +19,8 @@ describe("test-setup-single-client", () => { expect(client.controller?.pre).toEqual("EB3UGWwIMq7ppzcQ697ImQIuXlBG5jzh-baSx-YG3-tY"); }); test("step2", async () => { - let env = resolveEnvironment(); - let oobi = await client.oobis().get("name1", "witness"); + const env = resolveEnvironment(); + const oobi = await client.oobis().get("name1", "witness"); expect(oobi.oobis).toHaveLength(3); switch (env.preset) { case "local": diff --git a/examples/integration-scripts/utils/test-setup.ts b/examples/integration-scripts/utils/test-setup.ts index 6053dd58..0dc253f6 100644 --- a/examples/integration-scripts/utils/test-setup.ts +++ b/examples/integration-scripts/utils/test-setup.ts @@ -15,12 +15,12 @@ import { waitOperation } from "./test-util"; * $ SIGNIFY_SECRETS="0ACqshJKkJ7DDXcaDuwnmI8s,0ABqicvyicXGvIVg6Ih-dngE" npx jest ./tests */ export async function getOrCreateClients(count: number, brans: string[] | undefined = undefined): Promise { - let tasks: Promise[] = []; - let secrets = process.env["SIGNIFY_SECRETS"]?.split(","); + const tasks: Promise[] = []; + const secrets = process.env["SIGNIFY_SECRETS"]?.split(","); for (let i = 0; i < count; i++) { tasks.push(getOrCreateClient(brans?.at(i) ?? secrets?.at(i) ?? undefined)); } - let clients: SignifyClient[] = await Promise.all(tasks); + const clients: SignifyClient[] = await Promise.all(tasks); console.log(`SIGNIFY_SECRETS="${clients.map(i => i.bran).join(",")}"`); return clients; } @@ -29,15 +29,15 @@ export async function getOrCreateClients(count: number, brans: string[] | undefi * Connect or boot a SignifyClient instance */ export async function getOrCreateClient(bran: string | undefined = undefined): Promise { - let env = resolveEnvironment(); + const env = resolveEnvironment(); await ready(); bran ??= randomPasscode(); bran = bran.padEnd(21, "_"); - let client = new SignifyClient(env.url, bran, Tier.low, env.bootUrl); + const client = new SignifyClient(env.url, bran, Tier.low, env.bootUrl); try { await client.connect(); } catch { - let res = await client.boot(); + const res = await client.boot(); if (!res.ok) throw new Error(); await client.connect(); } @@ -58,30 +58,30 @@ export async function getOrCreateClient(bran: string | undefined = undefined): P export async function getOrCreateIdentifier(client: SignifyClient, name: string, kargs: CreateIdentiferArgs | undefined = undefined): Promise<[string, string]> { let id: any = undefined; try { - let identfier = await client.identifiers().get(name); + const identfier = await client.identifiers().get(name); // console.log("identifiers.get", identfier); id = identfier.prefix; } catch { - let env = resolveEnvironment(); + const env = resolveEnvironment(); kargs ??= { toad: env.witnessIds.length, wits: env.witnessIds }; - let result: EventResult = await client.identifiers().create(name, kargs); + const result: EventResult = await client.identifiers().create(name, kargs); let op = await result.op(); op = await waitOperation(client, op); // console.log("identifiers.create", op); id = op.response.i; } - let eid = client.agent?.pre!; + const eid = client.agent?.pre!; if (!await hasEndRole(client, name, "agent", eid)) { - let result: EventResult = await client.identifiers().addEndRole(name, "agent", eid); + const result: EventResult = await client.identifiers().addEndRole(name, "agent", eid); let op = await result.op(); op = await waitOperation(client, op); // console.log("identifiers.addEndRole", op); } - let oobi = await client.oobis().get(name, "agent"); - let result: [string, string] = [id, oobi.oobis[0]]; + const oobi = await client.oobis().get(name, "agent"); + const result: [string, string] = [id, oobi.oobis[0]]; console.log(name, result); return result; } @@ -90,10 +90,10 @@ export async function getOrCreateIdentifier(client: SignifyClient, name: string, * Get list of end role authorizations for a Keri idenfitier */ export async function getEndRoles(client: SignifyClient, alias: string, role?: string): Promise { - let path = (role !== undefined) ? `/identifiers/${alias}/endroles/${role}` : `/identifiers/${alias}/endroles`; - let response: Response = await client.fetch(path, "GET", null); + const path = (role !== undefined) ? `/identifiers/${alias}/endroles/${role}` : `/identifiers/${alias}/endroles`; + const response: Response = await client.fetch(path, "GET", null); if (!response.ok) throw new Error(await response.text()); - let result = await response.json(); + const result = await response.json(); // console.log("getEndRoles", result); return result; } @@ -102,8 +102,8 @@ export async function getEndRoles(client: SignifyClient, alias: string, role?: s * Test if end role is authorized for a Keri identifier */ export async function hasEndRole(client: SignifyClient, alias: string, role: string, eid: string): Promise { - let list = await getEndRoles(client, alias, role); - for (let i of list) { + const list = await getEndRoles(client, alias, role); + for (const i of list) { if (i.role === role && i.eid === eid) { return true; } @@ -121,10 +121,10 @@ export async function hasEndRole(client: SignifyClient, alias: string, role: str * }); */ export async function getOrCreateContact(client: SignifyClient, name: string, oobi: string): Promise { - let list = await client.contacts().list(undefined, "alias", `^${name}$`); + const list = await client.contacts().list(undefined, "alias", `^${name}$`); // console.log("contacts.list", list); if (list.length > 0) { - let contact = list[0]; + const contact = list[0]; if (contact.oobi === oobi) { // console.log("contacts.id", contact.id); return contact.id; diff --git a/examples/scripts/client.ts b/examples/scripts/client.ts index dc06fd28..11e8d4c3 100644 --- a/examples/scripts/client.ts +++ b/examples/scripts/client.ts @@ -3,8 +3,8 @@ import signify from 'signify-ts'; await connect(); async function connect() { - let url = 'http://127.0.0.1:3901'; - let bran = '0123456789abcdefghijk'; + const url = 'http://127.0.0.1:3901'; + const bran = '0123456789abcdefghijk'; await signify.ready(); const client = new signify.SignifyClient(url, bran); @@ -27,17 +27,17 @@ async function connect() { }); await client.connect(); - let d = await client.state(); + const d = await client.state(); console.log('Connected: '); console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - let identifiers = client.identifiers(); + const identifiers = client.identifiers(); const oobis = client.oobis(); const operations = client.operations(); const exchanges = client.exchanges(); - let salt = 'abcdefghijk0123456789'; - let res = await identifiers.create('multisig-ts', { bran: salt }); + const salt = 'abcdefghijk0123456789'; + const res = await identifiers.create('multisig-ts', { bran: salt }); let op = await res.op(); let aid = op['response']; @@ -68,7 +68,7 @@ async function connect() { await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second } console.log('done.'); - let kli = op['response']; + const kli = op['response']; console.log('Resolving multisig-sigpy...'); op = await oobis.resolve( @@ -80,13 +80,13 @@ async function connect() { await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second } console.log('done.'); - let sigPy = op['response']; + const sigPy = op['response']; aid = await identifiers.get('multisig-ts'); - let sigTs = aid['state']; + const sigTs = aid['state']; - let states = [sigPy, kli, sigTs]; - let ires = await identifiers.create('multisig', { + const states = [sigPy, kli, sigTs]; + const ires = await identifiers.create('multisig', { algo: signify.Algos.group, mhab: aid, delpre: 'EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7', @@ -102,18 +102,18 @@ async function connect() { rstates: states, }); - let serder = ires.serder; - let sigs = ires.sigs; - let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + const serder = ires.serder; + const sigs = ires.sigs; + const sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - let ims = signify.d(signify.messagize(serder, sigers)); - let atc = ims.substring(serder.size); - let embeds = { + const ims = signify.d(signify.messagize(serder, sigers)); + const atc = ims.substring(serder.size); + const embeds = { icp: [serder, atc], }; - let smids = states.map((state) => state['i']); - let recp = [sigPy, kli].map((state) => state['i']); + const smids = states.map((state) => state['i']); + const recp = [sigPy, kli].map((state) => state['i']); await exchanges.send( 'multisig-ts', diff --git a/examples/scripts/list_notifications.ts b/examples/scripts/list_notifications.ts index f7e3ea9d..3001897e 100644 --- a/examples/scripts/list_notifications.ts +++ b/examples/scripts/list_notifications.ts @@ -6,68 +6,68 @@ const prmpt = promptSync({ sigint: true }); await list_notifications(); async function list_notifications() { - let url = 'http://127.0.0.1:3901'; - let bran = '0123456789abcdefghijk'; + const url = 'http://127.0.0.1:3901'; + const bran = '0123456789abcdefghijk'; await signify.ready(); const client = new signify.SignifyClient(url, bran); await client.connect(); - let d = await client.state(); + const d = await client.state(); console.log('Connected: '); console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - let identifiers = client.identifiers(); - let notifications = client.notifications(); - let groups = client.groups(); - let registries = client.registries(); + const identifiers = client.identifiers(); + const notifications = client.notifications(); + const groups = client.groups(); + const registries = client.registries(); - let res = await notifications.list(); - let notes = res.notes; + const res = await notifications.list(); + const notes = res.notes; for (const note of notes) { - let payload = note.a; - let route = payload.r; + const payload = note.a; + const route = payload.r; if (route === '/multisig/vcp') { - let res = await groups.getRequest(payload.d); + const res = await groups.getRequest(payload.d); if (res.length == 0) { console.log( 'error extracting exns matching nre for ' + payload.data ); } - let msg = res[0]; + const msg = res[0]; let sender = msg['sender']; - let group = msg['groupName']; + const group = msg['groupName']; - let exn = msg['exn']; - let usage = exn['a']['usage']; + const exn = msg['exn']; + const usage = exn['a']['usage']; console.log( 'Credential registry inception request for group AID :' + group ); console.log('\tReceived from: ' + sender); console.log('\tPurpose: ' + usage); console.log('\nAuto-creating new registry...'); - let yes = prmpt('Approve [Y|n]? '); + const yes = prmpt('Approve [Y|n]? '); if (yes === 'y' || yes === 'Y' || yes === '') { try { - let registryName = prmpt( + const registryName = prmpt( 'Enter new local name for registry: ' ); let embeds = exn['e']; - let vcp = embeds['vcp']; - let ixn = embeds['ixn']; - let serder = new signify.Serder(ixn); - let ghab = await identifiers.get(group); + const vcp = embeds['vcp']; + const ixn = embeds['ixn']; + const serder = new signify.Serder(ixn); + const ghab = await identifiers.get(group); let keeper = client.manager!.get(ghab); - let sigs = keeper.sign(signify.b(serder.raw)); - let sigers = sigs.map( + const sigs = keeper.sign(signify.b(serder.raw)); + const sigers = sigs.map( (sig: any) => new signify.Siger({ qb64: sig }) ); - let ims = signify.d(signify.messagize(serder, sigers)); - let atc = ims.substring(serder.size); + const ims = signify.d(signify.messagize(serder, sigers)); + const atc = ims.substring(serder.size); embeds = { vcp: [new signify.Serder(vcp), undefined], ixn: [serder, atc], @@ -75,7 +75,7 @@ async function list_notifications() { sender = ghab['group']['mhab']; keeper = client.manager!.get(sender); - let [nexn, end] = signify.exchange( + const [nexn, end] = signify.exchange( '/multisig/vcp', { gid: ghab['prefix'], usage: 'test' }, sender['prefix'], @@ -87,7 +87,7 @@ async function list_notifications() { ); console.log(nexn.pretty()); - let esigs = keeper.sign(signify.b(nexn.raw)); + const esigs = keeper.sign(signify.b(nexn.raw)); await groups.sendRequest( group, nexn.ked, diff --git a/examples/scripts/make_endroles.ts b/examples/scripts/make_endroles.ts index 6a3f8a91..16f48dda 100644 --- a/examples/scripts/make_endroles.ts +++ b/examples/scripts/make_endroles.ts @@ -3,48 +3,48 @@ import signify from 'signify-ts'; await makeends(); async function makeends() { - let url = 'http://127.0.0.1:3901'; - let bran = '0123456789abcdefghijk'; + const url = 'http://127.0.0.1:3901'; + const bran = '0123456789abcdefghijk'; await signify.ready(); const client = new signify.SignifyClient(url, bran); await client.connect(); - let d = await client.state(); + const d = await client.state(); console.log('Connected: '); console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - let identifiers = client.identifiers(); - let escrows = client.escrows(); + const identifiers = client.identifiers(); + const escrows = client.escrows(); - let members = await identifiers.members('multisig'); - let hab = await identifiers.get('multisig'); - let aid = hab['prefix']; - let signing = members['signing']; + const members = await identifiers.members('multisig'); + const hab = await identifiers.get('multisig'); + const aid = hab['prefix']; + const signing = members['signing']; - let auths = new Map(); - let stamp = new Date(); + const auths = new Map(); + const stamp = new Date(); signing.forEach((end: any) => { - let ends = end['ends']; - let roles = ['agent', 'mailbox']; + const ends = end['ends']; + const roles = ['agent', 'mailbox']; roles.forEach((role) => { if (role in ends) { Object.keys(ends[role]).forEach((k: any) => { - let key = [aid, role, k].join('.'); + const key = [aid, role, k].join('.'); auths.set(key, stamp); }); } }); }); - let rpys = await escrows.listReply('/end/role'); + const rpys = await escrows.listReply('/end/role'); rpys.forEach((rpy: object) => { - let serder = new signify.Serder(rpy); - let payload = serder.ked['a']; + const serder = new signify.Serder(rpy); + const payload = serder.ked['a']; - let key = Object.values(payload).join('.'); - let then = new Date(Date.parse(serder.ked['dt'])); + const key = Object.values(payload).join('.'); + const then = new Date(Date.parse(serder.ked['dt'])); if (auths.has(key) && then < stamp) { identifiers.addEndRole( 'multisig', diff --git a/examples/scripts/multisig-create-credential.ts b/examples/scripts/multisig-create-credential.ts index 1d4b9b90..78174123 100644 --- a/examples/scripts/multisig-create-credential.ts +++ b/examples/scripts/multisig-create-credential.ts @@ -3,8 +3,8 @@ import signify from 'signify-ts'; await connect(); async function connect() { - let url = 'http://127.0.0.1:3901'; - let bran = '0123456789abcdefghijk'; + const url = 'http://127.0.0.1:3901'; + const bran = '0123456789abcdefghijk'; await signify.ready(); const client = new signify.SignifyClient(url, bran); @@ -27,17 +27,17 @@ async function connect() { }); await client.connect(); - let d = await client.state(); + const d = await client.state(); console.log('Connected: '); console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - let identifiers = client.identifiers(); + const identifiers = client.identifiers(); const oobis = client.oobis(); const operations = client.operations(); const exchanges = client.exchanges(); - let salt = '0123456789lmnopqrstuv'; - let res = await identifiers.create('agent0', { bran: salt }); + const salt = '0123456789lmnopqrstuv'; + const res = await identifiers.create('agent0', { bran: salt }); let op = await res.op(); let aid = op['response']; @@ -55,7 +55,7 @@ async function connect() { await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second } console.log('done.'); - let multisig1 = op['response']; + const multisig1 = op['response']; console.log('Resolving multisig2...'); op = await oobis.resolve( @@ -67,13 +67,13 @@ async function connect() { await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second } console.log('done.'); - let multisig2 = op['response']; + const multisig2 = op['response']; aid = await identifiers.get('agent0'); - let agent0 = aid['state']; + const agent0 = aid['state']; - let states = [multisig2, multisig1, agent0]; - let ires = await identifiers.create('multisig', { + const states = [multisig2, multisig1, agent0]; + const ires = await identifiers.create('multisig', { algo: signify.Algos.group, mhab: aid, toad: 3, @@ -94,11 +94,11 @@ async function connect() { let ims = signify.d(signify.messagize(serder, sigers)); let atc = ims.substring(serder.size); - let embeds = { + const embeds = { icp: [serder, atc], }; - let smids = states.map((state) => state['i']); + const smids = states.map((state) => state['i']); let recp = [multisig2, multisig1].map((state) => state['i']); await exchanges.send( @@ -111,7 +111,7 @@ async function connect() { recp ); - let multisigAID = serder.pre; + const multisigAID = serder.pre; console.log('Waiting for multisig AID to be created'); op = await ires.op(); @@ -131,10 +131,10 @@ async function connect() { await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second } console.log('done.'); - let schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; + const schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; console.log('Creating registry...'); - let vcpRes1 = await client.registries().create({ + const vcpRes1 = await client.registries().create({ name: 'multisig', registryName: 'vLEI Registry', nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', @@ -142,15 +142,15 @@ async function connect() { let op1 = await vcpRes1.op(); serder = vcpRes1.regser; - let regk = serder.pre; - let anc = vcpRes1.serder; + const regk = serder.pre; + const anc = vcpRes1.serder; sigs = vcpRes1.sigs; sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(anc, sigers)); atc = ims.substring(anc.size); - let regbeds = { + const regbeds = { vcp: [serder, ''], anc: [anc, atc], }; @@ -182,10 +182,10 @@ async function connect() { const vcdata = { LEI: '5493001KJTIIGC8Y1R17', }; - let holder = 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k'; + const holder = 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k'; - let TIME = '2023-09-25T16:01:37.000000+00:00'; - let credRes = await client + const TIME = '2023-09-25T16:01:37.000000+00:00'; + const credRes = await client .credentials() .issue( 'multisig', @@ -199,16 +199,16 @@ async function connect() { ); op1 = await credRes.op(); - let acdc = new signify.Serder(credRes.acdc); - let iss = credRes.iserder; - let ianc = credRes.anc; - let isigs = credRes.sigs; + const acdc = new signify.Serder(credRes.acdc); + const iss = credRes.iserder; + const ianc = credRes.anc; + const isigs = credRes.sigs; sigers = isigs.map((sig: any) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(ianc, sigers)); atc = ims.substring(anc.size); - let vcembeds = { + const vcembeds = { acdc: [acdc, ''], iss: [iss, ''], anc: [ianc, atc], @@ -233,25 +233,25 @@ async function connect() { console.log('Creating IPEX grant message to send...'); - let [grant, gsigs, end] = await client + const [grant, gsigs, end] = await client .ipex() .grant('multisig', holder, '', acdc, iss, ianc, atc, undefined, TIME); - let m = await client.identifiers().get('multisig'); + const m = await client.identifiers().get('multisig'); - let mstate = m['state']; - let seal = [ + const mstate = m['state']; + const seal = [ 'SealEvent', { i: m['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, ]; sigers = gsigs.map((sig: any) => new signify.Siger({ qb64: sig })); - let gims = signify.d( + const gims = signify.d( signify.messagize(grant, sigers, seal, undefined, undefined, true) ); atc = gims.substring(grant.size); atc += end; - let gembeds: any = { + const gembeds: any = { exn: [grant, atc], }; diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index 594ca7cc..aca4ac24 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -70,17 +70,17 @@ export class Identifier { * @returns {Promise} A promise to the list of managed identifiers */ async list(start: number = 0, end: number = 24): Promise { - let extraHeaders = new Headers(); + const extraHeaders = new Headers(); extraHeaders.append('Range', `aids=${start}-${end}`); - let path = `/identifiers`; - let data = null; - let method = 'GET'; - let res = await this.client.fetch(path, method, data, extraHeaders); + const path = `/identifiers`; + const data = null; + const method = 'GET'; + const res = await this.client.fetch(path, method, data, extraHeaders); - let cr = res.headers.get('content-range'); - let range = parseRangeHeaders(cr, 'aids'); - let aids = await res.json(); + const cr = res.headers.get('content-range'); + const range = parseRangeHeaders(cr, 'aids'); + const aids = await res.json(); return { start: range.start, @@ -97,10 +97,10 @@ export class Identifier { * @returns {Promise} A promise to the identifier information */ async get(name: string): Promise { - let path = `/identifiers/${name}`; - let data = null; - let method = 'GET'; - let res = await this.client.fetch(path, method, data); + const path = `/identifiers/${name}`; + const data = null; + const method = 'GET'; + const res = await this.client.fetch(path, method, data); return await res.json(); } @@ -117,31 +117,31 @@ export class Identifier { ): Promise { const algo = kargs.algo == undefined ? Algos.salty : kargs.algo; - let transferable = kargs.transferable ?? true; - let isith = kargs.isith ?? '1'; - let nsith = kargs.nsith ?? '1'; + const transferable = kargs.transferable ?? true; + const isith = kargs.isith ?? '1'; + const nsith = kargs.nsith ?? '1'; let wits = kargs.wits ?? []; - let toad = kargs.toad ?? 0; - let dcode = kargs.dcode ?? MtrDex.Blake3_256; - let proxy = kargs.proxy; - let delpre = kargs.delpre; - let data = kargs.data != undefined ? [kargs.data] : []; - let pre = kargs.pre; - let states = kargs.states; - let rstates = kargs.rstates; - let prxs = kargs.prxs; - let nxts = kargs.nxts; - let mhab = kargs.mhab; - let _keys = kargs.keys; - let _ndigs = kargs.ndigs; - let bran = kargs.bran; - let count = kargs.count; - let ncount = kargs.ncount; - let tier = kargs.tier; - let extern_type = kargs.extern_type; - let extern = kargs.extern; - - let xargs = { + const toad = kargs.toad ?? 0; + const dcode = kargs.dcode ?? MtrDex.Blake3_256; + const proxy = kargs.proxy; + const delpre = kargs.delpre; + const data = kargs.data != undefined ? [kargs.data] : []; + const pre = kargs.pre; + const states = kargs.states; + const rstates = kargs.rstates; + const prxs = kargs.prxs; + const nxts = kargs.nxts; + const mhab = kargs.mhab; + const _keys = kargs.keys; + const _ndigs = kargs.ndigs; + const bran = kargs.bran; + const count = kargs.count; + const ncount = kargs.ncount; + const tier = kargs.tier; + const extern_type = kargs.extern_type; + const extern = kargs.extern; + + const xargs = { transferable: transferable, isith: isith, nsith: nsith, @@ -168,8 +168,8 @@ export class Identifier { extern: extern, }; - let keeper = this.client.manager!.new(algo, this.client.pidx, xargs); - let [keys, ndigs] = await keeper!.incept(transferable); + const keeper = this.client.manager!.new(algo, this.client.pidx, xargs); + const [keys, ndigs] = await keeper!.incept(transferable); wits = wits !== undefined ? wits : []; let serder: Serder | undefined = undefined; if (delpre == undefined) { @@ -205,8 +205,8 @@ export class Identifier { }); } - let sigs = await keeper!.sign(b(serder.raw)); - var jsondata: any = { + const sigs = await keeper!.sign(b(serder.raw)); + const jsondata: any = { name: name, icp: serder.ked, sigs: sigs, @@ -223,7 +223,7 @@ export class Identifier { jsondata[algo] = keeper.params(); this.client.pidx = this.client.pidx + 1; - let res = this.client.fetch('/identifiers', 'POST', jsondata); + const res = this.client.fetch('/identifiers', 'POST', jsondata); return new EventResult(serder, sigs, res); } @@ -235,18 +235,18 @@ export class Identifier { * @returns {Promise} A promise to the interaction event result */ async interact(name: string, data?: any): Promise { - let hab = await this.get(name); - let pre: string = hab.prefix; + const hab = await this.get(name); + const pre: string = hab.prefix; - let state = hab.state; - let sn = Number(state.s); - let dig = state.d; + const state = hab.state; + const sn = Number(state.s); + const dig = state.d; data = Array.isArray(data) ? data : [data]; data = Array.isArray(data) ? data : [data]; - let serder = interact({ + const serder = interact({ pre: pre, sn: sn + 1, data: data, @@ -254,16 +254,16 @@ export class Identifier { version: undefined, kind: undefined, }); - let keeper = this.client!.manager!.get(hab); - let sigs = await keeper.sign(b(serder.raw)); + const keeper = this.client!.manager!.get(hab); + const sigs = await keeper.sign(b(serder.raw)); - let jsondata: any = { + const jsondata: any = { ixn: serder.ked, sigs: sigs, }; jsondata[keeper.algo] = keeper.params(); - let res = this.client.fetch( + const res = this.client.fetch( '/identifiers/' + name + '?type=ixn', 'PUT', jsondata @@ -281,18 +281,18 @@ export class Identifier { name: string, kargs: RotateIdentifierArgs = {} ): Promise { - let transferable = kargs.transferable ?? true; - let ncode = kargs.ncode ?? MtrDex.Ed25519_Seed; - let ncount = kargs.ncount ?? 1; - - let hab = await this.get(name); - let pre = hab.prefix; - - let state = hab.state; - let count = state.k.length; - let dig = state.d; - let ridx = Number(state.s) + 1; - let wits = state.b; + const transferable = kargs.transferable ?? true; + const ncode = kargs.ncode ?? MtrDex.Ed25519_Seed; + const ncount = kargs.ncount ?? 1; + + const hab = await this.get(name); + const pre = hab.prefix; + + const state = hab.state; + const count = state.k.length; + const dig = state.d; + const ridx = Number(state.s) + 1; + const wits = state.b; let isith = state.kt; let nsith = kargs.nsith ?? isith; @@ -305,28 +305,28 @@ export class Identifier { if (nsith == undefined) nsith = `${Math.max(1, Math.ceil(ncount / 2)).toString(16)}`; - let cst = new Tholder({ sith: isith }).sith; // current signing threshold - let nst = new Tholder({ sith: nsith }).sith; // next signing threshold + const cst = new Tholder({ sith: isith }).sith; // current signing threshold + const nst = new Tholder({ sith: nsith }).sith; // next signing threshold // Regenerate next keys to sign rotation event - let keeper = this.client.manager!.get(hab); + const keeper = this.client.manager!.get(hab); // Create new keys for next digests - let ncodes = kargs.ncodes ?? new Array(ncount).fill(ncode); + const ncodes = kargs.ncodes ?? new Array(ncount).fill(ncode); - let states = kargs.states == undefined ? [] : kargs.states; - let rstates = kargs.rstates == undefined ? [] : kargs.rstates; - let [keys, ndigs] = await keeper!.rotate( + const states = kargs.states == undefined ? [] : kargs.states; + const rstates = kargs.rstates == undefined ? [] : kargs.rstates; + const [keys, ndigs] = await keeper!.rotate( ncodes, transferable, states, rstates ); - let cuts = kargs.cuts ?? []; - let adds = kargs.adds ?? []; - let data = kargs.data != undefined ? [kargs.data] : []; - let toad = kargs.toad; - let serder = rotate({ + const cuts = kargs.cuts ?? []; + const adds = kargs.adds ?? []; + const data = kargs.data != undefined ? [kargs.data] : []; + const toad = kargs.toad; + const serder = rotate({ pre: pre, keys: keys, dig: dig, @@ -341,9 +341,9 @@ export class Identifier { data: data, }); - let sigs = await keeper.sign(b(serder.raw)); + const sigs = await keeper.sign(b(serder.raw)); - var jsondata: any = { + const jsondata: any = { rot: serder.ked, sigs: sigs, smids: @@ -357,7 +357,7 @@ export class Identifier { }; jsondata[keeper.algo] = keeper.params(); - let res = this.client.fetch('/identifiers/' + name, 'PUT', jsondata); + const res = this.client.fetch('/identifiers/' + name, 'PUT', jsondata); return new EventResult(serder, sigs, res); } @@ -390,7 +390,7 @@ export class Identifier { sigs: sigs, }; - let res = this.client.fetch( + const res = this.client.fetch( '/identifiers/' + name + '/endroles', 'POST', jsondata @@ -430,7 +430,7 @@ export class Identifier { * @returns {Promise} - A promise to the list of members */ async members(name: string): Promise { - let res = await this.client.fetch( + const res = await this.client.fetch( '/identifiers/' + name + '/members', 'GET', undefined @@ -460,7 +460,7 @@ export class EventResult { } async op(): Promise { - let res = await this.promise; + const res = await this.promise; return await res.json(); } } diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 10790592..1e3a6e69 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -107,13 +107,13 @@ export class SignifyClient { async state(): Promise { const caid = this.controller?.pre; - let res = await fetch(this.url + `/agent/${caid}`); + const res = await fetch(this.url + `/agent/${caid}`); if (res.status == 404) { throw new Error(`agent does not exist for controller ${caid}`); } const data = await res.json(); - let state = new State(); + const state = new State(); state.agent = data.agent ?? {}; state.controller = data.controller ?? {}; state.ridx = data.ridx ?? 0; @@ -170,9 +170,9 @@ export class SignifyClient { data: any, extraHeaders?: Headers ): Promise { - let headers = new Headers(); + const headers = new Headers(); let signed_headers = new Headers(); - let final_headers = new Headers(); + const final_headers = new Headers(); headers.set('Signify-Resource', this.controller.pre); headers.set( @@ -181,7 +181,7 @@ export class SignifyClient { ); headers.set('Content-Type', 'application/json'); - let _body = method == 'GET' ? null : JSON.stringify(data); + const _body = method == 'GET' ? null : JSON.stringify(data); if (_body !== null) { headers.set('Content-Length', String(_body.length)); } @@ -203,7 +203,7 @@ export class SignifyClient { final_headers.append(key, value); }); } - let res = await fetch(this.url + path, { + const res = await fetch(this.url + path, { method: method, body: _body, headers: final_headers, @@ -255,7 +255,7 @@ export class SignifyClient { keeper.signers[0].verfer ); - let headers = new Headers(); + const headers = new Headers(); headers.set('Signify-Resource', hab.prefix); headers.set( 'Signify-Timestamp', @@ -267,7 +267,7 @@ export class SignifyClient { } else { headers.set('Content-Length', '0'); } - let signed_headers = authenticator.sign( + const signed_headers = authenticator.sign( headers, method, path.split('?')[0] @@ -299,9 +299,9 @@ export class SignifyClient { * @returns {Promise} A promise to the result of the approval */ async approveDelegation(): Promise { - let sigs = this.controller.approveDelegation(this.agent!); + const sigs = this.controller.approveDelegation(this.agent!); - let data = { + const data = { ixn: this.controller.serder.ked, sigs: sigs, }; @@ -359,7 +359,7 @@ export class SignifyClient { * @returns {Promise} A promise to the result of the rotation */ async rotate(nbran: string, aids: string[]): Promise { - let data = this.controller.rotate(nbran, aids); + const data = this.controller.rotate(nbran, aids); return await fetch(this.url + '/agent/' + this.controller.pre, { method: 'PUT', body: JSON.stringify(data), diff --git a/src/keri/app/contacting.ts b/src/keri/app/contacting.ts index 2546ef62..c4485407 100644 --- a/src/keri/app/contacting.ts +++ b/src/keri/app/contacting.ts @@ -26,7 +26,7 @@ export class Contacts { filterField?: string, filterValue?: string ): Promise { - let params = new URLSearchParams(); + const params = new URLSearchParams(); if (group !== undefined) { params.append('group', group); } @@ -35,9 +35,9 @@ export class Contacts { params.append('filter_value', filterValue); } - let path = `/contacts` + '?' + params.toString(); - let method = 'GET'; - let res = await this.client.fetch(path, method, null); + const path = `/contacts` + '?' + params.toString(); + const method = 'GET'; + const res = await this.client.fetch(path, method, null); return await res.json(); } @@ -48,9 +48,9 @@ export class Contacts { * @returns {Promise} A promise to the contact */ async get(pre: string): Promise { - let path = `/contacts/` + pre; - let method = 'GET'; - let res = await this.client.fetch(path, method, null); + const path = `/contacts/` + pre; + const method = 'GET'; + const res = await this.client.fetch(path, method, null); return await res.json(); } @@ -62,10 +62,10 @@ export class Contacts { * @returns {Promise} A promise to the result of the addition */ async add(pre: string, info: any): Promise { - let path = `/contacts/` + pre; - let method = 'POST'; + const path = `/contacts/` + pre; + const method = 'POST'; - let res = await this.client.fetch(path, method, info); + const res = await this.client.fetch(path, method, info); return await res.json(); } @@ -76,10 +76,10 @@ export class Contacts { * @returns {Promise} A promise to the result of the deletion */ async delete(pre: string): Promise { - let path = `/contacts/` + pre; - let method = 'DELETE'; + const path = `/contacts/` + pre; + const method = 'DELETE'; - let res = await this.client.fetch(path, method, null); + const res = await this.client.fetch(path, method, null); return await res.json(); } @@ -91,10 +91,10 @@ export class Contacts { * @returns {Promise} A promise to the result of the update */ async update(pre: string, info: any): Promise { - let path = `/contacts/` + pre; - let method = 'PUT'; + const path = `/contacts/` + pre; + const method = 'PUT'; - let res = await this.client.fetch(path, method, info); + const res = await this.client.fetch(path, method, info); return await res.json(); } } @@ -119,9 +119,9 @@ export class Challenges { * @returns {Promise} A promise to the list of random words */ async generate(strength: number = 128): Promise { - let path = `/challenges?strength=${strength.toString()}`; - let method = 'GET'; - let res = await this.client.fetch(path, method, null); + const path = `/challenges?strength=${strength.toString()}`; + const method = 'GET'; + const res = await this.client.fetch(path, method, null); return await res.json(); } @@ -138,9 +138,9 @@ export class Challenges { recipient: string, words: string[] ): Promise { - let hab = await this.client.identifiers().get(name); - let exchanges = this.client.exchanges(); - let resp = await exchanges.send( + const hab = await this.client.identifiers().get(name); + const exchanges = this.client.exchanges(); + const resp = await exchanges.send( name, 'challenge', hab, @@ -164,12 +164,12 @@ export class Challenges { source: string, words: string[] ): Promise { - let path = `/challenges/${name}/verify/${source}`; - let method = 'POST'; - let data = { + const path = `/challenges/${name}/verify/${source}`; + const method = 'POST'; + const data = { words: words, }; - let res = await this.client.fetch(path, method, data); + const res = await this.client.fetch(path, method, data); return await res.json(); } @@ -186,12 +186,12 @@ export class Challenges { source: string, said: string ): Promise { - let path = `/challenges/${name}/verify/${source}`; - let method = 'PUT'; - let data = { + const path = `/challenges/${name}/verify/${source}`; + const method = 'PUT'; + const data = { said: said, }; - let res = await this.client.fetch(path, method, data); + const res = await this.client.fetch(path, method, data); return res; } } diff --git a/src/keri/app/controller.ts b/src/keri/app/controller.ts index c904427f..e9fdac06 100644 --- a/src/keri/app/controller.ts +++ b/src/keri/app/controller.ts @@ -36,7 +36,7 @@ export class Agent { } private parse(agent: Agent) { - let [state, verfer] = this.event(agent); + const [state, verfer] = this.event(agent); this.sn = new CesrNumber({}, undefined, state['s']).num; this.said = state['d']; @@ -61,20 +61,20 @@ export class Agent { throw new Error(`agent inception event can only have one key`); } - let verfer = new Verfer({ qb64: evt['k'][0] }); + const verfer = new Verfer({ qb64: evt['k'][0] }); if (evt['n'].length !== 1) { throw new Error(`agent inception event can only have one next key`); } - let diger = new Diger({ qb64: evt['n'][0] }); + const diger = new Diger({ qb64: evt['n'][0] }); - let tholder = new Tholder({ sith: evt['kt'] }); + const tholder = new Tholder({ sith: evt['kt'] }); if (tholder.num !== 1) { throw new Error(`invalid threshold ${tholder.num}, must be 1`); } - let ntholder = new Tholder({ sith: evt['nt'] }); + const ntholder = new Tholder({ sith: evt['nt'] }); if (ntholder.num !== 1) { throw new Error( `invalid next threshold ${ntholder.num}, must be 1` @@ -113,7 +113,7 @@ export class Controller { this.salter = new Salter({ qb64: this.bran, tier: this.tier }); - let creator = new SaltyCreator(this.salter.qb64, this.tier, this.stem); + const creator = new SaltyCreator(this.salter.qb64, this.tier, this.stem); this.signer = creator .create( @@ -161,9 +161,9 @@ export class Controller { } approveDelegation(_agent: Agent) { - let seqner = new Seqner({ sn: _agent.sn }); - let anchor = { i: _agent.pre, s: seqner.snh, d: _agent.said }; - let sn = new CesrNumber({}, undefined, this.serder.ked['s']).num + 1; + const seqner = new Seqner({ sn: _agent.sn }); + const anchor = { i: _agent.pre, s: seqner.snh, d: _agent.said }; + const sn = new CesrNumber({}, undefined, this.serder.ked['s']).num + 1; this.serder = interact({ pre: this.serder.pre, dig: this.serder.ked['d'], @@ -180,7 +180,7 @@ export class Controller { } get event() { - let siger = this.signer.sign(this.serder.raw, 0); + const siger = this.signer.sign(this.serder.raw, 0); return [this.serder, siger]; } @@ -205,12 +205,12 @@ export class Controller { } rotate(bran: string, aids: Array) { - let nbran = MtrDex.Salt_128 + 'A' + bran.substring(0, 21); // qb64 salt for seed - let nsalter = new Salter({ qb64: nbran, tier: this.tier }); - let nsigner = this.salter.signer(undefined, false); + const nbran = MtrDex.Salt_128 + 'A' + bran.substring(0, 21); // qb64 salt for seed + const nsalter = new Salter({ qb64: nbran, tier: this.tier }); + const nsigner = this.salter.signer(undefined, false); - let creator = new SaltyCreator(this.salter.qb64, this.tier, this.stem); - let signer = creator + const creator = new SaltyCreator(this.salter.qb64, this.tier, this.stem); + const signer = creator .create( undefined, 1, @@ -223,7 +223,7 @@ export class Controller { ) .signers.pop(); - let ncreator = new SaltyCreator(nsalter.qb64, this.tier, this.stem); + const ncreator = new SaltyCreator(nsalter.qb64, this.tier, this.stem); this.signer = ncreator .create( undefined, @@ -252,7 +252,7 @@ export class Controller { this.keys = [this.signer.verfer.qb64, signer?.verfer.qb64]; this.ndigs = [new Diger({}, this.nsigner.verfer.qb64b).qb64]; - let rot = rotate({ + const rot = rotate({ pre: this.pre, keys: this.keys, dig: this.serder.ked['d'], @@ -261,32 +261,32 @@ export class Controller { ndigs: this.ndigs, }); - let sigs = [ + const sigs = [ signer?.sign(b(rot.raw), 1, false, 0).qb64, this.signer.sign(rot.raw, 0).qb64, ]; - let encrypter = new Encrypter({}, b(nsigner.verfer.qb64)); - let decrypter = new Decrypter({}, nsigner.qb64b); - let sxlt = encrypter.encrypt(b(this.bran)).qb64; + const encrypter = new Encrypter({}, b(nsigner.verfer.qb64)); + const decrypter = new Decrypter({}, nsigner.qb64b); + const sxlt = encrypter.encrypt(b(this.bran)).qb64; - let keys: Record = {}; + const keys: Record = {}; - for (let aid of aids) { - let pre: string = aid['prefix'] as string; + for (const aid of aids) { + const pre: string = aid['prefix'] as string; if ('salty' in aid) { console.log('salty aid to rotate'); console.log(aid); - let salty: any = aid['salty']; - let cipher = new Cipher({ qb64: salty['sxlt'] }); - let dnxt = decrypter.decrypt(null, cipher).qb64; + const salty: any = aid['salty']; + const cipher = new Cipher({ qb64: salty['sxlt'] }); + const dnxt = decrypter.decrypt(null, cipher).qb64; // Now we have the AID salt, use it to verify against the current public keys - let acreator = new SaltyCreator( + const acreator = new SaltyCreator( dnxt, salty['tier'], salty['stem'] ); - let signers = acreator.create( + const signers = acreator.create( salty['icodes'], undefined, MtrDex.Ed25519_Seed, @@ -296,36 +296,36 @@ export class Controller { salty['kidx'], false ); - let _signers = []; - for (let signer of signers.signers) { + const _signers = []; + for (const signer of signers.signers) { _signers.push(signer.verfer.qb64); } - let pubs = aid['state']['k']; + const pubs = aid['state']['k']; if (pubs.join(',') != _signers.join(',')) { throw new Error('Invalid Salty AID'); } - let asxlt = encrypter.encrypt(b(dnxt)).qb64; + const asxlt = encrypter.encrypt(b(dnxt)).qb64; keys[pre] = { sxlt: asxlt, }; } else if ('randy' in aid) { - let randy = aid['randy']; - let prxs = randy['prxs']; - let nxts = randy['nxts']; - - let nprxs = []; - let signers = []; - for (let prx of prxs) { - let cipher = new Cipher({ qb64: prx }); - let dsigner = decrypter.decrypt(null, cipher, true); + const randy = aid['randy']; + const prxs = randy['prxs']; + const nxts = randy['nxts']; + + const nprxs = []; + const signers = []; + for (const prx of prxs) { + const cipher = new Cipher({ qb64: prx }); + const dsigner = decrypter.decrypt(null, cipher, true); signers.push(dsigner); nprxs.push(encrypter.encrypt(b(dsigner.qb64)).qb64); } - let pubs = aid['state']['k']; - let _signers = []; - for (let signer of signers) { + const pubs = aid['state']['k']; + const _signers = []; + for (const signer of signers) { _signers.push(signer.verfer.qb64); } @@ -335,8 +335,8 @@ export class Controller { ); } - let nnxts = []; - for (let nxt of nxts) { + const nnxts = []; + for (const nxt of nxts) { nnxts.push(this.recrypt(nxt, decrypter, encrypter)); } @@ -349,7 +349,7 @@ export class Controller { } } - let data = { + const data = { rot: rot.ked, sigs: sigs, sxlt: sxlt, @@ -359,8 +359,8 @@ export class Controller { } recrypt(enc: string, decrypter: Decrypter, encrypter: Encrypter) { - let cipher = new Cipher({ qb64: enc }); - let dnxt = decrypter.decrypt(null, cipher).qb64; + const cipher = new Cipher({ qb64: enc }); + const dnxt = decrypter.decrypt(null, cipher).qb64; return encrypter.encrypt(b(dnxt)).qb64; } } diff --git a/src/keri/app/coring.ts b/src/keri/app/coring.ts index 193f7588..1b23d79d 100644 --- a/src/keri/app/coring.ts +++ b/src/keri/app/coring.ts @@ -4,15 +4,15 @@ import { Salter } from '../core/salter'; import { Matter, MtrDex } from '../core/matter'; export function randomPasscode(): string { - let raw = libsodium.randombytes_buf(16); - let salter = new Salter({ raw: raw }); + const raw = libsodium.randombytes_buf(16); + const salter = new Salter({ raw: raw }); return salter.qb64.substring(2); } export function randomNonce(): string { - let seed = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); - let seedqb64 = new Matter({ raw: seed, code: MtrDex.Ed25519_Seed }); + const seed = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); + const seedqb64 = new Matter({ raw: seed, code: MtrDex.Ed25519_Seed }); return seedqb64.qb64; } @@ -33,9 +33,9 @@ export class Oobis { * @returns {Promise} A promise to the OOBI(s) */ async get(name: string, role: string = 'agent'): Promise { - let path = `/identifiers/${name}/oobis?role=${role}`; - let method = 'GET'; - let res = await this.client.fetch(path, method, null); + const path = `/identifiers/${name}/oobis?role=${role}`; + const method = 'GET'; + const res = await this.client.fetch(path, method, null); return await res.json(); } @@ -47,15 +47,15 @@ export class Oobis { * @returns {Promise} A promise to the long-running operation */ async resolve(oobi: string, alias?: string): Promise { - let path = `/oobis`; - let data: any = { + const path = `/oobis`; + const data: any = { url: oobi, }; if (alias !== undefined) { data.oobialias = alias; } - let method = 'POST'; - let res = await this.client.fetch(path, method, data); + const method = 'POST'; + const res = await this.client.fetch(path, method, data); return await res.json(); } } @@ -88,10 +88,10 @@ export class Operations { * @returns {Promise} A promise to the status of the operation */ async get(name: string): Promise> { - let path = `/operations/${name}`; - let data = null; - let method = 'GET'; - let res = await this.client.fetch(path, method, data); + const path = `/operations/${name}`; + const data = null; + const method = 'GET'; + const res = await this.client.fetch(path, method, data); return await res.json(); } } @@ -116,10 +116,10 @@ export class KeyEvents { * @returns {Promise} A promise to the key events */ async get(pre: string): Promise { - let path = `/events?pre=${pre}`; - let data = null; - let method = 'GET'; - let res = await this.client.fetch(path, method, data); + const path = `/events?pre=${pre}`; + const data = null; + const method = 'GET'; + const res = await this.client.fetch(path, method, data); return await res.json(); } } @@ -144,10 +144,10 @@ export class KeyStates { * @returns {Promise} A promise to the key states */ async get(pre: string): Promise { - let path = `/states?pre=${pre}`; - let data = null; - let method = 'GET'; - let res = await this.client.fetch(path, method, data); + const path = `/states?pre=${pre}`; + const data = null; + const method = 'GET'; + const res = await this.client.fetch(path, method, data); return await res.json(); } @@ -158,10 +158,10 @@ export class KeyStates { * @returns {Promise} A promise to the key states */ async list(pres: string[]): Promise { - let path = `/states?${pres.map((pre) => `pre=${pre}`).join('&')}`; - let data = null; - let method = 'GET'; - let res = await this.client.fetch(path, method, data); + const path = `/states?${pres.map((pre) => `pre=${pre}`).join('&')}`; + const data = null; + const method = 'GET'; + const res = await this.client.fetch(path, method, data); return await res.json(); } @@ -174,8 +174,8 @@ export class KeyStates { * @returns {Promise} A promise to the long-running operation */ async query(pre: string, sn?: number, anchor?: string): Promise { - let path = `/queries`; - let data: any = { + const path = `/queries`; + const data: any = { pre: pre, }; if (sn !== undefined) { @@ -185,8 +185,8 @@ export class KeyStates { data.anchor = anchor; } - let method = 'POST'; - let res = await this.client.fetch(path, method, data); + const method = 'POST'; + const res = await this.client.fetch(path, method, data); return await res.json(); } } diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 6676a6d6..5a65b409 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -137,21 +137,21 @@ export class Credentials { * @returns {Promise} A promise to the list of credentials */ async list(kargs: CredentialFilter = {}): Promise { - let path = `/credentials/query`; - let filtr = kargs.filter === undefined ? {} : kargs.filter; - let sort = kargs.sort === undefined ? [] : kargs.sort; - let limit = kargs.limit === undefined ? 25 : kargs.limit; - let skip = kargs.skip === undefined ? 0 : kargs.skip; + const path = `/credentials/query`; + const filtr = kargs.filter === undefined ? {} : kargs.filter; + const sort = kargs.sort === undefined ? [] : kargs.sort; + const limit = kargs.limit === undefined ? 25 : kargs.limit; + const skip = kargs.skip === undefined ? 0 : kargs.skip; - let data = { + const data = { filter: filtr, sort: sort, skip: skip, limit: limit, }; - let method = 'POST'; + const method = 'POST'; - let res = await this.client.fetch(path, method, data, undefined); + const res = await this.client.fetch(path, method, data, undefined); return await res.json(); } @@ -168,12 +168,12 @@ export class Credentials { said: string, includeCESR: boolean = false ): Promise { - let path = `/identifiers/${name}/credentials/${said}`; - let method = 'GET'; - let headers = includeCESR + const path = `/identifiers/${name}/credentials/${said}`; + const method = 'GET'; + const headers = includeCESR ? new Headers({ Accept: 'application/json+cesr' }) : new Headers({ Accept: 'application/json' }); - let res = await this.client.fetch(path, method, null, headers); + const res = await this.client.fetch(path, method, null, headers); return includeCESR ? await res.text() : await res.json(); } @@ -278,16 +278,16 @@ export class Credentials { * @returns {Promise} A promise to the long-running operation */ async revoke(name: string, said: string): Promise { - let hab = await this.client.identifiers().get(name); - let pre: string = hab.prefix; + const hab = await this.client.identifiers().get(name); + const pre: string = hab.prefix; const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); const dt = new Date().toISOString().replace('Z', '000+00:00'); - let cred = await this.get(name, said); + const cred = await this.get(name, said); // Create rev - let _rev = { + const _rev = { v: vs, t: Ilks.rev, d: '', @@ -298,23 +298,23 @@ export class Credentials { dt: dt, }; - let [, rev] = Saider.saidify(_rev); + const [, rev] = Saider.saidify(_rev); // create ixn let ixn = {}; let sigs = []; - let state = hab.state; + const state = hab.state; if (state.c !== undefined && state.c.includes('EO')) { var estOnly = true; } else { var estOnly = false; } - let sn = Number(state.s); - let dig = state.d; + const sn = Number(state.s); + const dig = state.d; - let data: any = [ + const data: any = [ { i: rev.i, s: rev.s, @@ -325,7 +325,7 @@ export class Credentials { // TODO implement rotation event throw new Error('Establishment only not implemented'); } else { - let serder = interact({ + const serder = interact({ pre: pre, sn: sn + 1, data: data, @@ -333,23 +333,23 @@ export class Credentials { version: undefined, kind: undefined, }); - let keeper = this.client!.manager!.get(hab); + const keeper = this.client!.manager!.get(hab); sigs = await keeper.sign(b(serder.raw)); ixn = serder.ked; } - let body = { + const body = { rev: rev, ixn: ixn, sigs: sigs, }; - let path = `/identifiers/${name}/credentials/${said}`; - let method = 'DELETE'; - let headers = new Headers({ + const path = `/identifiers/${name}/credentials/${said}`; + const method = 'DELETE'; + const headers = new Headers({ Accept: 'application/json+cesr', }); - let res = await this.client.fetch(path, method, body, headers); + const res = await this.client.fetch(path, method, body, headers); return await res.json(); } @@ -368,11 +368,11 @@ export class Credentials { recipient: string, include: boolean = true ): Promise { - let hab = await this.client.identifiers().get(name); - let pre: string = hab.prefix; + const hab = await this.client.identifiers().get(name); + const pre: string = hab.prefix; - let cred = await this.get(name, said); - let data = { + const cred = await this.get(name, said); + const data = { i: cred.sad.i, s: cred.sad.s, n: said, @@ -392,28 +392,28 @@ export class Credentials { const [, sad] = Saider.saidify(_sad); const exn = new Serder(sad); - let keeper = this.client!.manager!.get(hab); + const keeper = this.client!.manager!.get(hab); - let sig = keeper.sign(b(exn.raw), true); + const sig = keeper.sign(b(exn.raw), true); - let siger = new Siger({ qb64: sig[0] }); - let seal = ['SealLast', { i: pre }]; + const siger = new Siger({ qb64: sig[0] }); + const seal = ['SealLast', { i: pre }]; let ims = messagize(exn, [siger], seal, undefined, undefined, true); ims = ims.slice(JSON.stringify(exn.ked).length); - let body = { + const body = { exn: exn.ked, sig: new TextDecoder().decode(ims), recipient: recipient, include: include, }; - let path = `/identifiers/${name}/credentials/${said}/presentations`; - let method = 'POST'; - let headers = new Headers({ + const path = `/identifiers/${name}/credentials/${said}/presentations`; + const method = 'POST'; + const headers = new Headers({ Accept: 'application/json+cesr', }); - let res = await this.client.fetch(path, method, body, headers); + const res = await this.client.fetch(path, method, body, headers); return await res.text(); } @@ -432,10 +432,10 @@ export class Credentials { schema: string, issuer?: string ): Promise { - let hab = await this.client.identifiers().get(name); - let pre: string = hab.prefix; + const hab = await this.client.identifiers().get(name); + const pre: string = hab.prefix; - let data: any = { + const data: any = { s: schema, }; if (issuer !== undefined) { @@ -456,27 +456,27 @@ export class Credentials { const [, sad] = Saider.saidify(_sad); const exn = new Serder(sad); - let keeper = this.client!.manager!.get(hab); + const keeper = this.client!.manager!.get(hab); - let sig = await keeper.sign(b(exn.raw), true); + const sig = await keeper.sign(b(exn.raw), true); - let siger = new Siger({ qb64: sig[0] }); - let seal = ['SealLast', { i: pre }]; + const siger = new Siger({ qb64: sig[0] }); + const seal = ['SealLast', { i: pre }]; let ims = messagize(exn, [siger], seal, undefined, undefined, true); ims = ims.slice(JSON.stringify(exn.ked).length); - let body = { + const body = { exn: exn.ked, sig: new TextDecoder().decode(ims), recipient: recipient, }; - let path = `/identifiers/${name}/requests`; - let method = 'POST'; - let headers = new Headers({ + const path = `/identifiers/${name}/requests`; + const method = 'POST'; + const headers = new Headers({ Accept: 'application/json+cesr', }); - let res = await this.client.fetch(path, method, body, headers); + const res = await this.client.fetch(path, method, body, headers); return await res.text(); } } @@ -521,7 +521,7 @@ export class RegistryResult { } async op(): Promise { - let res = await this.promise; + const res = await this.promise; return await res.json(); } } @@ -546,9 +546,9 @@ export class Registries { * @returns {Promise} A promise to the list of registries */ async list(name: string): Promise { - let path = `/identifiers/${name}/registries`; - let method = 'GET'; - let res = await this.client.fetch(path, method, null); + const path = `/identifiers/${name}/registries`; + const method = 'GET'; + const res = await this.client.fetch(path, method, null); return await res.json(); } @@ -566,30 +566,30 @@ export class Registries { baks = [], nonce, }: CreateRegistryArgs): Promise { - let hab = await this.client.identifiers().get(name); - let pre: string = hab.prefix; + const hab = await this.client.identifiers().get(name); + const pre: string = hab.prefix; - let cnfg: string[] = []; + const cnfg: string[] = []; if (noBackers) { cnfg.push(TraitDex.NoBackers); } - let state = hab.state; - let estOnly = state.c !== undefined && state.c.includes('EO'); + const state = hab.state; + const estOnly = state.c !== undefined && state.c.includes('EO'); if (estOnly) { cnfg.push(TraitDex.EstOnly); } - let regser = vdr.incept({ pre, baks, toad, nonce, cnfg }); + const regser = vdr.incept({ pre, baks, toad, nonce, cnfg }); if (estOnly) { throw new Error('establishment only not implemented'); } else { - let state = hab.state; - let sn = Number(state.s); - let dig = state.d; + const state = hab.state; + const sn = Number(state.s); + const dig = state.d; - let data: any = [ + const data: any = [ { i: regser.pre, s: '0', @@ -597,7 +597,7 @@ export class Registries { }, ]; - let serder = interact({ + const serder = interact({ pre: pre, sn: sn + 1, data: data, @@ -605,9 +605,9 @@ export class Registries { version: Versionage, kind: Serials.JSON, }); - let keeper = this.client.manager!.get(hab); - let sigs = await keeper.sign(b(serder.raw)); - let res = this.createFromEvents( + const keeper = this.client.manager!.get(hab); + const sigs = await keeper.sign(b(serder.raw)); + const res = this.createFromEvents( hab, name, registryName, @@ -627,16 +627,16 @@ export class Registries { ixn: Dict, sigs: any[] ) { - let path = `/identifiers/${name}/registries`; - let method = 'POST'; + const path = `/identifiers/${name}/registries`; + const method = 'POST'; - let data: any = { + const data: any = { name: registryName, vcp: vcp, ixn: ixn, sigs: sigs, }; - let keeper = this.client!.manager!.get(hab); + const keeper = this.client!.manager!.get(hab); data[keeper.algo] = keeper.params(); return this.client.fetch(path, method, data); @@ -662,9 +662,9 @@ export class Schemas { * @returns {Promise} A promise to the schema */ async get(said: string): Promise { - let path = `/schema/${said}`; - let method = 'GET'; - let res = await this.client.fetch(path, method, null); + const path = `/schema/${said}`; + const method = 'GET'; + const res = await this.client.fetch(path, method, null); return await res.json(); } @@ -674,9 +674,9 @@ export class Schemas { * @returns {Promise} A promise to the list of schemas */ async list(): Promise { - let path = `/schema`; - let method = 'GET'; - let res = await this.client.fetch(path, method, null); + const path = `/schema`; + const method = 'GET'; + const res = await this.client.fetch(path, method, null); return await res.json(); } } @@ -745,8 +745,8 @@ export class Ipex { grant: string, datetime?: string ): Promise<[Serder, string[], string]> { - let hab = await this.client.identifiers().get(name); - let data: any = { + const hab = await this.client.identifiers().get(name); + const data: any = { m: message, }; diff --git a/src/keri/app/escrowing.ts b/src/keri/app/escrowing.ts index ec305cf0..dcd8e9c5 100644 --- a/src/keri/app/escrowing.ts +++ b/src/keri/app/escrowing.ts @@ -21,14 +21,14 @@ export class Escrows { * @returns {Promise} A promise to the list of replay messages */ async listReply(route?: string): Promise { - let params = new URLSearchParams(); + const params = new URLSearchParams(); if (route !== undefined) { params.append('route', route); } - let path = `/escrows/rpy` + '?' + params.toString(); - let method = 'GET'; - let res = await this.client.fetch(path, method, null); + const path = `/escrows/rpy` + '?' + params.toString(); + const method = 'GET'; + const res = await this.client.fetch(path, method, null); return await res.json(); } } diff --git a/src/keri/app/exchanging.ts b/src/keri/app/exchanging.ts index 4ecde1f9..d000c5a8 100644 --- a/src/keri/app/exchanging.ts +++ b/src/keri/app/exchanging.ts @@ -41,8 +41,8 @@ export class Exchanges { datetime?: string, dig?: string ): Promise<[Serder, string[], string]> { - let keeper = this.client.manager!.get(sender); - let [exn, end] = exchange( + const keeper = this.client.manager!.get(sender); + const [exn, end] = exchange( route, payload, sender['prefix'], @@ -53,7 +53,7 @@ export class Exchanges { embeds ); - let sigs = await keeper.sign(b(exn.raw)); + const sigs = await keeper.sign(b(exn.raw)); return [exn, sigs, d(end)]; } @@ -78,7 +78,7 @@ export class Exchanges { embeds: Dict, recipients: string[] ): Promise { - let [exn, sigs, atc] = await this.createExchangeMessage( + const [exn, sigs, atc] = await this.createExchangeMessage( sender, route, payload, @@ -113,9 +113,9 @@ export class Exchanges { atc: string, recipients: string[] ): Promise { - let path = `/identifiers/${name}/exchanges`; - let method = 'POST'; - let data: any = { + const path = `/identifiers/${name}/exchanges`; + const method = 'POST'; + const data: any = { tpc: topic, exn: exn.ked, sigs: sigs, @@ -123,7 +123,7 @@ export class Exchanges { rec: recipients, }; - let res = await this.client.fetch(path, method, data); + const res = await this.client.fetch(path, method, data); return await res.json(); } @@ -164,19 +164,19 @@ export function exchange( let e = {} as Dict; let end = ''; Object.entries(ems).forEach(([key, value]) => { - let serder = value[0]; - let atc = value[1]; + const serder = value[0]; + const atc = value[1]; e[key] = serder.ked; if (atc == undefined) { return; } let pathed = ''; - let pather = new Pather({}, undefined, ['e', key]); + const pather = new Pather({}, undefined, ['e', key]); pathed += pather.qb64; pathed += atc; - let counter = new Counter({ + const counter = new Counter({ code: CtrDex.PathedMaterialQuadlets, count: Math.floor(pathed.length / 4), }); @@ -195,12 +195,12 @@ export function exchange( attrs['i'] = recipient; } - let a = { + const a = { ...attrs, ...payload, }; - let _ked = { + const _ked = { v: vs, t: ilk, d: '', @@ -212,9 +212,9 @@ export function exchange( a: a, e: e, }; - let [, ked] = Saider.saidify(_ked); + const [, ked] = Saider.saidify(_ked); - let exn = new Serder(ked); + const exn = new Serder(ked); return [exn, b(end)]; } diff --git a/src/keri/app/grouping.ts b/src/keri/app/grouping.ts index 153cdf13..0de192c6 100644 --- a/src/keri/app/grouping.ts +++ b/src/keri/app/grouping.ts @@ -22,9 +22,9 @@ export class Groups { * @returns {Promise} A promise to the list of replay messages */ async getRequest(said: string): Promise { - let path = `/multisig/request/` + said; - let method = 'GET'; - let res = await this.client.fetch(path, method, null); + const path = `/multisig/request/` + said; + const method = 'GET'; + const res = await this.client.fetch(path, method, null); return await res.json(); } @@ -43,14 +43,14 @@ export class Groups { sigs: string[], atc: string ): Promise { - let path = `/identifiers/${name}/multisig/request`; - let method = 'POST'; - let data = { + const path = `/identifiers/${name}/multisig/request`; + const method = 'POST'; + const data = { exn: exn, sigs: sigs, atc: atc, }; - let res = await this.client.fetch(path, method, data); + const res = await this.client.fetch(path, method, data); return await res.json(); } @@ -74,9 +74,9 @@ export class Groups { smids: string[], rmids: string[] ): Promise { - let path = `/identifiers/${name}/multisig/join`; - let method = 'POST'; - let data = { + const path = `/identifiers/${name}/multisig/join`; + const method = 'POST'; + const data = { tpc: 'multisig', rot: rot.ked, sigs: sigs, @@ -84,7 +84,7 @@ export class Groups { smids: smids, rmids: rmids }; - let res = await this.client.fetch(path, method, data); + const res = await this.client.fetch(path, method, data); return await res.json(); } diff --git a/src/keri/app/habery.ts b/src/keri/app/habery.ts index e21638de..08da4b3e 100644 --- a/src/keri/app/habery.ts +++ b/src/keri/app/habery.ts @@ -65,8 +65,8 @@ export class Habery { throw new Error('Bran (passcode seed material) too short.'); } - let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21); // qb64 salt for seed - let signer = new Salter({ qb64: bran }).signer( + const bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21); // qb64 salt for seed + const signer = new Salter({ qb64: bran }).signer( MtrDex.Ed25519_Seed, false ); @@ -76,7 +76,7 @@ export class Habery { } } let algo; - let salter = salt != undefined ? new Salter({ qb64: salt }) : undefined; + const salter = salt != undefined ? new Salter({ qb64: salt }) : undefined; if (salt != undefined) { algo = Algos.salty; } else { @@ -133,7 +133,7 @@ export class Habery { code = MtrDex.Ed25519N; } - let [verfers, digers] = this._mgr.incept({ + const [verfers, digers] = this._mgr.incept({ icount: icount, ncount: ncount, stem: this.name, @@ -150,7 +150,7 @@ export class Habery { nsith = `${Math.max(1, Math.ceil(ncount / 2)).toString(16)}`; } - let cnfg = new Array(); + const cnfg = new Array(); if (estOnly) { cnfg.push(TraitDex.EstOnly); } @@ -158,8 +158,8 @@ export class Habery { cnfg.push(TraitDex.DoNotDelegate); } - let keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64); - let ndigs = Array.from(digers, (diger: Diger) => diger.qb64); + const keys = Array.from(verfers, (verfer: Verfer) => verfer.qb64); + const ndigs = Array.from(digers, (diger: Diger) => diger.qb64); const icp = incept({ keys, diff --git a/src/keri/app/notifying.ts b/src/keri/app/notifying.ts index 8a947bb2..5b631f96 100644 --- a/src/keri/app/notifying.ts +++ b/src/keri/app/notifying.ts @@ -23,16 +23,16 @@ export class Notifications { * @returns {Promise} A promise to the list of notifications */ async list(start: number = 0, end: number = 24): Promise { - let extraHeaders = new Headers(); + const extraHeaders = new Headers(); extraHeaders.append('Range', `notes=${start}-${end}`); - let path = `/notifications`; - let method = 'GET'; - let res = await this.client.fetch(path, method, null, extraHeaders); + const path = `/notifications`; + const method = 'GET'; + const res = await this.client.fetch(path, method, null, extraHeaders); - let cr = res.headers.get('content-range'); - let range = parseRangeHeaders(cr, 'notes'); - let notes = await res.json(); + const cr = res.headers.get('content-range'); + const range = parseRangeHeaders(cr, 'notes'); + const notes = await res.json(); return { start: range.start, @@ -49,9 +49,9 @@ export class Notifications { * @returns {Promise} A promise to the result of the marking */ async mark(said: string): Promise { - let path = `/notifications/` + said; - let method = 'PUT'; - let res = await this.client.fetch(path, method, null); + const path = `/notifications/` + said; + const method = 'PUT'; + const res = await this.client.fetch(path, method, null); return await res.text(); } @@ -62,9 +62,9 @@ export class Notifications { * @returns {Promise} A promise to the result of the deletion */ async delete(said: string): Promise { - let path = `/notifications/` + said; - let method = 'DELETE'; - let res = await this.client.fetch(path, method, null); + const path = `/notifications/` + said; + const method = 'DELETE'; + const res = await this.client.fetch(path, method, null); return await res.json(); } } diff --git a/src/keri/core/authing.ts b/src/keri/core/authing.ts index 3e0c8930..5f816f0e 100644 --- a/src/keri/core/authing.ts +++ b/src/keri/core/authing.ts @@ -20,11 +20,11 @@ export class Authenticater { } verify(headers: Headers, method: string, path: string): boolean { - let siginput = headers.get('Signature-Input'); + const siginput = headers.get('Signature-Input'); if (siginput == null) { return false; } - let signature = headers.get('Signature'); + const signature = headers.get('Signature'); if (signature == null) { return false; } @@ -34,7 +34,7 @@ export class Authenticater { return false; } inputs.forEach((input) => { - let items = new Array(); + const items = new Array(); input.fields!.forEach((field: string) => { if (field.startsWith('@')) { if (field == '@method') { @@ -44,12 +44,12 @@ export class Authenticater { } } else { if (headers.has(field)) { - let value = normalize(headers.get(field) as string); + const value = normalize(headers.get(field) as string); items.push(`"${field}": ${value}`); } } }); - let values = new Array(); + const values = new Array(); values.push(`(${input.fields!.join(' ')})`); values.push(`created=${input.created}`); if (input.expires != undefined) { @@ -67,11 +67,11 @@ export class Authenticater { if (input.alg != undefined) { values.push(`alg=${input.alg}`); } - let params = values.join(';'); + const params = values.join(';'); items.push(`"@signature-params: ${params}"`); - let ser = items.join('\n'); - let signage = designature(signature!); - let cig = signage[0].markers.get(input.name); + const ser = items.join('\n'); + const signage = designature(signature!); + const cig = signage[0].markers.get(input.name); if (!this._verfer.verify(cig.raw, ser)) { throw new Error(`Signature for ${input.keyid} invalid.`); } @@ -90,7 +90,7 @@ export class Authenticater { fields = Authenticater.DefaultFields; } - let [header, sig] = siginput(this._csig, { + const [header, sig] = siginput(this._csig, { name: 'signify', method, path, @@ -104,10 +104,10 @@ export class Authenticater { headers.append(key, value); }); - let markers = new Map(); + const markers = new Map(); markers.set('signify', sig); - let signage = new Signage(markers, false); - let signed = signature([signage]); + const signage = new Signage(markers, false); + const signed = signature([signage]); signed.forEach((value, key) => { headers.append(key, value); }); diff --git a/src/keri/core/bexter.ts b/src/keri/core/bexter.ts index 4920181a..bf1abfcb 100644 --- a/src/keri/core/bexter.ts +++ b/src/keri/core/bexter.ts @@ -95,7 +95,7 @@ export class Bexter extends Matter { if (bext === undefined) throw new EmptyMaterialError('Missing bext string.'); - let match = Reb64.exec(bext); + const match = Reb64.exec(bext); if (!match) throw new Error('Invalid Base64.'); raw = Bexter._rawify(bext); @@ -108,21 +108,21 @@ export class Bexter extends Matter { } static _rawify(bext: string): Uint8Array { - let ts = bext.length % 4; // bext size mod 4 - let ws = (4 - ts) % 4; // pre conv wad size in chars - let ls = (3 - ts) % 3; // post conv lead size in bytes - let wad = new Array(ws); + const ts = bext.length % 4; // bext size mod 4 + const ws = (4 - ts) % 4; // pre conv wad size in chars + const ls = (3 - ts) % 3; // post conv lead size in bytes + const wad = new Array(ws); wad.fill('A'); - let base = wad.join('') + bext; // pre pad with wad of zeros in Base64 == 'A' - let raw = Base64.decode(base); // [ls:] // convert and remove leader + const base = wad.join('') + bext; // pre pad with wad of zeros in Base64 == 'A' + const raw = Base64.decode(base); // [ls:] // convert and remove leader return Uint8Array.from(raw).subarray(ls); // raw binary equivalent of text } get bext(): string { - let sizage = Matter.Sizes.get(this.code); - let wad = Uint8Array.from(new Array(sizage?.ls).fill(0)); - let bext = Base64.encode(Buffer.from([...wad, ...this.raw])); + const sizage = Matter.Sizes.get(this.code); + const wad = Uint8Array.from(new Array(sizage?.ls).fill(0)); + const bext = Base64.encode(Buffer.from([...wad, ...this.raw])); let ws = 0; if (sizage?.ls === 0 && bext !== undefined) { diff --git a/src/keri/core/cipher.ts b/src/keri/core/cipher.ts index 53095a5f..ba11262e 100644 --- a/src/keri/core/cipher.ts +++ b/src/keri/core/cipher.ts @@ -28,7 +28,7 @@ export class Cipher extends Matter { prikey: Uint8Array | undefined = undefined, seed: Uint8Array | undefined = undefined ) { - let decrypter = new Decrypter({ qb64b: prikey }, seed); + const decrypter = new Decrypter({ qb64b: prikey }, seed); return decrypter.decrypt(this.qb64b); } } diff --git a/src/keri/core/core.ts b/src/keri/core/core.ts index c607a453..6d4d148f 100644 --- a/src/keri/core/core.ts +++ b/src/keri/core/core.ts @@ -171,9 +171,9 @@ export function deversify( throw new Error(`Invalid serialization kind = ${kind}`); } - let ta = kind as keyof typeof Serials; + const ta = kind as keyof typeof Serials; kind = Serials[ta]; - let pa = proto as keyof typeof Ident; + const pa = proto as keyof typeof Ident; proto = Ident[pa]; return [proto, kind, version, size]; @@ -275,7 +275,7 @@ export function intToB64(i: number, l = 1): string { } } - let x = l - out.length; + const x = l - out.length; for (let i = 0; i < x; i++) { out = 'A' + out; } @@ -284,7 +284,7 @@ export function intToB64(i: number, l = 1): string { } export function intToB64b(n: number, l: number = 1): Uint8Array { - let s = intToB64(n, l); + const s = intToB64(n, l); return b(s); } @@ -294,7 +294,7 @@ export function b64ToInt(s: string): number { } let i = 0; - let rev = s.split('').reverse(); + const rev = s.split('').reverse(); rev.forEach((c: string, e: number) => { i |= B64IdxByChr.get(c)! << (e * 6); }); @@ -311,7 +311,7 @@ export function d(u?: Uint8Array): string { } export function concat(one: Uint8Array, two: Uint8Array): Uint8Array { - let out = new Uint8Array(one.length + two.length); + const out = new Uint8Array(one.length + two.length); out.set(one); out.set(two, one.length); return out; diff --git a/src/keri/core/counter.ts b/src/keri/core/counter.ts index 814da818..00fcdc0d 100644 --- a/src/keri/core/counter.ts +++ b/src/keri/core/counter.ts @@ -118,8 +118,8 @@ export class Counter { throw new Error(`"Unsupported code=${code}.`); } - let sizage = Counter.Sizes.get(code)!; - let cs = sizage.hs + sizage.ss; + const sizage = Counter.Sizes.get(code)!; + const cs = sizage.hs + sizage.ss; if (sizage.fs != cs || cs % 4 != 0) { throw new Error( `Whole code size not full size or not multiple of 4. cs=${cs} fs=${sizage.fs}.` @@ -137,7 +137,7 @@ export class Counter { this._code = code; this._count = count; } else if (qb64b != undefined) { - let qb64 = d(qb64b); + const qb64 = d(qb64b); this._exfil(qb64); } else if (qb64 != undefined) { this._exfil(qb64); @@ -167,7 +167,7 @@ export class Counter { countToB64(l?: number): string { if (l == undefined) { - let sizage = Counter.Sizes.get(this.code)!; + const sizage = Counter.Sizes.get(this.code)!; l = sizage.ss; } return intToB64(this.count, l); @@ -181,14 +181,14 @@ export class Counter { ): string { let parts = [major, minor, patch]; if (version != '') { - let ssplits = version.split('.'); - let splits = ssplits.map((x) => { + const ssplits = version.split('.'); + const splits = ssplits.map((x) => { if (x == '') return 0; return parseInt(x); }); - let off = splits.length; - let x = 3 - off; + const off = splits.length; + const x = 3 - off; for (let i = 0; i < x; i++) { splits.push(parts[i + off]); } @@ -211,11 +211,11 @@ export class Counter { } private _infil(): string { - let code = this.code; - let count = this.count; + const code = this.code; + const count = this.count; - let sizage = Counter.Sizes.get(code)!; - let cs = sizage.hs + sizage.ss; + const sizage = Counter.Sizes.get(code)!; + const cs = sizage.hs + sizage.ss; if (sizage.fs != cs || cs % 4 != 0) { throw new Error( `Whole code size not full size or not multiple of 4. cs=${cs} fs=${sizage.fs}.` @@ -226,7 +226,7 @@ export class Counter { throw new Error(`Invalid count=${count} for code=${code}.`); } - let both = `${code}${intToB64(count, sizage.ss)}`; + const both = `${code}${intToB64(count, sizage.ss)}`; if (both.length % 4) { throw new Error( @@ -242,30 +242,30 @@ export class Counter { throw new Error('Empty Material'); } - let first = qb64.slice(0, 2); + const first = qb64.slice(0, 2); if (!Counter.Hards.has(first)) { throw new Error(`Unexpected code ${first}`); } - let hs = Counter.Hards.get(first)!; + const hs = Counter.Hards.get(first)!; if (qb64.length < hs) { throw new Error(`Need ${hs - qb64.length} more characters.`); } - let hard = qb64.slice(0, hs); + const hard = qb64.slice(0, hs); if (!Counter.Sizes.has(hard)) { throw new Error(`Unsupported code ${hard}`); } - let sizage = Counter.Sizes.get(hard)!; - let cs = sizage!.hs + sizage!.ss; + const sizage = Counter.Sizes.get(hard)!; + const cs = sizage!.hs + sizage!.ss; if (qb64.length < cs) { throw new Error(`Need ${cs - qb64.length} more chars.`); } - let scount = qb64.slice(sizage.hs, sizage.hs + sizage.ss); - let count = b64ToInt(scount); + const scount = qb64.slice(sizage.hs, sizage.hs + sizage.ss); + const count = b64ToInt(scount); this._code = hard; this._count = count; diff --git a/src/keri/core/decrypter.ts b/src/keri/core/decrypter.ts index 840aaea9..b1ca0538 100644 --- a/src/keri/core/decrypter.ts +++ b/src/keri/core/decrypter.ts @@ -17,13 +17,13 @@ export class Decrypter extends Matter { } catch (e) { if (e instanceof EmptyMaterialError) { if (seed != undefined) { - let signer = new Signer({ qb64b: seed }); + const signer = new Signer({ qb64b: seed }); if (signer.code != MtrDex.Ed25519_Seed) { throw new Error( `Unsupported signing seed derivation code ${signer.code}` ); } - let sigkey = new Uint8Array( + const sigkey = new Uint8Array( signer.raw.length + signer.verfer.raw.length ); sigkey.set(signer.raw); @@ -63,8 +63,8 @@ export class Decrypter extends Matter { } _x25519(cipher: Cipher, prikey: Uint8Array, transferable: boolean = false) { - let pubkey = libsodium.crypto_scalarmult_base(prikey); - let plain = libsodium.crypto_box_seal_open(cipher.raw, pubkey, prikey); + const pubkey = libsodium.crypto_scalarmult_base(prikey); + const plain = libsodium.crypto_box_seal_open(cipher.raw, pubkey, prikey); if (cipher.code == MtrDex.X25519_Cipher_Salt) { return new Salter({ qb64b: plain }); } else if (cipher.code == MtrDex.X25519_Cipher_Seed) { diff --git a/src/keri/core/diger.ts b/src/keri/core/diger.ts index f3323e44..6ee17063 100644 --- a/src/keri/core/diger.ts +++ b/src/keri/core/diger.ts @@ -75,7 +75,7 @@ export class Diger extends Matter { blake3_256(ser: Uint8Array, dig: any) { const hasher = createHash(); - let digest = hasher.update(ser).digest(''); + const digest = hasher.update(ser).digest(''); return digest.toString() === dig.toString(); } } diff --git a/src/keri/core/encrypter.ts b/src/keri/core/encrypter.ts index ddaff633..0ac77b26 100644 --- a/src/keri/core/encrypter.ts +++ b/src/keri/core/encrypter.ts @@ -13,7 +13,7 @@ export class Encrypter extends Matter { verkey: Uint8Array | null = null ) { if (raw == undefined && verkey != null) { - let verfer = new Verfer({ qb64b: verkey }); + const verfer = new Verfer({ qb64b: verkey }); if ( !Array.from([MtrDex.Ed25519N, MtrDex.Ed25519]).includes( verfer.code @@ -36,9 +36,9 @@ export class Encrypter extends Matter { } verifySeed(seed: Uint8Array) { - let signer = new Signer({ qb64b: seed }); - let keypair = libsodium.crypto_sign_seed_keypair(signer.raw); - let pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519( + const signer = new Signer({ qb64b: seed }); + const keypair = libsodium.crypto_sign_seed_keypair(signer.raw); + const pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519( keypair.publicKey ); return arrayEquals(pubkey, this.raw); @@ -64,7 +64,7 @@ export class Encrypter extends Matter { } _x25519(ser: Uint8Array, pubkey: Uint8Array, code: string) { - let raw = libsodium.crypto_box_seal(ser, pubkey); + const raw = libsodium.crypto_box_seal(ser, pubkey); return new Cipher({ raw: raw, code: code }); } } diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index 669b4c0c..ff4af89b 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -21,7 +21,7 @@ import { Counter, CtrDex } from './counter'; import { Seqner } from './seqner'; import { TextEncoder } from 'util'; -let MaxIntThold = 2 ** 32 - 1; +const MaxIntThold = 2 ** 32 - 1; export interface RotateArgs { pre?: string; @@ -62,13 +62,13 @@ export function rotate({ kind = undefined, intive = true, }: RotateArgs) { - let vs = versify(Ident.KERI, version, kind, 0); - let _ilk = ilk; + const vs = versify(Ident.KERI, version, kind, 0); + const _ilk = ilk; if (_ilk != Ilks.rot && _ilk != Ilks.drt) { throw new Error(`Invalid ilk = ${ilk} for rot or drt.`); } - let sner = Number(sn); + const sner = Number(sn); if (sner < 1) { throw new Error(`Invalid sn = 0x${sner.toString()} for rot or drt.`); } @@ -80,7 +80,7 @@ export function rotate({ _isit = isith as number; } - let tholder = new Tholder({ sith: _isit }); + const tholder = new Tholder({ sith: _isit }); if (tholder.num != undefined && tholder.num < 1) { throw new Error(`Invalid sith = ${tholder.num} less than 1.`); } @@ -103,7 +103,7 @@ export function rotate({ _nsith = nsith; } - let ntholder = new Tholder({ sith: _nsith }); + const ntholder = new Tholder({ sith: _nsith }); if (ntholder.num != undefined && ntholder.num < 1) { throw new Error(`Invalid sith = ${ntholder.num} less than 1.`); } @@ -117,7 +117,7 @@ export function rotate({ } else { _wits = wits; } - let witset = new Set(_wits); + const witset = new Set(_wits); if (witset.size != _wits.length) { throw new Error(`Invalid wits = ${wits}, has duplicates.`); } @@ -128,7 +128,7 @@ export function rotate({ } else { _cuts = cuts; } - let cutset = new Set(_cuts); + const cutset = new Set(_cuts); if (cutset.size != _cuts.length) { throw new Error(`Invalid cuts = ${cuts}, has duplicates.`); } @@ -139,10 +139,10 @@ export function rotate({ } else { _adds = adds; } - let addset = new Set(_adds); + const addset = new Set(_adds); //non empty intersection of witset and addset - let witaddset = new Set([...witset].filter((x) => addset.has(x))); + const witaddset = new Set([...witset].filter((x) => addset.has(x))); if (witaddset.size > 0) { throw new Error( `Invalid member combination among wits = ${wits}, and adds = ${adds}.` @@ -150,18 +150,18 @@ export function rotate({ } // non empty intersection of cutset and addset - let cutaddset = new Set([...cutset].filter((x) => addset.has(x))); + const cutaddset = new Set([...cutset].filter((x) => addset.has(x))); if (cutaddset.size > 0) { throw new Error( `Invalid member combination among cuts = ${cuts}, and adds = ${adds}.` ); } - let newitsetdiff = new Set(_wits); + const newitsetdiff = new Set(_wits); _cuts.forEach(function (v) { newitsetdiff.delete(v); }); - let newitset = new Set( + const newitset = new Set( (function* () { yield* newitsetdiff; yield* addset; @@ -195,7 +195,7 @@ export function rotate({ throw new Error(`Invalid toad = ${_toad} for wit = ${wits}`); } } - let _ked = { + const _ked = { v: vs, t: _ilk, d: '', @@ -226,7 +226,7 @@ export function rotate({ ba: adds, a: data != undefined ? data : [], }; - let [, ked] = Saider.saidify(_ked); + const [, ked] = Saider.saidify(_ked); return new Serder(ked); } @@ -236,7 +236,7 @@ export function ample(n: number, f?: number, weak = true) { if (f == undefined) { f1 = Math.max(1, Math.floor(Math.max(0, n - 1) / 3)); // least floor f subject to n >= 3*f+1 - let f2 = Math.max(1, Math.ceil(Math.max(0, n - 1) / 3)); // most Math.ceil f subject to n >= 3*f+1 + const f2 = Math.max(1, Math.ceil(Math.max(0, n - 1) / 3)); // most Math.ceil f subject to n >= 3*f+1 if (weak) { // try both fs to see which one has lowest m return Math.min( @@ -252,8 +252,8 @@ export function ample(n: number, f?: number, weak = true) { } } else { f = Math.max(0, f); - let m1 = Math.ceil((n + f + 1) / 2); - let m2 = Math.max(0, n - f); + const m1 = Math.ceil((n + f + 1) / 2); + const m2 = Math.max(0, n - f); if (m2 < m1 && n > 0) { throw new Error(`Invalid f=${f} is too big for n=${n}.`); } @@ -296,15 +296,15 @@ export function incept({ intive = false, delpre, }: InceptArgs) { - let vs = versify(Ident.KERI, version, kind, 0); - let ilk = delpre == undefined ? Ilks.icp : Ilks.dip; - let sner = new CesrNumber({}, 0); + const vs = versify(Ident.KERI, version, kind, 0); + const ilk = delpre == undefined ? Ilks.icp : Ilks.dip; + const sner = new CesrNumber({}, 0); if (isith == undefined) { isith = Math.max(1, Math.ceil(keys.length / 2)); } - let tholder = new Tholder({ sith: isith }); + const tholder = new Tholder({ sith: isith }); if (tholder.num != undefined && tholder.num < 1) { throw new Error(`Invalid sith = ${tholder.num} less than 1.`); } @@ -320,7 +320,7 @@ export function incept({ nsith = Math.max(0, Math.ceil(ndigs.length / 2)); } - let ntholder = new Tholder({ sith: nsith }); + const ntholder = new Tholder({ sith: nsith }); if (ntholder.num != undefined && ntholder.num < 0) { throw new Error(`Invalid nsith = ${ntholder.num} less than 0.`); } @@ -341,7 +341,7 @@ export function incept({ } } - let toader = new CesrNumber({}, toad); + const toader = new CesrNumber({}, toad); if (wits.length > 0) { if (toader.num < 1 || toader.num > wits.length) { throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`); @@ -516,8 +516,8 @@ export function messagize( } interface InteractArgs { - pre: String; - dig: String; + pre: string; + dig: string; sn: number; data: Array; version: Version | undefined; @@ -526,9 +526,9 @@ interface InteractArgs { export function interact(args: InteractArgs): Serder { let { pre, dig, sn, data, version, kind } = args; - let vs = versify(Ident.KERI, version, kind, 0); - let ilk = Ilks.ixn; - let sner = new CesrNumber({}, sn); + const vs = versify(Ident.KERI, version, kind, 0); + const ilk = Ilks.ixn; + const sner = new CesrNumber({}, sn); if (sner.num < 1) { throw new Error(`Invalid sn = 0x${sner.numh} for ixn.`); diff --git a/src/keri/core/httping.ts b/src/keri/core/httping.ts index 95f17561..70b59dd5 100644 --- a/src/keri/core/httping.ts +++ b/src/keri/core/httping.ts @@ -45,8 +45,8 @@ export function siginput( context, }: SiginputArgs ): [Map, Siger | Cigar] { - let items = new Array(); - let ifields = new Array<[string, Map]>(); + const items = new Array(); + const ifields = new Array<[string, Map]>(); fields.forEach((field) => { if (field.startsWith('@')) { @@ -64,16 +64,16 @@ export function siginput( if (!headers.has(field)) return; ifields.push([field, new Map()]); - let value = normalize(headers.get(field)!); + const value = normalize(headers.get(field)!); items.push(`"${field}": ${value}`); } }); - let nameParams = new Map(); - let now = Math.floor(nowUTC().getTime() / 1000); + const nameParams = new Map(); + const now = Math.floor(nowUTC().getTime() / 1000); nameParams.set('created', now); - let values = [ + const values = [ `(${ifields.map((field) => field[0]).join(' ')})`, `created=${now}`, ]; @@ -97,13 +97,13 @@ export function siginput( values.push(`alg=${alg}`); nameParams.set('alg', alg); } - let sid = new Map([[name, [ifields, nameParams]]]); + const sid = new Map([[name, [ifields, nameParams]]]); - let params = values.join(';'); + const params = values.join(';'); items.push(`"@signature-params: ${params}"`); - let ser = items.join('\n'); - let sig = signer.sign(b(ser)); + const ser = items.join('\n'); + const sig = signer.sign(b(ser)); return [ new Map([ @@ -141,11 +141,11 @@ export class Inputage { } export function desiginput(value: string): Array { - let sid = parseDictionary(value); - let siginputs = new Array(); + const sid = parseDictionary(value); + const siginputs = new Array(); sid.forEach((value, key) => { - let siginput = new Inputage(); + const siginput = new Inputage(); siginput.name = key; let list: Item[]; let params; @@ -194,9 +194,9 @@ export function parseRangeHeaders( typ: string ): { start: number; end: number; total: number } { if (header !== null) { - let data = header.replace(`${typ} `, ''); - let values = data.split('/'); - let rng = values[0].split('-'); + const data = header.replace(`${typ} `, ''); + const values = data.split('/'); + const rng = values[0].split('-'); return { start: parseInt(rng[0]), diff --git a/src/keri/core/indexer.ts b/src/keri/core/indexer.ts index aa69053c..a4f52b9c 100644 --- a/src/keri/core/indexer.ts +++ b/src/keri/core/indexer.ts @@ -43,7 +43,7 @@ export class IndexedSigCodex { Ed448_Big_Crt_Sig: string = '3B'; // Ed448 signature appears in current list only. has(prop: string): boolean { - let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + const m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); return m.has(prop); } } @@ -61,7 +61,7 @@ export class IndexedCurrentSigCodex { Ed448_Big_Crt_Sig: string = '3B'; // Ed448 signature appears in current list only. has(prop: string): boolean { - let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + const m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); return m.has(prop); } } @@ -77,7 +77,7 @@ export class IndexedBothSigCodex { Ed448_Big_Sig: string = '3A'; // Ed448 signature appears in both lists. has(prop: string): boolean { - let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + const m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); return m.has(prop); } } @@ -225,11 +225,11 @@ export class Indexer { throw new Error(`Unsupported code=${code}.`); } - let xizage = Indexer.Sizes.get(code)!; - let os = xizage.os; - let fs = xizage.fs; - let cs = xizage.hs + xizage.ss; - let ms = xizage.ss - xizage.os; + const xizage = Indexer.Sizes.get(code)!; + const os = xizage.os; + const fs = xizage.fs; + const cs = xizage.hs + xizage.ss; + const ms = xizage.ss - xizage.os; if (!Number.isInteger(index) || index < 0 || index > 64 ** ms - 1) { throw new Error(`Invalid index=${index} for code=${code}.`); @@ -271,7 +271,7 @@ export class Indexer { // raise InvalidCodeSizeError(f"Non-zero other index size for " // f"variable length material. os={os}.") // fs = (index * 4) + cs - let rawsize = Math.floor(((fs - cs) * 3) / 4); + const rawsize = Math.floor(((fs - cs) * 3) / 4); raw = raw.slice(0, rawsize); if (raw.length != rawsize) { @@ -285,7 +285,7 @@ export class Indexer { this._ondex = ondex; this._raw = raw; } else if (qb64b != undefined) { - let qb64 = d(qb64b); + const qb64 = d(qb64b); this._exfil(qb64); } else if (qb64 != undefined) { this._exfil(qb64); @@ -303,7 +303,7 @@ export class Indexer { } public static _rawSize(code: string) { - let xizage = Indexer.Sizes.get(code)!; + const xizage = Indexer.Sizes.get(code)!; return Math.floor(xizage.fs! - ((xizage.hs + xizage.ss) * 3) / 4); } @@ -332,15 +332,15 @@ export class Indexer { } private _infil(): string { - let code = this.code; - let index = this.index; - let ondex = this.ondex; - let raw = this.raw; + const code = this.code; + const index = this.index; + const ondex = this.ondex; + const raw = this.raw; - let ps = (3 - (raw.length % 3)) % 3; - let xizage = Indexer.Sizes.get(code)!; - let cs = xizage.hs + xizage.ss; - let ms = xizage.ss - xizage.os; + const ps = (3 - (raw.length % 3)) % 3; + const xizage = Indexer.Sizes.get(code)!; + const cs = xizage.hs + xizage.ss; + const ms = xizage.ss - xizage.os; // TODO: don't support this code // if not fs: # compute fs from index @@ -366,7 +366,7 @@ export class Indexer { ); } - let both = `${code}${intToB64(index, ms)}${intToB64( + const both = `${code}${intToB64(index, ms)}${intToB64( ondex == undefined ? 0 : ondex, xizage.os )}`; @@ -383,16 +383,16 @@ export class Indexer { ); } - let bytes = new Uint8Array(ps + raw.length); + const bytes = new Uint8Array(ps + raw.length); for (let i = 0; i < ps; i++) { bytes[i] = 0; } for (let i = 0; i < raw.length; i++) { - let odx = i + ps; + const odx = i + ps; bytes[odx] = raw[i]; } - let full = + const full = both + Base64.encode(Buffer.from(bytes)).slice(ps - xizage.ls); if (full.length != xizage.fs) { throw new Error(`Invalid code=${both} for raw size=${raw.length}.`); @@ -406,33 +406,33 @@ export class Indexer { throw new Error('Empty Material'); } - let first = qb64[0]; + const first = qb64[0]; if (!Array.from(Indexer.Hards.keys()).includes(first)) { throw new Error(`Unexpected code ${first}`); } - let hs = Indexer.Hards.get(first)!; + const hs = Indexer.Hards.get(first)!; if (qb64.length < hs) { throw new Error(`Need ${hs - qb64.length} more characters.`); } - let hard = qb64.slice(0, hs); + const hard = qb64.slice(0, hs); if (!Array.from(Indexer.Sizes.keys()).includes(hard)) { throw new Error(`Unsupported code ${hard}`); } - let xizage = Indexer.Sizes.get(hard)!; - let cs = xizage.hs + xizage.ss; // both hard + soft code size - let ms = xizage.ss - xizage.os; + const xizage = Indexer.Sizes.get(hard)!; + const cs = xizage.hs + xizage.ss; // both hard + soft code size + const ms = xizage.ss - xizage.os; if (qb64.length < cs) { throw new Error(`Need ${cs - qb64.length} more characters.`); } - let sindex = qb64.slice(hs, hs + ms); - let index = b64ToInt(sindex); + const sindex = qb64.slice(hs, hs + ms); + const index = b64ToInt(sindex); - let sondex = qb64.slice(hs + ms, hs + ms + xizage.os); + const sondex = qb64.slice(hs + ms, hs + ms + xizage.os); let ondex; if (IdxCrtSigDex.has(hard)) { ondex = xizage.os != 0 ? b64ToInt(sondex) : undefined; @@ -463,13 +463,13 @@ export class Indexer { } qb64 = qb64.slice(0, xizage.fs); - let ps = cs % 4; - let pbs = 2 * ps != 0 ? ps : xizage.ls; + const ps = cs % 4; + const pbs = 2 * ps != 0 ? ps : xizage.ls; let raw; if (ps != 0) { - let base = new Array(ps + 1).join('A') + qb64.slice(cs); - let paw = Base64.decode(base); // decode base to leave prepadded raw - let pi = readInt(paw.slice(0, ps)); // prepad as int + const base = new Array(ps + 1).join('A') + qb64.slice(cs); + const paw = Base64.decode(base); // decode base to leave prepadded raw + const pi = readInt(paw.slice(0, ps)); // prepad as int if (pi & (2 ** pbs - 1)) { // masked pad bits non-zero throw new Error( @@ -478,9 +478,9 @@ export class Indexer { } raw = paw.slice(ps); // strip off ps prepad paw bytes } else { - let base = qb64.slice(cs); - let paw = Base64.decode(base); - let li = readInt(paw.slice(0, xizage!.ls)); + const base = qb64.slice(cs); + const paw = Base64.decode(base); + const li = readInt(paw.slice(0, xizage!.ls)); if (li != 0) { if (li == 1) { throw new Error(`Non zeroed lead byte = 0x{li:02x}.`); diff --git a/src/keri/core/keeping.ts b/src/keri/core/keeping.ts index 456266cf..13f199b6 100644 --- a/src/keri/core/keeping.ts +++ b/src/keri/core/keeping.ts @@ -77,9 +77,9 @@ export class KeyManager { kargs['ndigs'] ); case Algos.extern: - let typ = kargs.extern_type; + const typ = kargs.extern_type; if (typ in this.modules) { - let mod = new this.modules[typ](pidx, kargs); + const mod = new this.modules[typ](pidx, kargs); return mod; } else { throw new Error(`unsupported external module type ${typ}`); @@ -90,9 +90,9 @@ export class KeyManager { } get(aid: any) { - let pre = new Prefixer({ qb64: aid['prefix'] }); + const pre = new Prefixer({ qb64: aid['prefix'] }); if (Algos.salty in aid) { - let kargs = aid[Algos.salty]; + const kargs = aid[Algos.salty]; return new SaltyKeeper( this.salter!, kargs['pidx'], @@ -111,7 +111,7 @@ export class KeyManager { kargs['sxlt'] ); } else if (Algos.randy in aid) { - let kargs = aid[Algos.randy]; + const kargs = aid[Algos.randy]; return new RandyKeeper( this.salter!, kargs['code'], @@ -126,7 +126,7 @@ export class KeyManager { kargs['nxts'] ); } else if (Algos.group in aid) { - let kargs = aid[Algos.group]; + const kargs = aid[Algos.group]; return new GroupKeeper( this, kargs['mhab'], @@ -136,10 +136,10 @@ export class KeyManager { kargs['ndigs'] ); } else if (Algos.extern in aid) { - let kargs = aid[Algos.randy]; - let typ = kargs.extern_type; + const kargs = aid[Algos.randy]; + const typ = kargs.extern_type; if (typ in this.modules) { - let mod = new this.modules[typ](kargs['pidx'], kargs); + const mod = new this.modules[typ](kargs['pidx'], kargs); return mod; } else { throw new Error(`unsupported external module type ${typ}`); @@ -192,7 +192,7 @@ export class SaltyKeeper { ) { // # Salter is the entered passcode and used for enc/dec of salts for each AID this.salter = salter; - let signer = this.salter.signer(undefined, (transferable = false)); + const signer = this.salter.signer(undefined, (transferable = false)); this.aeid = signer.verfer.qb64; @@ -225,7 +225,7 @@ export class SaltyKeeper { this.sxlt = this.encrypter.encrypt(b(this.creator.salt)).qb64; } else { this.sxlt = sxlt; - let ciph = new Cipher({ qb64: this.sxlt }); + const ciph = new Cipher({ qb64: this.sxlt }); this.creator = new SaltyCreator( this.decrypter.decrypt(null, ciph).qb64, (tier = tier), @@ -274,7 +274,7 @@ export class SaltyKeeper { this.transferable = transferable; this.kidx = 0; - let signers = this.creator.create( + const signers = this.creator.create( this.icodes, this.count, this.code, @@ -284,9 +284,9 @@ export class SaltyKeeper { this.kidx, false ); - let verfers = signers.signers.map((signer) => signer.verfer.qb64); + const verfers = signers.signers.map((signer) => signer.verfer.qb64); - let nsigners = this.creator.create( + const nsigners = this.creator.create( this.ncodes, this.ncount, this.ncode, @@ -296,7 +296,7 @@ export class SaltyKeeper { this.icodes?.length, false ); - let digers = nsigners.signers.map( + const digers = nsigners.signers.map( (nsigner) => new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 ); @@ -317,7 +317,7 @@ export class SaltyKeeper { this.ncodes = ncodes; this.transferable = transferable; - let signers = this.creator.create( + const signers = this.creator.create( this.ncodes, this.ncount, this.ncode, @@ -327,10 +327,10 @@ export class SaltyKeeper { this.kidx + this.icodes!.length, false ); - let verfers = signers.signers.map((signer) => signer.verfer.qb64); + const verfers = signers.signers.map((signer) => signer.verfer.qb64); this.kidx = this.kidx! + this.icodes!.length; - let nsigners = this.creator.create( + const nsigners = this.creator.create( this.ncodes, this.ncount, this.ncode, @@ -340,7 +340,7 @@ export class SaltyKeeper { this.kidx + this.icodes!.length, false ); - let digers = nsigners.signers.map( + const digers = nsigners.signers.map( (nsigner) => new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 ); @@ -354,7 +354,7 @@ export class SaltyKeeper { indices: number[] | undefined = undefined, ondices: number[] | undefined = undefined ) { - let signers = this.creator.create( + const signers = this.creator.create( this.icodes, this.ncount, this.ncode, @@ -366,7 +366,7 @@ export class SaltyKeeper { ); if (indexed) { - let sigers = []; + const sigers = []; let i = 0; for (const [j, signer] of signers.signers.entries()) { if (indices != undefined) { @@ -401,7 +401,7 @@ export class SaltyKeeper { } return sigers.map((siger) => siger.qb64); } else { - let cigars = []; + const cigars = []; for (const [_, signer] of signers.signers.entries()) { cigars.push(signer.sign(ser)); } @@ -455,7 +455,7 @@ export class RandyKeeper { this.count = count; this.ncount = ncount; - let signer = this.salter.signer(undefined, (transferable = false)); + const signer = this.salter.signer(undefined, (transferable = false)); this.aeid = signer.verfer.qb64; this.encrypter = new Encrypter({}, b(this.aeid)); @@ -491,7 +491,7 @@ export class RandyKeeper { incept(transferable: boolean) { this.transferable = transferable; - let signers = this.creator.create( + const signers = this.creator.create( this.icodes, this.count, this.code, @@ -501,9 +501,9 @@ export class RandyKeeper { (signer) => this.encrypter.encrypt(undefined, signer).qb64 ); - let verfers = signers.signers.map((signer) => signer.verfer.qb64); + const verfers = signers.signers.map((signer) => signer.verfer.qb64); - let nsigners = this.creator.create( + const nsigners = this.creator.create( this.ncodes, this.ncount, this.ncode, @@ -514,7 +514,7 @@ export class RandyKeeper { (signer) => this.encrypter.encrypt(undefined, signer).qb64 ); - let digers = nsigners.signers.map( + const digers = nsigners.signers.map( (nsigner) => new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 ); @@ -527,15 +527,15 @@ export class RandyKeeper { this.transferable = transferable; this.prxs = this.nxts; - let signers = this.nxts!.map((nxt) => + const signers = this.nxts!.map((nxt) => this.decrypter.decrypt( undefined, new Cipher({ qb64: nxt }), this.transferable ) ); - let verfers = signers.map((signer) => signer.verfer.qb64); - let nsigners = this.creator.create( + const verfers = signers.map((signer) => signer.verfer.qb64); + const nsigners = this.creator.create( this.ncodes, this.ncount, this.ncode, @@ -546,7 +546,7 @@ export class RandyKeeper { (signer) => this.encrypter.encrypt(undefined, signer).qb64 ); - let digers = nsigners.signers.map( + const digers = nsigners.signers.map( (nsigner) => new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64 ); @@ -560,7 +560,7 @@ export class RandyKeeper { indices: number[] | undefined = undefined, ondices: number[] | undefined = undefined ) { - let signers = this.prxs!.map((prx) => + const signers = this.prxs!.map((prx) => this.decrypter.decrypt( new Cipher({ qb64: prx }).qb64b, undefined, @@ -569,7 +569,7 @@ export class RandyKeeper { ); if (indexed) { - let sigers = []; + const sigers = []; let i = 0; for (const [j, signer] of signers.entries()) { if (indices != undefined) { @@ -604,7 +604,7 @@ export class RandyKeeper { } return sigers.map((siger) => siger.qb64); } else { - let cigars = []; + const cigars = []; for (const [_, signer] of signers.entries()) { cigars.push(signer.sign(ser)); } @@ -664,12 +664,12 @@ export class GroupKeeper { _indices: number[] | undefined = undefined, _ondices: number[] | undefined = undefined ): Promise { - let key = this.mhab['state']['k'][0]; - let ndig = this.mhab['state']['n'][0]; + const key = this.mhab['state']['k'][0]; + const ndig = this.mhab['state']['n'][0]; - let csi = this.gkeys!.indexOf(key); - let pni = this.gdigs!.indexOf(ndig); - let mkeeper = this.manager.get(this.mhab); + const csi = this.gkeys!.indexOf(key); + const pni = this.gdigs!.indexOf(ndig); + const mkeeper = this.manager.get(this.mhab); return await mkeeper.sign(ser, indexed, [csi], [pni]); } diff --git a/src/keri/core/manager.ts b/src/keri/core/manager.ts index 3a6043fa..8742043f 100644 --- a/src/keri/core/manager.ts +++ b/src/keri/core/manager.ts @@ -96,7 +96,7 @@ export class RandyCreator implements Creator { code: string = MtrDex.Ed25519_Seed, transferable: boolean = true ): Keys { - let signers = new Array(); + const signers = new Array(); if (codes == undefined) { codes = new Array(count).fill(code); } @@ -157,8 +157,8 @@ export class SaltyCreator implements Creator { kidx: number = 0, temp: boolean = false ): Keys { - let signers = new Array(); - let paths = new Array(); + const signers = new Array(); + const paths = new Array(); if (codes == undefined) { codes = new Array(count).fill(code); @@ -167,7 +167,7 @@ export class SaltyCreator implements Creator { codes.forEach((code, idx) => { // Previuos definition of path // let path = this.stem + pidx.toString(16) + ridx.toString(16) + (kidx+idx).toString(16) - let path = + const path = this.stem == '' ? pidx.toString(16) : this.stem + ridx.toString(16) + (kidx + idx).toString(16); @@ -215,14 +215,14 @@ export function openManager(passcode: string, salt?: string) { throw new Error('Bran (passcode seed material) too short.'); } - let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21); // qb64 salt for seed - let signer = new Salter({ qb64: bran }).signer(MtrDex.Ed25519_Seed, false); - let seed = signer.qb64; - let aeid = signer.verfer.qb64; // lest it remove encryption + const bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21); // qb64 salt for seed + const signer = new Salter({ qb64: bran }).signer(MtrDex.Ed25519_Seed, false); + const seed = signer.qb64; + const aeid = signer.verfer.qb64; // lest it remove encryption let algo; - let salter = salt != undefined ? new Salter({ qb64: salt }) : undefined; + const salter = salt != undefined ? new Salter({ qb64: salt }) : undefined; if (salt != undefined) { algo = Algos.salty; } else { @@ -296,7 +296,7 @@ export class Manager { pidx = pidx == undefined ? 0 : pidx; algo = algo == undefined ? Algos.salty : algo; - let salt = salter?.qb64; + const salt = salter?.qb64; tier = tier == undefined ? Tier.low : tier; @@ -342,7 +342,7 @@ export class Manager { } get pidx(): number | undefined { - let pidx = this.ks.getGbls('pidx'); + const pidx = this.ks.getGbls('pidx'); if (pidx != undefined) { return parseInt(pidx, 16); } @@ -357,7 +357,7 @@ export class Manager { if (this._decrypter == undefined) { return this._salt; } else { - let salt = this.ks.getGbls('salt'); + const salt = this.ks.getGbls('salt'); return this._decrypter.decrypt(b(salt)).qb64; } } @@ -380,8 +380,8 @@ export class Manager { } get algo(): Algos | undefined { - let a = this.ks.getGbls('algo'); - let ta = a as keyof typeof Algos; + const a = this.ks.getGbls('algo'); + const ta = a as keyof typeof Algos; return Algos[ta]; } @@ -391,7 +391,7 @@ export class Manager { private updateAeid(aeid: string | undefined, seed?: string) { if (this.aeid != undefined) { - let seed = b(this._seed); + const seed = b(this._seed); if (this._seed == undefined || !this._encrypter?.verifySeed(seed)) { throw new Error(`Last seed missing or provided last seed " "not associated with last aeid=${this.aeid}.`); @@ -415,7 +415,7 @@ export class Manager { this._encrypter = undefined; } - let salt = this.salt; + const salt = this.salt; if (salt != undefined) { this.salt = salt; } @@ -423,7 +423,7 @@ export class Manager { if (this._decrypter != undefined) { for (const [keys, data] of this.ks.prmsElements()) { if (data.salt != undefined) { - let salter = this._decrypter.decrypt(b(data.salt)); + const salter = this._decrypter.decrypt(b(data.salt)); data.salt = this._encrypter == undefined ? salter.qb64 @@ -473,11 +473,11 @@ export class Manager { tier = this.tier; } - let pidx = this.pidx!; - let ridx = 0; - let kidx = 0; + const pidx = this.pidx!; + const ridx = 0; + const kidx = 0; - let creator = new Creatory(algo).make(salt, tier, stem); + const creator = new Creatory(algo).make(salt, tier, stem); if (icodes == undefined) { if (icount < 0) { @@ -487,7 +487,7 @@ export class Manager { icodes = new Array(icount).fill(icode); } - let ikeys = creator.create( + const ikeys = creator.create( icodes, 0, MtrDex.Ed25519_Seed, @@ -497,7 +497,7 @@ export class Manager { kidx, temp ); - let verfers = Array.from( + const verfers = Array.from( ikeys.signers, (signer: Signer) => signer.verfer ); @@ -510,7 +510,7 @@ export class Manager { ncodes = new Array(ncount).fill(ncode); } - let nkeys = creator.create( + const nkeys = creator.create( ncodes, 0, MtrDex.Ed25519_Seed, @@ -521,12 +521,12 @@ export class Manager { temp ); - let digers = Array.from( + const digers = Array.from( nkeys.signers, (signer: Signer) => new Diger({ code: dcode }, signer.verfer.qb64b) ); - let pp = new PrePrm(); + const pp = new PrePrm(); pp.pidx = pidx!; pp.algo = algo!; pp.salt = @@ -536,14 +536,14 @@ export class Manager { pp.stem = creator.stem; pp.tier = creator.tier; - let dt = new Date().toString(); - let nw = new PubLot(); + const dt = new Date().toString(); + const nw = new PubLot(); nw.pubs = Array.from(verfers, (verfer: Verfer) => verfer.qb64); nw.ridx = ridx; nw.kidx = kidx; nw.dt = dt; - let nt = new PubLot(); + const nt = new PubLot(); nt.pubs = Array.from( nkeys.signers, (signer: Signer) => signer.verfer.qb64 @@ -552,11 +552,11 @@ export class Manager { nt.kidx = kidx + icodes.length; nt.dt = dt; - let ps = new PreSit(); + const ps = new PreSit(); ps.new = nw; ps.nxt = nt; - let pre = verfers[0].qb64; + const pre = verfers[0].qb64; if (!this.ks.putPres(pre, verfers[0].qb64b)) { throw new Error(`Already incepted pre=${pre}.`); } @@ -586,8 +586,8 @@ export class Manager { nkeys.paths != undefined ) { ikeys.paths.forEach((path: string, idx: number) => { - let signer = ikeys.signers[idx]; - let ppt = new PubPath(); + const signer = ikeys.signers[idx]; + const ppt = new PubPath(); ppt.path = path; ppt.code = icodes[idx]; ppt.tier = pp.tier; @@ -595,8 +595,8 @@ export class Manager { this.ks.putPths(signer.verfer.qb64, ppt); }); nkeys.paths.forEach((path: string, idx: number) => { - let signer = nkeys.signers[idx]; - let ppt = new PubPath(); + const signer = nkeys.signers[idx]; + const ppt = new PubPath(); ppt.path = path; ppt.code = ncodes[idx]; ppt.tier = pp.tier; @@ -609,11 +609,11 @@ export class Manager { ); } - let pubSet = new PubSet(); + const pubSet = new PubSet(); pubSet.pubs = ps.new.pubs; this.ks.putPubs(riKey(pre, ridx), pubSet); - let nxtPubSet = new PubSet(); + const nxtPubSet = new PubSet(); nxtPubSet.pubs = ps.nxt.pubs; this.ks.putPubs(riKey(pre, ridx + 1), nxtPubSet); @@ -633,7 +633,7 @@ export class Manager { throw new Error(`Preexistent new pre=${gnu} may not clobber.`); } - let oldprm = this.ks.getPrms(old); + const oldprm = this.ks.getPrms(old); if (oldprm == undefined) { throw new Error( `Nonexistent old prm for pre=${old}, nothing to move.` @@ -646,7 +646,7 @@ export class Manager { ); } - let oldsit = this.ks.getSits(old); + const oldsit = this.ks.getSits(old); if (oldsit == undefined) { throw new Error( `Nonexistent old sit for pre=${old}, nothing to move.` @@ -677,7 +677,7 @@ export class Manager { let i = 0; while (true) { - let pl = this.ks.getPubs(riKey(old, i)); + const pl = this.ks.getPubs(riKey(old, i)); if (pl == undefined) { break; } @@ -711,12 +711,12 @@ export class Manager { temp = false, erase = true, }: RotateArgs): [Array, Array] { - let pp = this.ks.getPrms(pre); + const pp = this.ks.getPrms(pre); if (pp == undefined) { throw new Error(`Attempt to rotate nonexistent pre=${pre}.`); } - let ps = this.ks.getSits(pre); + const ps = this.ks.getSits(pre); if (ps == undefined) { throw new Error(`Attempt to rotate nonexistent pre=${pre}.`); } @@ -725,7 +725,7 @@ export class Manager { throw new Error(`Attempt to rotate nontransferable pre=${pre}.`); } - let old = ps.old; + const old = ps.old; ps.old = ps.new; ps.new = ps.nxt; @@ -735,10 +735,10 @@ export class Manager { ); } - let verfers = new Array(); + const verfers = new Array(); ps.new.pubs.forEach((pub) => { if (this.decrypter != undefined) { - let signer = this.ks.getPris(pub, this.decrypter); + const signer = this.ks.getPris(pub, this.decrypter); if (signer == undefined) { throw new Error(`Missing prikey in db for pubkey=${pub}`); } @@ -762,7 +762,7 @@ export class Manager { salt = this.salt!; } - let creator = new Creatory(pp.algo).make(salt, pp.tier, pp.stem); + const creator = new Creatory(pp.algo).make(salt, pp.tier, pp.stem); if (ncodes == undefined) { if (ncount < 0) { @@ -771,11 +771,11 @@ export class Manager { ncodes = new Array(ncount).fill(ncode); } - let pidx = pp.pidx; - let ridx = ps.new.ridx + 1; - let kidx = ps.nxt.kidx + ps.new.pubs.length; + const pidx = pp.pidx; + const ridx = ps.new.ridx + 1; + const kidx = ps.nxt.kidx + ps.new.pubs.length; - let keys = creator.create( + const keys = creator.create( ncodes, 0, '', @@ -785,12 +785,12 @@ export class Manager { kidx, temp ); - let digers = Array.from( + const digers = Array.from( keys.signers, (signer: Signer) => new Diger({ code: dcode }, signer.verfer.qb64b) ); - let dt = new Date().toString(); + const dt = new Date().toString(); ps.nxt = new PubLot(); ps.nxt.pubs = Array.from( keys.signers, @@ -811,8 +811,8 @@ export class Manager { }); } else if (this._encrypter == undefined && keys.paths != undefined) { keys.paths.forEach((path: string, idx: number) => { - let signer = keys.signers[idx]; - let ppt = new PubPath(); + const signer = keys.signers[idx]; + const ppt = new PubPath(); ppt.path = path; ppt.tier = pp!.tier; ppt.temp = temp; @@ -824,7 +824,7 @@ export class Manager { ); } - let newPs = new PubSet(); + const newPs = new PubSet(); newPs.pubs = ps.nxt.pubs; this.ks.putPubs(riKey(pre, ps.nxt.ridx), newPs); @@ -845,7 +845,7 @@ export class Manager { indices = undefined, ondices = undefined, }: SignArgs) { - let signers = new Array(); + const signers = new Array(); if (pubs == undefined && verfers == undefined) { throw new Error('pubs or verfers required'); @@ -861,7 +861,7 @@ export class Manager { pubs.forEach((pub) => { //If no decrypter then get SaltyState and regenerate prikey if (this.decrypter != undefined) { - let signer = this.ks.getPris(pub, this.decrypter); + const signer = this.ks.getPris(pub, this.decrypter); if (signer == undefined) { throw new Error( `Missing prikey in db for pubkey=${pub}` @@ -869,14 +869,14 @@ export class Manager { } signers.push(signer); } else { - let verfer = new Verfer({ qb64: pub }); - let ppt = this.ks.getPths(pub); + const verfer = new Verfer({ qb64: pub }); + const ppt = this.ks.getPths(pub); if (ppt == undefined) { throw new Error( `Missing prikey in db for pubkey=${pub}` ); } - let salter = new Salter({ qb64: this.salt }); + const salter = new Salter({ qb64: this.salt }); signers.push( salter.signer( ppt.code, @@ -891,7 +891,7 @@ export class Manager { } else { verfers!.forEach((verfer: Verfer) => { if (this.decrypter != undefined) { - let signer = this.ks.getPris(verfer.qb64, this.decrypter); + const signer = this.ks.getPris(verfer.qb64, this.decrypter); if (signer == undefined) { throw new Error( `Missing prikey in db for pubkey=${verfer.qb64}` @@ -899,13 +899,13 @@ export class Manager { } signers.push(signer); } else { - let ppt = this.ks.getPths(verfer.qb64); + const ppt = this.ks.getPths(verfer.qb64); if (ppt == undefined) { throw new Error( `Missing prikey in db for pubkey=${verfer.qb64}` ); } - let salter = new Salter({ qb64: this.salt }); + const salter = new Salter({ qb64: this.salt }); signers.push( salter.signer( ppt.code, @@ -932,7 +932,7 @@ export class Manager { } if (indexed) { - let sigers = new Array(); + const sigers = new Array(); signers.forEach((signer, idx) => { let i; if (indices != undefined) { @@ -958,12 +958,12 @@ export class Manager { o = i; } - let only = o == undefined; + const only = o == undefined; sigers.push(signer.sign(ser, i, only, o) as Siger); }); return sigers; } else { - let cigars = new Array(); + const cigars = new Array(); signers.forEach((signer: Signer) => { cigars.push(signer.sign(ser) as Cigar); }); @@ -1042,7 +1042,7 @@ class Keeper implements KeyStore { } prmsElements(): Array<[string, PrePrm]> { - let out = new Array<[string, PrePrm]>(); + const out = new Array<[string, PrePrm]>(); this._prms.forEach((value, key) => { out.push([key, value]); }); @@ -1071,17 +1071,17 @@ class Keeper implements KeyStore { } prisElements(decrypter: Decrypter): Array<[string, Signer]> { - let out = new Array<[string, Signer]>(); + const out = new Array<[string, Signer]>(); this._pris.forEach(function (val, pubKey) { - let verfer = new Verfer({ qb64: pubKey }); - let signer = decrypter.decrypt(val, null, verfer.transferable); + const verfer = new Verfer({ qb64: pubKey }); + const signer = decrypter.decrypt(val, null, verfer.transferable); out.push([pubKey, signer]); }); return out; } pinPris(pubKey: string, signer: Signer, encrypter: Encrypter): void { - let cipher = encrypter.encrypt(null, signer); + const cipher = encrypter.encrypt(null, signer); this._pris.set(pubKey, cipher.qb64b); } @@ -1089,17 +1089,17 @@ class Keeper implements KeyStore { if (this._pris.has(pubKey)) { return false; } - let cipher = encrypter.encrypt(null, signer); + const cipher = encrypter.encrypt(null, signer); this._pris.set(pubKey, cipher.qb64b); return true; } getPris(pubKey: string, decrypter: Decrypter): Signer | undefined { - let val = this._pris.get(pubKey); + const val = this._pris.get(pubKey); if (val == undefined) { return undefined; } - let verfer = new Verfer({ qb64: pubKey }); + const verfer = new Verfer({ qb64: pubKey }); return decrypter.decrypt(val, null, verfer.transferable); } diff --git a/src/keri/core/matter.ts b/src/keri/core/matter.ts index e7e3afe4..03e51b27 100644 --- a/src/keri/core/matter.ts +++ b/src/keri/core/matter.ts @@ -7,7 +7,7 @@ import { Buffer } from 'buffer'; export class Codex { has(prop: string): boolean { - let m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + const m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); return m.has(prop); } } @@ -276,16 +276,16 @@ export class Matter { rize = raw.length; } - let ls = (3 - (rize % 3)) % 3; // calc actual lead (pad) size + const ls = (3 - (rize % 3)) % 3; // calc actual lead (pad) size size = Math.floor((rize + ls) / 3); // calculate value of size in triplets if (SmallVrzDex.has(code[0])) { if (size <= 64 ** 2 - 1) { - let hs = 2; - let s = Object.values(SmallVrzDex)[ls]; + const hs = 2; + const s = Object.values(SmallVrzDex)[ls]; code = `${s}${code.substring(1, hs)}`; } else if (size <= 64 ** 4 - 1) { - let hs = 4; - let s = Object.values(LargeVrzDex)[ls]; + const hs = 4; + const s = Object.values(LargeVrzDex)[ls]; code = `${s}${'AAAA'.substring(0, hs - 2)}${code[1]}`; } else { throw new Error( @@ -294,8 +294,8 @@ export class Matter { } } else { if (size <= 64 ** 4 - 1) { - let hs = 4; - let s = Object.values(LargeVrzDex)[ls]; + const hs = 4; + const s = Object.values(LargeVrzDex)[ls]; code = `${s}${code.substring(1, hs)}`; } else { throw new Error( @@ -304,7 +304,7 @@ export class Matter { } } } else { - let sizage = Matter.Sizes.get(code); + const sizage = Matter.Sizes.get(code); if (sizage!.fs == -1) { // invalid throw new Error(`Unsupported variable size code=${code}`); @@ -326,7 +326,7 @@ export class Matter { } else if (qb64 !== undefined) { this._exfil(qb64); } else if (qb64b !== undefined) { - let qb64 = d(qb64b); + const qb64 = d(qb64b); this._exfil(qb64); } else if (qb2 !== undefined) { this._bexfil(qb2); @@ -364,8 +364,8 @@ export class Matter { } static _rawSize(code: string) { - let sizage = this.Sizes.get(code); // get sizes - let cs = sizage!.hs + sizage!.ss; // both hard + soft code size + const sizage = this.Sizes.get(code); // get sizes + const cs = sizage!.hs + sizage!.ss; // both hard + soft code size if (sizage!.fs === -1) { throw Error(`Non-fixed raw size code ${code}.`); } @@ -374,26 +374,26 @@ export class Matter { } static _leadSize(code: string) { - let sizage = this.Sizes.get(code); + const sizage = this.Sizes.get(code); return sizage!.ls; } get both() { - let sizage = Matter.Sizes.get(this.code); + const sizage = Matter.Sizes.get(this.code); return `${this.code}${intToB64(this.size, sizage!.ss)}`; } private _infil() { - let code = this.code; - let size = this.size; - let raw = this.raw; + const code = this.code; + const size = this.size; + const raw = this.raw; - let ps = (3 - (raw.length % 3)) % 3; // pad size chars or lead size bytes - let sizage = Matter.Sizes.get(code); + const ps = (3 - (raw.length % 3)) % 3; // pad size chars or lead size bytes + const sizage = Matter.Sizes.get(code); if (sizage!.fs === undefined) { // Variable size code, NOT SUPPORTED - let cs = sizage!.hs + sizage!.ss; + const cs = sizage!.hs + sizage!.ss; if (cs % 4) { throw new Error( `Whole code size not multiple of 4 for variable length material. cs=${cs}` @@ -403,26 +403,26 @@ export class Matter { throw new Error(`Invalid size=${size} for code=${code}.`); } - let both = `${code}${intToB64(size, sizage!.ss)}`; + const both = `${code}${intToB64(size, sizage!.ss)}`; if (both.length % 4 !== ps - sizage!.ls!) { throw new Error( `Invalid code=${both} for converted raw pad size=${ps}.` ); } - let bytes = new Uint8Array(sizage!.ls! + raw.length); + const bytes = new Uint8Array(sizage!.ls! + raw.length); for (let i = 0; i < sizage!.ls!; i++) { bytes[i] = 0; } for (let i = 0; i < raw.length; i++) { - let odx = i + ps; + const odx = i + ps; bytes[odx] = raw[i]; } return both + Base64.encode(Buffer.from(bytes)); } else { - let both = code; - let cs = both.length; + const both = code; + const cs = both.length; if (cs % 4 != ps - sizage!.ls!) { // adjusted pad given lead bytes throw new Error( @@ -432,12 +432,12 @@ export class Matter { // prepad, convert, and replace upfront // when fixed and ls != 0 then cs % 4 is zero and ps==ls // otherwise fixed and ls == 0 then cs % 4 == ps - let bytes = new Uint8Array(ps + raw.length); + const bytes = new Uint8Array(ps + raw.length); for (let i = 0; i < ps; i++) { bytes[i] = 0; } for (let i = 0; i < raw.length; i++) { - let odx = i + ps; + const odx = i + ps; bytes[odx] = raw[i]; } @@ -450,23 +450,23 @@ export class Matter { throw new Error('Empty Material'); } - let first = qb64[0]; + const first = qb64[0]; if (!Array.from(Matter.Hards.keys()).includes(first)) { throw new Error(`Unexpected code ${first}`); } - let hs = Matter.Hards.get(first); + const hs = Matter.Hards.get(first); if (qb64.length < hs!) { throw new Error(`Shortage Error`); } - let hard = qb64.slice(0, hs); + const hard = qb64.slice(0, hs); if (!Array.from(Matter.Sizes.keys()).includes(hard)) { throw new Error(`Unsupported code ${hard}`); } - let sizage = Matter.Sizes.get(hard); - let cs = sizage!.hs + sizage!.ss; + const sizage = Matter.Sizes.get(hard); + const cs = sizage!.hs + sizage!.ss; let size = -1; if (sizage!.fs == -1) { // Variable size code, Not supported @@ -480,13 +480,13 @@ export class Matter { } qb64 = qb64.slice(0, sizage!.fs); - let ps = cs % 4; - let pbs = 2 * (ps == 0 ? sizage!.ls! : ps); + const ps = cs % 4; + const pbs = 2 * (ps == 0 ? sizage!.ls! : ps); let raw; if (ps != 0) { - let base = new Array(ps + 1).join('A') + qb64.slice(cs); - let paw = Base64.decode(base); // decode base to leave prepadded raw - let pi = readInt(paw.subarray(0, ps)); // prepad as int + const base = new Array(ps + 1).join('A') + qb64.slice(cs); + const paw = Base64.decode(base); // decode base to leave prepadded raw + const pi = readInt(paw.subarray(0, ps)); // prepad as int if (pi & (2 ** pbs - 1)) { // masked pad bits non-zero throw new Error( @@ -495,9 +495,9 @@ export class Matter { } raw = paw.subarray(ps); // strip off ps prepad paw bytes } else { - let base = qb64.slice(cs); - let paw = Base64.decode(base); - let li = readInt(paw.subarray(0, sizage!.ls)); + const base = qb64.slice(cs); + const paw = Base64.decode(base); + const li = readInt(paw.subarray(0, sizage!.ls)); if (li != 0) { if (li == 1) { throw new Error(`Non zeroed lead byte = 0x{li:02x}.`); diff --git a/src/keri/core/pather.ts b/src/keri/core/pather.ts index 137a6d38..edc2bf17 100644 --- a/src/keri/core/pather.ts +++ b/src/keri/core/pather.ts @@ -68,7 +68,7 @@ export class Pather extends Bexter { path = path.substring(1); } - let apath = path.split('-'); + const apath = path.split('-'); if (apath[0] !== '') { return apath; } else { @@ -77,7 +77,7 @@ export class Pather extends Bexter { } static _bextify(path: any[]): string { - let vath = []; + const vath = []; for (const p of path) { let sp = ''; if (typeof p === 'number') { @@ -86,7 +86,7 @@ export class Pather extends Bexter { sp = p; } - let match = Reb64.exec(sp); + const match = Reb64.exec(sp); if (!match) { throw new Error(`"Non Base64 path component = ${p}.`); } diff --git a/src/keri/core/prefixer.ts b/src/keri/core/prefixer.ts index 97ddf5d6..53b7fe55 100644 --- a/src/keri/core/prefixer.ts +++ b/src/keri/core/prefixer.ts @@ -76,7 +76,7 @@ export class Prefixer extends Matter { static _derive_ed25519N(ked: Dict): [Uint8Array, string] { let verfer; - let keys = ked['k']; + const keys = ked['k']; if (keys.length != 1) { throw new Error( `Basic derivation needs at most 1 key got ${keys.length} keys instead` @@ -92,21 +92,21 @@ export class Prefixer extends Matter { throw new Error(`Mismatch derivation code = ${verfer.code}`); } - let next = 'n' in ked ? ked['n'] : []; + const next = 'n' in ked ? ked['n'] : []; if (verfer.code == MtrDex.Ed25519N && next.length > 0) { throw new Error( `Non-empty nxt = ${next} for non-transferable code = ${verfer.code}` ); } - let backers = 'b' in ked ? ked['b'] : []; + const backers = 'b' in ked ? ked['b'] : []; if (verfer.code == MtrDex.Ed25519N && backers.length > 0) { throw new Error( `Non-empty b =${backers} for non-transferable code = ${verfer.code}` ); } - let anchor = 'a' in ked ? ked['a'] : []; + const anchor = 'a' in ked ? ked['a'] : []; if (verfer.code == MtrDex.Ed25519N && anchor.length > 0) { throw new Error( `Non-empty a = ${verfer.code} for non-transferable code = ${verfer.code}` @@ -118,7 +118,7 @@ export class Prefixer extends Matter { static _derive_ed25519(ked: Dict): [Uint8Array, string] { let verfer; - let keys = ked['k']; + const keys = ked['k']; if (keys.length != 1) { throw new Error( `Basic derivation needs at most 1 key got ${keys.length} keys instead` @@ -139,15 +139,15 @@ export class Prefixer extends Matter { } static _derive_blake3_256(ked: Dict): [Uint8Array, string] { - let kd = ked; - let ilk = ked['t']; + const kd = ked; + const ilk = ked['t']; if (![Ilks.icp, Ilks.dip, Ilks.vcp, Ilks.dip].includes(ilk)) { throw new Error(`Invalid ilk = ${ilk} to derive pre.`); } kd['i'] = ''.padStart(Matter.Sizes.get(MtrDex.Blake3_256)!.fs!, Dummy); kd['d'] = ked['i']; - let [raw] = sizeify(ked); + const [raw] = sizeify(ked); const hasher = createHash(); const dig = hasher.update(raw).digest(''); return [dig, MtrDex.Blake3_256]; @@ -159,7 +159,7 @@ export class Prefixer extends Matter { prefixed: boolean = false ): boolean { try { - let keys = ked['k']; + const keys = ked['k']; if (keys.length != 1) { return false; } @@ -172,7 +172,7 @@ export class Prefixer extends Matter { return false; } - let next = 'n' in ked ? ked['n'] : []; + const next = 'n' in ked ? ked['n'] : []; if (next.length > 0) { // must be empty return false; @@ -190,7 +190,7 @@ export class Prefixer extends Matter { prefixed: boolean = false ): boolean { try { - let keys = ked['k']; + const keys = ked['k']; if (keys.length != 1) { return false; } @@ -215,8 +215,8 @@ export class Prefixer extends Matter { prefixed: boolean = false ): boolean { try { - let [raw] = Prefixer._derive_blake3_256(ked); - let crymat = new Matter({ raw: raw, code: MtrDex.Blake3_256 }); + const [raw] = Prefixer._derive_blake3_256(ked); + const crymat = new Matter({ raw: raw, code: MtrDex.Blake3_256 }); if (crymat.qb64 != pre) { return false; } diff --git a/src/keri/core/saider.ts b/src/keri/core/saider.ts index 295db7ab..af9ee7fc 100644 --- a/src/keri/core/saider.ts +++ b/src/keri/core/saider.ts @@ -94,12 +94,12 @@ export class Saider extends Matter { [, , kind, sad] = sizeify(sad, kind); } - let ser = { ...sad }; + const ser = { ...sad }; - let digestage = Saider.Digests.get(code); + const digestage = Saider.Digests.get(code); - let cpa = Saider._serialze(ser, kind); - let args: any[] = []; + const cpa = Saider._serialze(ser, kind); + const args: any[] = []; if (digestage!.size != undefined) { args.push(digestage!.size); } @@ -129,8 +129,8 @@ export class Saider extends Matter { label: string = Ids.d ): boolean { try { - let [raw, dsad] = Saider._derive(sad, this.code, kind, label); - let saider = new Saider({ raw: raw, code: this.code }); + const [raw, dsad] = Saider._derive(sad, this.code, kind, label); + const saider = new Saider({ raw: raw, code: this.code }); if (this.qb64 != saider.qb64) { return false; } @@ -175,7 +175,7 @@ export class Saider extends Matter { } let raw; [raw, sad] = Saider._derive(sad, code, kind, label); - let saider = new Saider( + const saider = new Saider( { raw: raw, code: code }, undefined, kind, diff --git a/src/keri/core/salter.ts b/src/keri/core/salter.ts index 654c4c13..0f821d9b 100644 --- a/src/keri/core/salter.ts +++ b/src/keri/core/salter.ts @@ -34,7 +34,7 @@ export class Salter extends Matter { } catch (e) { if (e instanceof EmptyMaterialError) { if (code == MtrDex.Salt_128) { - let salt = libsodium.randombytes_buf( + const salt = libsodium.randombytes_buf( libsodium.crypto_pwhash_SALTBYTES ); super({ raw: salt, code: code }); @@ -105,7 +105,7 @@ export class Salter extends Matter { tier: Tier | null = null, temp: boolean = false ): Signer { - let seed = this.stretch(Matter._rawSize(code), path, tier, temp); + const seed = this.stretch(Matter._rawSize(code), path, tier, temp); return new Signer({ raw: seed, diff --git a/src/keri/core/serder.ts b/src/keri/core/serder.ts index 2a346fa1..d2cd3dfd 100644 --- a/src/keri/core/serder.ts +++ b/src/keri/core/serder.ts @@ -32,8 +32,8 @@ export class Serder { } set ked(ked: Dict) { - let [raw, ident, kind, kd, version] = this._exhale(ked, this._kind); - let size = raw.length; + const [raw, ident, kind, kd, version] = this._exhale(ked, this._kind); + const size = raw.length; this._raw = raw; this._ident = ident; this._ked = kd; @@ -98,8 +98,8 @@ export class Serder { keys = []; } // create a new Verfer for each key - let verfers = []; - for (let key of keys) { + const verfers = []; + for (const key of keys) { verfers.push(new Verfer({ qb64: key })); } return verfers; @@ -115,8 +115,8 @@ export class Serder { keys = []; } // create a new Verfer for each key - let digers = []; - for (let key of keys) { + const digers = []; + for (const key of keys) { digers.push(new Diger({ qb64: key })); } return digers; @@ -143,7 +143,7 @@ export function sizeify( throw new Error('Missing or empty version string'); } - let [ident, knd, version] = deversify(ked['v'] as string); + const [ident, knd, version] = deversify(ked['v'] as string); if (version != Versionage) { throw new Error(`unsupported version ${version.toString()}`); } @@ -153,7 +153,7 @@ export function sizeify( } let raw = dumps(ked, kind); - let size = raw.length; + const size = raw.length; ked['v'] = versify(ident, version, kind, size); diff --git a/src/keri/core/signer.ts b/src/keri/core/signer.ts index 0736bd81..0c99fc24 100644 --- a/src/keri/core/signer.ts +++ b/src/keri/core/signer.ts @@ -44,7 +44,7 @@ export class Signer extends Matter { } catch (e) { if (e instanceof EmptyMaterialError) { if (code == MtrDex.Ed25519_Seed) { - let raw = libsodium.randombytes_buf( + const raw = libsodium.randombytes_buf( libsodium.crypto_sign_SEEDBYTES ); super({ raw, code, qb64, qb64b, qb2 }); @@ -96,7 +96,7 @@ export class Signer extends Matter { only: boolean = false, ondex: number | undefined ) { - let sig = libsodium.crypto_sign_detached( + const sig = libsodium.crypto_sign_detached( ser, Buffer.concat([seed, verfer.raw]) ); diff --git a/src/keri/core/tholder.ts b/src/keri/core/tholder.ts index 55535c3c..b6d18c0d 100644 --- a/src/keri/core/tholder.ts +++ b/src/keri/core/tholder.ts @@ -78,9 +78,9 @@ export class Tholder { } private _processLimen(limen: string) { - let matter = new Matter({ qb64: limen }); + const matter = new Matter({ qb64: limen }); if (NumDex.has(matter.code)) { - let number = new CesrNumber({ raw: matter.raw, code: matter.code }); + const number = new CesrNumber({ raw: matter.raw, code: matter.code }); this._processUnweighted(number.num); } else if (BexDex.has(matter.code)) { // TODO: Implement Bexter @@ -104,7 +104,7 @@ export class Tholder { throw new Error('Empty weight list'); } - let mask = _sith.map((x: any) => { + const mask = _sith.map((x: any) => { return typeof x !== 'string'; }); @@ -112,8 +112,8 @@ export class Tholder { _sith = [_sith]; } - for (let c of _sith) { - let mask = c.map((x: any) => { + for (const c of _sith) { + const mask = c.map((x: any) => { return typeof x === 'string'; }); if (mask.length > 0 && !mask.every((x: boolean) => x)) { @@ -125,13 +125,13 @@ export class Tholder { } } - let thold = this._processClauses(_sith); + const thold = this._processClauses(_sith); this._processWeighted(thold); } } private _processClauses(sith: Array>): Fraction[][] { - let thold = new Array>(); + const thold = new Array>(); sith.forEach((clause) => { thold.push( clause.map((w) => { @@ -155,7 +155,7 @@ export class Tholder { } private _processWeighted(thold: Array>) { - for (let clause of thold) { + for (const clause of thold) { if (Number(math.sum(clause)) < 1) { throw new Error( 'Invalid sith clause: ' + @@ -187,15 +187,15 @@ export class Tholder { return false; } - let indexes: Set = new Set(indices.sort()); - let sats = new Array(indices.length).fill(false); - for (let idx of indexes) { + const indexes: Set = new Set(indices.sort()); + const sats = new Array(indices.length).fill(false); + for (const idx of indexes) { sats[idx] = true; } let wio = 0; - for (let clause of this.thold) { + for (const clause of this.thold) { let cw = 0; - for (let w of clause) { + for (const w of clause) { if (sats[wio]) { cw += Number(w); } diff --git a/src/keri/core/utils.ts b/src/keri/core/utils.ts index 15e8f7c5..82b85d1c 100644 --- a/src/keri/core/utils.ts +++ b/src/keri/core/utils.ts @@ -18,7 +18,7 @@ export function pad(n: any, width = 3, z = 0) { */ export function extractValues(ked: any, labels: any) { let values = []; - for (let label of labels) { + for (const label of labels) { values = extractElementValues(ked[label], values); } @@ -46,7 +46,7 @@ function extractElementValues(element: any, values: any) { try { if (element instanceof Array && !(typeof element == 'string')) { - for (let k in element) extractElementValues(element[k], values); + for (const k in element) extractElementValues(element[k], values); } else if (typeof element == 'string') { values.push(element); } @@ -88,7 +88,7 @@ export function range(start: number, stop: number, step: number) { return []; } - let result = new Array(); + const result = new Array(); for (let i: number = start; step > 0 ? i < stop : i > stop; i += step) { result.push(i); } @@ -100,7 +100,7 @@ export function intToBytes(value: number, length: number): Uint8Array { const byteArray = new Uint8Array(length); // Assuming a 4-byte integer (32 bits) for (let index = byteArray.length - 1; index >= 0; index--) { - let byte = value & 0xff; + const byte = value & 0xff; byteArray[index] = byte; value = (value - byte) / 256; } @@ -116,15 +116,15 @@ export function bytesToInt(ar: Uint8Array): number { } export function serializeACDCAttachment(acdc: Serder): Uint8Array { - let prefixer = new Prefixer({ raw: b(acdc.raw) }); - let seqner = new Seqner({ sn: acdc.sn }); - let saider = new Saider({ qb64: acdc.ked['d'] }); - let craw = new Uint8Array(); - let ctr = new Counter({ code: CtrDex.SealSourceTriples, count: 1 }).qb64b; - let prefix = prefixer.qb64b; - let seq = seqner.qb64b; - let said = saider.qb64b; - let newCraw = new Uint8Array( + const prefixer = new Prefixer({ raw: b(acdc.raw) }); + const seqner = new Seqner({ sn: acdc.sn }); + const saider = new Saider({ qb64: acdc.ked['d'] }); + const craw = new Uint8Array(); + const ctr = new Counter({ code: CtrDex.SealSourceTriples, count: 1 }).qb64b; + const prefix = prefixer.qb64b; + const seq = seqner.qb64b; + const said = saider.qb64b; + const newCraw = new Uint8Array( craw.length + ctr.length + prefix.length + seq.length + said.length ); newCraw.set(craw); @@ -136,19 +136,19 @@ export function serializeACDCAttachment(acdc: Serder): Uint8Array { } export function serializeIssExnAttachment(iss: Serder): Uint8Array { - let seqner = new Seqner({ sn: iss.sn }); - let ancSaider = new Saider({ qb64: iss.ked['d'] }); - let coupleArray = new Uint8Array( + const seqner = new Seqner({ sn: iss.sn }); + const ancSaider = new Saider({ qb64: iss.ked['d'] }); + const coupleArray = new Uint8Array( seqner.qb64b.length + ancSaider.qb64b.length ); coupleArray.set(seqner.qb64b); coupleArray.set(ancSaider.qb64b, seqner.qb64b.length); - let counter = new Counter({ + const counter = new Counter({ code: CtrDex.SealSourceCouples, count: 1, }); - let counterQb64b = counter.qb64b; - let atc = new Uint8Array(counter.qb64b.length + coupleArray.length); + const counterQb64b = counter.qb64b; + const atc = new Uint8Array(counter.qb64b.length + coupleArray.length); atc.set(counterQb64b); atc.set(coupleArray, counterQb64b.length); @@ -157,11 +157,11 @@ export function serializeIssExnAttachment(iss: Serder): Uint8Array { `Invalid attachments size: ${atc.length}, non-integral quadlets detected.` ); } - let pcnt = new Counter({ + const pcnt = new Counter({ code: CtrDex.AttachedMaterialQuadlets, count: Math.floor(atc.length / 4), }); - let msg = new Uint8Array(pcnt.qb64b.length + atc.length); + const msg = new Uint8Array(pcnt.qb64b.length + atc.length); msg.set(pcnt.qb64b); msg.set(atc, pcnt.qb64b.length); diff --git a/src/keri/core/vdring.ts b/src/keri/core/vdring.ts index 5da1ddb3..df601a7a 100644 --- a/src/keri/core/vdring.ts +++ b/src/keri/core/vdring.ts @@ -36,8 +36,8 @@ namespace vdr { code = MtrDex.Blake3_256, }: VDRInceptArgs): Serder { const vs = versify(Ident.KERI, version, kind, 0); - let isn = 0; - let ilk = Ilks.vcp; + const isn = 0; + const ilk = Ilks.vcp; if (cnfg.includes(TraitDex.NoBackers) && baks.length > 0) { throw new Error( @@ -70,7 +70,7 @@ namespace vdr { } } - let ked = { + const ked = { v: vs, t: ilk, d: '', @@ -83,7 +83,7 @@ namespace vdr { n: nonce, }; - let prefixer = new Prefixer({ code }, ked); + const prefixer = new Prefixer({ code }, ked); ked.i = prefixer.qb64; ked.d = prefixer.qb64; diff --git a/src/keri/end/ending.ts b/src/keri/end/ending.ts index 5811ec46..bc8f75dd 100644 --- a/src/keri/end/ending.ts +++ b/src/keri/end/ending.ts @@ -29,15 +29,15 @@ export class Signage { } export function signature(signages: Array): Headers { - let values = new Array(); + const values = new Array(); - for (let signage of signages) { + for (const signage of signages) { let markers: Array; let indexed = signage.indexed; - let signer = signage.signer; - let ordinal = signage.ordinal; - let digest = signage.digest; - let kind = signage.kind; + const signer = signage.signer; + const ordinal = signage.ordinal; + const digest = signage.digest; + const kind = signage.kind; let tags: Array; if (signage.markers instanceof Map) { @@ -52,8 +52,8 @@ export function signature(signages: Array): Headers { indexed = markers[0] instanceof Siger; } - let items = new Array(); - let tag = 'indexed'; + const items = new Array(); + const tag = 'indexed'; let val = indexed ? '?1' : '?0'; items.push(`${tag}="${val}"`); @@ -102,13 +102,13 @@ export function signature(signages: Array): Headers { } export function designature(value: string) { - let values = value.replace(' ', '').split(','); + const values = value.replace(' ', '').split(','); - let signages = new Array(); + const signages = new Array(); values.forEach((val) => { - let dict = new Map(); + const dict = new Map(); val.split(';').forEach((v) => { - let splits = v.split('=', 2); + const splits = v.split('=', 2); dict.set(splits[0], splits[1].replaceAll('"', '')); }); @@ -117,8 +117,8 @@ export function designature(value: string) { 'Missing indexed field in Signature header signage.' ); } - let item = dict.get('indexed')!; - let indexed = !FALSY.includes(item); + const item = dict.get('indexed')!; + const indexed = !FALSY.includes(item); dict.delete('indexed'); let signer; diff --git a/test/app/aiding.test.ts b/test/app/aiding.test.ts index a2e138d0..3b601765 100644 --- a/test/app/aiding.test.ts +++ b/test/app/aiding.test.ts @@ -120,7 +120,7 @@ fetchMock.mockResponse((req) => { } else if (req.url == boot_url + '/boot') { return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers(); + const headers = new Headers(); let signed_headers = new Headers(); headers.set( @@ -134,21 +134,21 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); - let signer = salter.signer( + const salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + const signer = salter.signer( 'A', true, 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', Tier.low ); - let authn = new Authenticater(signer!, signer!.verfer); + const authn = new Authenticater(signer!, signer!.verfer); signed_headers = authn.sign( headers, req.method, requrl.pathname.split('?')[0] ); - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + const body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID; @@ -164,12 +164,12 @@ describe('Aiding', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let identifiers = client.identifiers(); + const identifiers = client.identifiers(); await identifiers.list(); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; @@ -293,7 +293,7 @@ describe('Aiding', () => { assert.deepEqual(lastBody.salty.dcode, 'E'); assert.deepEqual(lastBody.salty.transferable, true); - let data = [ + const data = [ { i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', s: 0, @@ -346,12 +346,12 @@ describe('Aiding', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let identifiers = client.identifiers(); + const identifiers = client.identifiers(); await identifiers.list(); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; @@ -363,7 +363,7 @@ describe('Aiding', () => { algo: Algos.randy, }); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - let lastBody = JSON.parse(lastCall[1]!.body!.toString()); + const lastBody = JSON.parse(lastCall[1]!.body!.toString()); assert.equal(lastCall[0]!, url + '/identifiers'); assert.equal(lastCall[1]!.method, 'POST'); assert.equal(lastBody.name, 'aid1'); diff --git a/test/app/clienting.test.ts b/test/app/clienting.test.ts index e748f174..1506b4c8 100644 --- a/test/app/clienting.test.ts +++ b/test/app/clienting.test.ts @@ -134,7 +134,7 @@ fetchMock.mockResponse((req) => { } else if (req.url == boot_url + '/boot') { return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers(); + const headers = new Headers(); let signed_headers = new Headers(); headers.set( @@ -148,21 +148,21 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); - let signer = salter.signer( + const salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + const signer = salter.signer( 'A', true, 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', Tier.low ); - let authn = new Authenticater(signer!, signer!.verfer); + const authn = new Authenticater(signer!, signer!.verfer); signed_headers = authn.sign( headers, req.method, requrl.pathname.split('?')[0] ); - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + const body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID; @@ -177,12 +177,12 @@ describe('SignifyClient', () => { it('SignifyClient initialization', async () => { await libsodium.ready; - let t = () => { + const t = () => { new SignifyClient(url, 'short', Tier.low, boot_url); }; expect(t).toThrow('bran must be 21 characters'); - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); assert.equal(client.bran, '0123456789abcdefghijk'); assert.equal(client.url, url); assert.equal(client.bootUrl, boot_url); @@ -205,7 +205,7 @@ describe('SignifyClient', () => { ); assert.deepEqual(client.controller.serder.ked.s, '0'); - let res = await client.boot(); + const res = await client.boot(); assert.equal(fetchMock.mock.calls[0]![0]!, boot_url + '/boot'); assert.equal( fetchMock.mock.calls[0]![1]!.body!.toString(), @@ -247,7 +247,7 @@ describe('SignifyClient', () => { ); assert.equal(client.controller.serder.ked.a[0].s, '0'); - let data = client.data; + const data = client.data; assert(data[0], url); assert(data[0], bran); diff --git a/test/app/contacting.test.ts b/test/app/contacting.test.ts index 0a0c8409..7018720d 100644 --- a/test/app/contacting.test.ts +++ b/test/app/contacting.test.ts @@ -115,7 +115,7 @@ fetchMock.mockResponse((req) => { } else if (req.url == boot_url + '/boot') { return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers(); + const headers = new Headers(); let signed_headers = new Headers(); headers.set( @@ -129,21 +129,21 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); - let signer = salter.signer( + const salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + const signer = salter.signer( 'A', true, 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', Tier.low ); - let authn = new Authenticater(signer!, signer!.verfer); + const authn = new Authenticater(signer!, signer!.verfer); signed_headers = authn.sign( headers, req.method, requrl.pathname.split('?')[0] ); - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + const body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID; @@ -159,12 +159,12 @@ describe('Contacting', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let contacts = client.contacts(); + const contacts = client.contacts(); await contacts.list('mygroup', 'company', 'mycompany'); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; @@ -183,7 +183,7 @@ describe('Contacting', () => { ); assert.equal(lastCall[1]!.method, 'GET'); - let info = { + const info = { name: 'John Doe', company: 'My Company', }; @@ -227,12 +227,12 @@ describe('Contacting', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let challenges = client.challenges(); + const challenges = client.challenges(); await challenges.generate(128); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; diff --git a/test/app/controller.test.ts b/test/app/controller.test.ts index b83479d2..6550627d 100644 --- a/test/app/controller.test.ts +++ b/test/app/controller.test.ts @@ -10,15 +10,15 @@ describe('Controller', () => { it('manage account AID signing and agent verification', async () => { await libsodium.ready; let passcode = '0123456789abcdefghijk'; - let mgr = openManager(passcode); + const mgr = openManager(passcode); assert.equal(mgr.aeid, 'BMbZTXzB7LmWPT2TXLGV88PQz5vDEM2L2flUs2yxn3U9'); - let raw = new Uint8Array([ + const raw = new Uint8Array([ 187, 140, 234, 145, 219, 254, 20, 194, 16, 18, 97, 194, 140, 192, 61, 145, 222, 110, 59, 160, 152, 2, 72, 122, 87, 143, 109, 39, 98, 153, 192, 148, ]); - let agentSigner = new Signer({ + const agentSigner = new Signer({ raw: raw, code: MtrDex.Ed25519_Seed, transferable: false, diff --git a/test/app/coring.test.ts b/test/app/coring.test.ts index 7490bfd2..56b857d9 100644 --- a/test/app/coring.test.ts +++ b/test/app/coring.test.ts @@ -118,7 +118,7 @@ fetchMock.mockResponse((req) => { } else if (req.url == boot_url + '/boot') { return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers(); + const headers = new Headers(); let signed_headers = new Headers(); headers.set( @@ -132,21 +132,21 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); - let signer = salter.signer( + const salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + const signer = salter.signer( 'A', true, 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', Tier.low ); - let authn = new Authenticater(signer!, signer!.verfer); + const authn = new Authenticater(signer!, signer!.verfer); signed_headers = authn.sign( headers, req.method, requrl.pathname.split('?')[0] ); - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + const body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID; @@ -160,13 +160,13 @@ fetchMock.mockResponse((req) => { describe('Coring', () => { it('Random passcode', async () => { await libsodium.ready; - let passcode = randomPasscode(); + const passcode = randomPasscode(); assert.equal(passcode.length, 22); }); it('Random nonce', async () => { await libsodium.ready; - let nonce = randomNonce(); + const nonce = randomNonce(); assert.equal(nonce.length, 44); }); @@ -174,12 +174,12 @@ describe('Coring', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let oobis = client.oobis(); + const oobis = client.oobis(); await oobis.get('aid', 'agent'); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; @@ -206,15 +206,15 @@ describe('Coring', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let ops = client.operations(); + const ops = client.operations(); await ops.get('operationName'); - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + const lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; assert.equal(lastCall[0]!, url + '/operations/operationName'); assert.equal(lastCall[1]!.method, 'GET'); }); @@ -223,13 +223,13 @@ describe('Coring', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let keyEvents = client.keyEvents(); - let keyStates = client.keyStates(); + const keyEvents = client.keyEvents(); + const keyStates = client.keyStates(); await keyEvents.get('EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX'); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; @@ -265,7 +265,7 @@ describe('Coring', () => { 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' ); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - let lastBody = JSON.parse(lastCall[1]!.body!.toString()); + const lastBody = JSON.parse(lastCall[1]!.body!.toString()); assert.equal(lastCall[0]!, url + '/queries'); assert.equal(lastCall[1]!.method, 'POST'); assert.equal( diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index dfaa966a..68c16395 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -126,7 +126,7 @@ fetchMock.mockResponse((req) => { } else if (req.url == boot_url + '/boot') { return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers(); + const headers = new Headers(); let signed_headers = new Headers(); headers.set( @@ -140,21 +140,21 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); - let signer = salter.signer( + const salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + const signer = salter.signer( 'A', true, 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', Tier.low ); - let authn = new Authenticater(signer!, signer!.verfer); + const authn = new Authenticater(signer!, signer!.verfer); signed_headers = authn.sign( headers, req.method, requrl.pathname.split('?')[0] ); - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + const body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID; @@ -170,14 +170,14 @@ describe('Credentialing', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let credentials = client.credentials(); + const credentials = client.credentials(); - let kargs = { + const kargs = { filter: { '-i': { $eq: 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' }, }, @@ -326,19 +326,19 @@ describe('Ipex', () => { it('Ipex', async () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let ipex = client.ipex(); + const ipex = client.ipex(); - let holder = 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k'; - let [acdcSaider, acdc] = Saider.saidify(mockCredential.sad); + const holder = 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k'; + const [acdcSaider, acdc] = Saider.saidify(mockCredential.sad); // Create iss const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); - let _iss = { + const _iss = { v: vs, t: Ilks.iss, d: '', @@ -348,9 +348,9 @@ describe('Ipex', () => { dt: mockCredential.sad.a.dt, }; - let [issSaider, iss] = Saider.saidify(_iss); - let iserder = new Serder(iss); - let anc = interact({ + const [issSaider, iss] = Saider.saidify(_iss); + const iserder = new Serder(iss); + const anc = interact({ pre: mockCredential.sad.i, sn: 1, data: [{}], @@ -359,7 +359,7 @@ describe('Ipex', () => { kind: undefined, }); - let [grant, gsigs, end] = await ipex.grant({ + const [grant, gsigs, end] = await ipex.grant({ senderName: 'multisig', recipient: holder, message: '', @@ -426,7 +426,7 @@ describe('Ipex', () => { '-e-anc-AABAADMtDfNihvCSXJNp1VronVojcPGo--0YZ4Kh6CAnowRnn4Or4FgZQqaqCEv6XVS413qfZoVp8j2uxTTPkItO7ED' ); - let [admit, asigs, aend] = await ipex.admit( + const [admit, asigs, aend] = await ipex.admit( 'holder', '', grant.ked.d, diff --git a/test/app/escrowing.test.ts b/test/app/escrowing.test.ts index 70eb71ce..10049123 100644 --- a/test/app/escrowing.test.ts +++ b/test/app/escrowing.test.ts @@ -115,7 +115,7 @@ fetchMock.mockResponse((req) => { } else if (req.url == boot_url + '/boot') { return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers(); + const headers = new Headers(); let signed_headers = new Headers(); headers.set( @@ -129,21 +129,21 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); - let signer = salter.signer( + const salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + const signer = salter.signer( 'A', true, 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', Tier.low ); - let authn = new Authenticater(signer!, signer!.verfer); + const authn = new Authenticater(signer!, signer!.verfer); signed_headers = authn.sign( headers, req.method, requrl.pathname.split('?')[0] ); - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + const body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID; @@ -159,12 +159,12 @@ describe('SignifyClient', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let escrows = client.escrows(); + const escrows = client.escrows(); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; await escrows.listReply('/presentation/request'); diff --git a/test/app/exchanging.test.ts b/test/app/exchanging.test.ts index 3d367c14..d9b4abb4 100644 --- a/test/app/exchanging.test.ts +++ b/test/app/exchanging.test.ts @@ -126,7 +126,7 @@ fetchMock.mockResponse((req) => { } else if (req.url == boot_url + '/boot') { return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers(); + const headers = new Headers(); let signed_headers = new Headers(); headers.set( @@ -140,21 +140,21 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); - let signer = salter.signer( + const salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + const signer = salter.signer( 'A', true, 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', Tier.low ); - let authn = new Authenticater(signer!, signer!.verfer); + const authn = new Authenticater(signer!, signer!.verfer); signed_headers = authn.sign( headers, req.method, requrl.pathname.split('?')[0] ); - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + const body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID; @@ -168,7 +168,7 @@ fetchMock.mockResponse((req) => { describe('exchange', () => { it('should create an exchange message with no transposed attachments', async () => { await libsodium.ready; - let dt = '2023-08-30T17:22:54.183Z'; + const dt = '2023-08-30T17:22:54.183Z'; let [exn, end] = exchange('/multisig/vcp', {}, 'test', undefined, dt); assert.deepStrictEqual(exn.ked, { @@ -185,39 +185,39 @@ describe('exchange', () => { }); assert.deepStrictEqual(end, new Uint8Array()); - let sith = 1; - let nsith = 1; - let sn = 0; - let toad = 0; + const sith = 1; + const nsith = 1; + const sn = 0; + const toad = 0; - let raw = new Uint8Array([ + const raw = new Uint8Array([ 5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, 117, ]); - let salter = new Salter({ raw: raw }); - let skp0 = salter.signer( + const salter = new Salter({ raw: raw }); + const skp0 = salter.signer( MtrDex.Ed25519_Seed, true, 'A', Tier.low, true ); - let keys = [skp0.verfer.qb64]; + const keys = [skp0.verfer.qb64]; - let skp1 = salter.signer( + const skp1 = salter.signer( MtrDex.Ed25519_Seed, true, 'N', Tier.low, true ); - let ndiger = new Diger({}, skp1.verfer.qb64b); - let nxt = [ndiger.qb64]; + const ndiger = new Diger({}, skp1.verfer.qb64b); + const nxt = [ndiger.qb64]; assert.deepStrictEqual(nxt, [ 'EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj', ]); - let ked0 = { + const ked0 = { v: 'KERI10JSON000000_', t: Ilks.icp, d: '', @@ -233,14 +233,14 @@ describe('exchange', () => { a: [], } as Dict; - let serder = new Serder(ked0); - let siger = skp0.sign(b(serder.raw), 0); + const serder = new Serder(ked0); + const siger = skp0.sign(b(serder.raw), 0); assert.equal( siger.qb64, 'AAAPkMTS3LrrhVuQB0k4UndDN0xIfEiKYaN7rTlQ_q9ImnBcugwNO8VWTALXzWoaldJEC1IOpEGkEnjZfxxIleoI' ); - let ked1 = { + const ked1 = { v: 'KERI10JSON000000_', t: Ilks.vcp, d: '', @@ -249,9 +249,9 @@ describe('exchange', () => { bt: toad.toString(16), b: [], } as Dict; - let vcp = new Serder(ked1); + const vcp = new Serder(ked1); - let embeds = { + const embeds = { icp: [serder, siger.qb64], vcp: [vcp, undefined], } as Dict; @@ -315,45 +315,45 @@ describe('exchange', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let exchange = client.exchanges(); - let sith = 1; - let nsith = 1; - let sn = 0; - let toad = 0; + const exchange = client.exchanges(); + const sith = 1; + const nsith = 1; + const sn = 0; + const toad = 0; - let raw = new Uint8Array([ + const raw = new Uint8Array([ 5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, 117, ]); - let salter = new Salter({ raw: raw }); - let skp0 = salter.signer( + const salter = new Salter({ raw: raw }); + const skp0 = salter.signer( MtrDex.Ed25519_Seed, true, 'A', Tier.low, true ); - let keys = [skp0.verfer.qb64]; + const keys = [skp0.verfer.qb64]; - let skp1 = salter.signer( + const skp1 = salter.signer( MtrDex.Ed25519_Seed, true, 'N', Tier.low, true ); - let ndiger = new Diger({}, skp1.verfer.qb64b); - let nxt = [ndiger.qb64]; + const ndiger = new Diger({}, skp1.verfer.qb64b); + const nxt = [ndiger.qb64]; assert.deepStrictEqual(nxt, [ 'EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj', ]); - let ked0 = { + const ked0 = { v: 'KERI10JSON000000_', t: Ilks.icp, d: '', @@ -369,7 +369,7 @@ describe('exchange', () => { a: [], } as Dict; - let serder = new Serder(ked0); + const serder = new Serder(ked0); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; await exchange.sendFromEvents('aid1', '', serder, [''], '', []); diff --git a/test/app/grouping.test.ts b/test/app/grouping.test.ts index 5992bc2d..4b408725 100644 --- a/test/app/grouping.test.ts +++ b/test/app/grouping.test.ts @@ -115,7 +115,7 @@ fetchMock.mockResponse((req) => { } else if (req.url == boot_url + '/boot') { return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers(); + const headers = new Headers(); let signed_headers = new Headers(); headers.set( @@ -129,21 +129,21 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); - let signer = salter.signer( + const salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + const signer = salter.signer( 'A', true, 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', Tier.low ); - let authn = new Authenticater(signer!, signer!.verfer); + const authn = new Authenticater(signer!, signer!.verfer); signed_headers = authn.sign( headers, req.method, requrl.pathname.split('?')[0] ); - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + const body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID; @@ -159,12 +159,12 @@ describe('Grouping', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let groups = client.groups(); + const groups = client.groups(); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; await groups.sendRequest('aid1', {}, [], ''); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; diff --git a/test/app/habery.test.ts b/test/app/habery.test.ts index 3b46e04a..a2fe343c 100644 --- a/test/app/habery.test.ts +++ b/test/app/habery.test.ts @@ -8,8 +8,8 @@ import { MtrDex } from '../../src/keri/core/matter'; describe('Habery', () => { it('should manage AID creation and rotation', async () => { await libsodium.ready; - let salt = new Salter({ raw: b('0123456789abcdef') }).qb64; - let hby = new Habery({ + const salt = new Salter({ raw: b('0123456789abcdef') }).qb64; + const hby = new Habery({ name: 'signify', salt: salt, passcode: '0123456789abcdefghijk', @@ -20,7 +20,7 @@ describe('Habery', () => { 'BMbZTXzB7LmWPT2TXLGV88PQz5vDEM2L2flUs2yxn3U9' ); - let hab = hby.makeHab('test', {}); + const hab = hby.makeHab('test', {}); assert.deepStrictEqual(hab.serder.ked['k'], [ 'DAQVURvW74OJH1Q0C6YLim_tdBYoXABwg6GsAlPaUJXE', @@ -32,14 +32,14 @@ describe('Habery', () => { it('should use passcode as salt', async () => { await libsodium.ready; - let passcode = '0123456789abcdefghijk'; + const passcode = '0123456789abcdefghijk'; if (passcode.length < 21) { throw new Error('Bran (passcode seed material) too short.'); } - let bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21); // qb64 salt for seed - let salter = new Salter({ qb64: bran }); - let signer = salter.signer(MtrDex.Ed25519_Seed, true); + const bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21); // qb64 salt for seed + const salter = new Salter({ qb64: bran }); + const signer = salter.signer(MtrDex.Ed25519_Seed, true); assert.equal( signer.qb64, 'AKeXgiAUIN7OHGXO6rbw_IzWeaQTr1LF7jWD6YEdrpa6' @@ -49,8 +49,8 @@ describe('Habery', () => { 'DMbZTXzB7LmWPT2TXLGV88PQz5vDEM2L2flUs2yxn3U9' ); - let hby = new Habery({ name: 'test', salt: salter.qb64 }); - let hab = hby.makeHab('test', { transferable: true }); + const hby = new Habery({ name: 'test', salt: salter.qb64 }); + const hab = hby.makeHab('test', { transferable: true }); assert.equal(hab.pre, 'EMRbh7mWJTijcWiQKT3uxozncpa9_gEX1IU0fM1wnKxi'); }); diff --git a/test/app/notifying.test.ts b/test/app/notifying.test.ts index ba265cb6..b40b481b 100644 --- a/test/app/notifying.test.ts +++ b/test/app/notifying.test.ts @@ -115,7 +115,7 @@ fetchMock.mockResponse((req) => { } else if (req.url == boot_url + '/boot') { return Promise.resolve({ body: '', init: { status: 202 } }); } else { - let headers = new Headers(); + const headers = new Headers(); let signed_headers = new Headers(); headers.set( @@ -129,21 +129,21 @@ fetchMock.mockResponse((req) => { headers.set('Content-Type', 'application/json'); const requrl = new URL(req.url); - let salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); - let signer = salter.signer( + const salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); + const signer = salter.signer( 'A', true, 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', Tier.low ); - let authn = new Authenticater(signer!, signer!.verfer); + const authn = new Authenticater(signer!, signer!.verfer); signed_headers = authn.sign( headers, req.method, requrl.pathname.split('?')[0] ); - let body = req.url.startsWith(url + '/identifiers/aid1/credentials') + const body = req.url.startsWith(url + '/identifiers/aid1/credentials') ? mockCredential : mockGetAID; @@ -159,18 +159,18 @@ describe('SignifyClient', () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; - let client = new SignifyClient(url, bran, Tier.low, boot_url); + const client = new SignifyClient(url, bran, Tier.low, boot_url); await client.boot(); await client.connect(); - let notifications = client.notifications(); + const notifications = client.notifications(); await notifications.list(20, 40); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; assert.equal(lastCall[0]!, url + '/notifications'); assert.equal(lastCall[1]!.method, 'GET'); - let lastHeaders = new Headers(lastCall[1]!.headers!); + const lastHeaders = new Headers(lastCall[1]!.headers!); assert.equal(lastHeaders.get('Range'), 'notes=20-40'); await notifications.mark('notificationSAID'); diff --git a/test/app/registry.test.ts b/test/app/registry.test.ts index c4ee638b..14971493 100644 --- a/test/app/registry.test.ts +++ b/test/app/registry.test.ts @@ -9,12 +9,12 @@ import { strict as assert } from 'assert'; describe('registry', () => { it('should create a registry', async () => { await libsodium.ready; - let mockedClient = mock(SignifyClient); - let mockedIdentifiers = mock(Identifier); - let mockedKeyManager = mock(KeyManager); - let mockedKeeper = mock(SaltyKeeper); + const mockedClient = mock(SignifyClient); + const mockedIdentifiers = mock(Identifier); + const mockedKeyManager = mock(KeyManager); + const mockedKeeper = mock(SaltyKeeper); - let hab = { prefix: 'hab prefix', state: { s: 0, d: 'a digest' } }; + const hab = { prefix: 'hab prefix', state: { s: 0, d: 'a digest' } }; when(mockedClient.manager).thenReturn(instance(mockedKeyManager)); when(mockedKeyManager.get(hab)).thenReturn(instance(mockedKeeper)); @@ -28,7 +28,7 @@ describe('registry', () => { instance(mockedIdentifiers) ); - let mockedResponse = mock(Response); + const mockedResponse = mock(Response); when( mockedClient.fetch( '/identifiers/a name/registries', @@ -37,9 +37,9 @@ describe('registry', () => { ) ).thenResolve(instance(mockedResponse)); - let registries = new Registries(instance(mockedClient)); + const registries = new Registries(instance(mockedClient)); - let actual = await registries.create({ + const actual = await registries.create({ name: 'a name', registryName: 'a registry name', nonce: '', @@ -57,10 +57,10 @@ describe('registry', () => { it('should fail on estanblishmnet only for now', async () => { await libsodium.ready; - let mockedClient = mock(SignifyClient); - let mockedIdentifiers = mock(Identifier); + const mockedClient = mock(SignifyClient); + const mockedIdentifiers = mock(Identifier); - let hab = { + const hab = { prefix: 'hab prefix', state: { s: 0, d: 'a digest', c: ['EO'] }, }; @@ -70,7 +70,7 @@ describe('registry', () => { instance(mockedIdentifiers) ); - let registries = new Registries(instance(mockedClient)); + const registries = new Registries(instance(mockedClient)); assert.rejects( async () => { diff --git a/test/core/authing.test.ts b/test/core/authing.test.ts index 68984d36..27466437 100644 --- a/test/core/authing.test.ts +++ b/test/core/authing.test.ts @@ -9,13 +9,13 @@ import { Verfer } from '../../src/keri/core/verfer'; describe('Authenticater.verify', () => { it('verify signature on Response', async () => { await libsodium.ready; - let salt = '0123456789abcdef'; - let salter = new Salter({ raw: b(salt) }); - let signer = salter.signer(); - let aaid = 'DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a'; - let verfer = new Verfer({ qb64: aaid }); + const salt = '0123456789abcdef'; + const salter = new Salter({ raw: b(salt) }); + const signer = salter.signer(); + const aaid = 'DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a'; + const verfer = new Verfer({ qb64: aaid }); - let headers = new Headers([ + const headers = new Headers([ ['Content-Length', '898'], ['Content-Type', 'application/json'], [ @@ -33,7 +33,7 @@ describe('Authenticater.verify', () => { ['Signify-Timestamp', '2023-05-22T00:37:00.248708+00:00'], ]); - let authn = new Authenticater(signer, verfer); + const authn = new Authenticater(signer, verfer); assert.notEqual(authn, undefined); assert.equal( @@ -46,11 +46,11 @@ describe('Authenticater.verify', () => { describe('Authenticater.sign', () => { it('Create signed headers for a request', async () => { await libsodium.ready; - let salt = '0123456789abcdef'; - let salter = new Salter({ raw: b(salt) }); - let signer = salter.signer(); - let aaid = 'DDK2N5_fVCWIEO9d8JLhk7hKrkft6MbtkUhaHQsmABHY'; - let verfer = new Verfer({ qb64: aaid }); + const salt = '0123456789abcdef'; + const salter = new Salter({ raw: b(salt) }); + const signer = salter.signer(); + const aaid = 'DDK2N5_fVCWIEO9d8JLhk7hKrkft6MbtkUhaHQsmABHY'; + const verfer = new Verfer({ qb64: aaid }); let headers = new Headers([ ['Content-Type', 'application/json'], @@ -66,7 +66,7 @@ describe('Authenticater.sign', () => { new Date('2021-01-01T00:00:00.000000+00:00') ); - let authn = new Authenticater(signer, verfer); + const authn = new Authenticater(signer, verfer); headers = authn.sign(headers, 'POST', '/boot'); assert.equal(headers.has('Signature-Input'), true); diff --git a/test/core/counter.test.ts b/test/core/counter.test.ts index 4934a296..deb9c2ec 100644 --- a/test/core/counter.test.ts +++ b/test/core/counter.test.ts @@ -11,7 +11,7 @@ describe('int to b64 and back', () => { // verify first hs Sizes matches hs in Codes for same first char Counter.Sizes.forEach((_, ckey) => { - let key = ckey.slice(0, 2); + const key = ckey.slice(0, 2); assert.equal(Counter.Hards.get(key), Counter.Sizes.get(ckey)!.hs); }); @@ -59,11 +59,11 @@ describe('int to b64 and back', () => { assert.deepStrictEqual(counter.qb64b, qscb); assert.equal(counter.qb64, qsc); - let longqs64 = `${qsc}ABCD`; + const longqs64 = `${qsc}ABCD`; counter = new Counter({ qb64: longqs64 }); assert.equal(counter.qb64.length, Counter.Sizes.get(counter.code)!.fs); - let shortqcs = qsc.slice(0, -1); + const shortqcs = qsc.slice(0, -1); assert.throws(() => { new Counter({ qb64: shortqcs }); }); @@ -118,8 +118,8 @@ describe('int to b64 and back', () => { assert.deepStrictEqual(counter.qb64b, qscb); assert.equal(counter.qb64, qsc); - let verint = 0; - let version = intToB64(verint, 3); + const verint = 0; + const version = intToB64(verint, 3); assert.equal(version, 'AAA'); assert.equal(verint, b64ToInt(version)); qsc = CtrDex.KERIProtocolStack + version; diff --git a/test/core/decrypter.test.ts b/test/core/decrypter.test.ts index f840c950..539f1b9a 100644 --- a/test/core/decrypter.test.ts +++ b/test/core/decrypter.test.ts @@ -12,17 +12,17 @@ describe('Decrypter', () => { await libsodium.ready; // (b'\x18;0\xc4\x0f*vF\xfa\xe3\xa2Eee\x1f\x96o\xce)G\x85\xe3X\x86\xda\x04\xf0\xdc\xde\x06\xc0+') - let seed = new Uint8Array([ + const seed = new Uint8Array([ 24, 59, 48, 196, 15, 42, 118, 70, 250, 227, 162, 69, 101, 101, 31, 150, 111, 206, 41, 71, 133, 227, 88, 134, 218, 4, 240, 220, 222, 6, 192, 43, ]); - let signer = new Signer({ raw: seed, code: MtrDex.Ed25519_Seed }); + const signer = new Signer({ raw: seed, code: MtrDex.Ed25519_Seed }); assert.equal(signer.verfer.code, MtrDex.Ed25519); assert.equal(signer.verfer.transferable, true); // default - let seedqb64 = signer.qb64; - let seedqb64b = signer.qb64b; + const seedqb64 = signer.qb64; + const seedqb64b = signer.qb64b; assert.equal(seedqb64, 'ABg7MMQPKnZG-uOiRWVlH5ZvzilHheNYhtoE8NzeBsAr'); // also works for Matter @@ -32,14 +32,14 @@ describe('Decrypter', () => { ); // raw = b'6\x08d\r\xa1\xbb9\x8dp\x8d\xa0\xc0\x13J\x87r' - let raw = new Uint8Array([ + const raw = new Uint8Array([ 54, 8, 100, 13, 161, 187, 57, 141, 112, 141, 160, 192, 19, 74, 135, 114, ]); - let salter = new Salter({ raw: raw, code: MtrDex.Salt_128 }); + const salter = new Salter({ raw: raw, code: MtrDex.Salt_128 }); assert.equal(salter.code, MtrDex.Salt_128); - let saltqb64 = salter.qb64; - let saltqb64b = salter.qb64b; + const saltqb64 = salter.qb64; + const saltqb64b = salter.qb64b; assert.deepStrictEqual(saltqb64, '0AA2CGQNobs5jXCNoMATSody'); // also works for Matter @@ -49,21 +49,21 @@ describe('Decrypter', () => { ); // cryptseed = b'h,#|\x8ap"\x12\xc43t2\xa6\xe1\x18\x19\xf0f2,y\xc4\xc21@\xf5@\x15.\xa2\x1a\xcf' - let cryptseed = new Uint8Array([ + const cryptseed = new Uint8Array([ 104, 44, 35, 124, 138, 112, 34, 18, 196, 51, 116, 50, 166, 225, 24, 25, 240, 102, 50, 44, 121, 196, 194, 49, 64, 245, 64, 21, 46, 162, 26, 207, ]); - let cryptsigner = new Signer({ + const cryptsigner = new Signer({ raw: cryptseed, code: MtrDex.Ed25519_Seed, transferable: true, }); - let keypair = libsodium.crypto_sign_seed_keypair(cryptseed); // raw - let pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519( + const keypair = libsodium.crypto_sign_seed_keypair(cryptseed); // raw + const pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519( keypair.publicKey ); - let prikey = libsodium.crypto_sign_ed25519_sk_to_curve25519( + const prikey = libsodium.crypto_sign_ed25519_sk_to_curve25519( keypair.privateKey ); @@ -72,7 +72,7 @@ describe('Decrypter', () => { }); // create encrypter - let encrypter = new Encrypter({ raw: pubkey }); + const encrypter = new Encrypter({ raw: pubkey }); assert.equal(encrypter.code, MtrDex.X25519); assert.equal( encrypter.qb64, @@ -81,7 +81,7 @@ describe('Decrypter', () => { assert.deepStrictEqual(encrypter.raw, pubkey); // create cipher of seed - let seedcipher = encrypter.encrypt(seedqb64b); + const seedcipher = encrypter.encrypt(seedqb64b); assert.equal(seedcipher.code, MtrDex.X25519_Cipher_Seed); // each encryption uses a nonce so not a stable representation for testing @@ -117,7 +117,7 @@ describe('Decrypter', () => { assert.equal(signer.verfer.transferable, true); // create cipher of salt - let saltcipher = encrypter.encrypt(saltqb64b); + const saltcipher = encrypter.encrypt(saltqb64b); assert.equal(saltcipher.code, MtrDex.X25519_Cipher_Salt); // each encryption uses a nonce so not a stable representation for testing @@ -133,7 +133,7 @@ describe('Decrypter', () => { // use previously stored fully qualified seed cipher with different nonce // get from seedcipher above - let cipherseed = + const cipherseed = 'PM9jOGWNYfjM_oLXJNaQ8UlFSAV5ACjsUY7J16xfzrlpc9Ve3A5WYrZ4o_NHtP5lhp78Usspl9fyFdnCdItNd5JyqZ6dt8SXOt6TOqOCs-gy0obrwFkPPqBvVkEw'; designer = decrypter.decrypt( b(cipherseed), @@ -146,7 +146,7 @@ describe('Decrypter', () => { // use previously stored fully qualified salt cipher with different nonce // get from saltcipher above - let ciphersalt = + const ciphersalt = '1AAHjlR2QR9J5Et67Wy-ZaVdTryN6T6ohg44r73GLRPnHw-5S3ABFkhWyIwLOI6TXUB_5CT13S8JvknxLxBaF8ANPK9FSOPD8tYu'; desalter = decrypter.decrypt(b(ciphersalt)); assert.deepStrictEqual(desalter.qb64b, saltqb64b); diff --git a/test/core/encrypter.test.ts b/test/core/encrypter.test.ts index 445be03a..53c27d79 100644 --- a/test/core/encrypter.test.ts +++ b/test/core/encrypter.test.ts @@ -13,12 +13,12 @@ describe('Encrypter', () => { await libsodium.ready; // (b'\x18;0\xc4\x0f*vF\xfa\xe3\xa2Eee\x1f\x96o\xce)G\x85\xe3X\x86\xda\x04\xf0\xdc\xde\x06\xc0+') - let seed = new Uint8Array([ + const seed = new Uint8Array([ 24, 59, 48, 196, 15, 42, 118, 70, 250, 227, 162, 69, 101, 101, 31, 150, 111, 206, 41, 71, 133, 227, 88, 134, 218, 4, 240, 220, 222, 6, 192, 43, ]); - let seedqb64b = new Matter({ raw: seed, code: MtrDex.Ed25519_Seed }) + const seedqb64b = new Matter({ raw: seed, code: MtrDex.Ed25519_Seed }) .qb64b; assert.equal( @@ -27,30 +27,30 @@ describe('Encrypter', () => { ); // b'6\x08d\r\xa1\xbb9\x8dp\x8d\xa0\xc0\x13J\x87r' - let salt = new Uint8Array([ + const salt = new Uint8Array([ 54, 8, 100, 13, 161, 187, 57, 141, 112, 141, 160, 192, 19, 74, 135, 114, ]); - let saltqb64 = new Matter({ raw: salt, code: MtrDex.Salt_128 }).qb64; - let saltqb64b = new Matter({ raw: salt, code: MtrDex.Salt_128 }).qb64b; + const saltqb64 = new Matter({ raw: salt, code: MtrDex.Salt_128 }).qb64; + const saltqb64b = new Matter({ raw: salt, code: MtrDex.Salt_128 }).qb64b; assert.equal(saltqb64, '0AA2CGQNobs5jXCNoMATSody'); // b'h,#|\x8ap"\x12\xc43t2\xa6\xe1\x18\x19\xf0f2,y\xc4\xc21@\xf5@\x15.\xa2\x1a\xcf' - let cryptseed = new Uint8Array([ + const cryptseed = new Uint8Array([ 104, 44, 35, 124, 138, 112, 34, 18, 196, 51, 116, 50, 166, 225, 24, 25, 240, 102, 50, 44, 121, 196, 194, 49, 64, 245, 64, 21, 46, 162, 26, 207, ]); - let cryptsigner = new Signer({ + const cryptsigner = new Signer({ raw: cryptseed, code: MtrDex.Ed25519_Seed, transferable: true, }); - let keypair = libsodium.crypto_sign_seed_keypair(cryptseed); // raw - let pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519( + const keypair = libsodium.crypto_sign_seed_keypair(cryptseed); // raw + const pubkey = libsodium.crypto_sign_ed25519_pk_to_curve25519( keypair.publicKey ); - let prikey = libsodium.crypto_sign_ed25519_sk_to_curve25519( + const prikey = libsodium.crypto_sign_ed25519_sk_to_curve25519( keypair.privateKey ); @@ -85,7 +85,7 @@ describe('Encrypter', () => { ); assert.deepStrictEqual(uncb, saltqb64b); - let verfer = new Verfer({ + const verfer = new Verfer({ raw: keypair.publicKey, code: MtrDex.Ed25519, }); diff --git a/test/core/eventing.test.ts b/test/core/eventing.test.ts index 41e52d63..b730a364 100644 --- a/test/core/eventing.test.ts +++ b/test/core/eventing.test.ts @@ -12,7 +12,7 @@ describe('key event function', () => { it('incept should create inception events', async () => { await libsodium.ready; - let seed = new Uint8Array([ + const seed = new Uint8Array([ 159, 123, 168, 167, 168, 67, 57, 150, 38, 250, 177, 153, 235, 170, 32, 196, 27, 71, 17, 196, 174, 83, 65, 82, 201, 189, 4, 157, 133, 41, 126, 147, @@ -158,13 +158,13 @@ describe('key event function', () => { 'M52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":0,"b":[],"c":[],"a":[]}' ); - let siger = signer0.sign(b(serder0.raw), 0) as Siger; + const siger = signer0.sign(b(serder0.raw), 0) as Siger; assert.equal( siger.qb64, 'AABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I' ); - let msg = messagize(serder0, [siger]); + const msg = messagize(serder0, [siger]); assert.equal( d(msg), '{"v":"KERI10JSON000125_","t":"icp","d":"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","i"' + @@ -172,7 +172,7 @@ describe('key event function', () => { '"nt":1,"n":["EIf-ENw7PrM52w4H-S7NGU2qVIfraXVIlV9hEAaMHg7W"],"bt":0,"b":[],"c":[],"a":[]}' + '-AABAABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I' ); - let seal = [ + const seal = [ 'SealEvent', { i: 'EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL', @@ -180,7 +180,7 @@ describe('key event function', () => { d: 'EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL', }, ]; - let msgseal = messagize(serder0, [siger], seal); + const msgseal = messagize(serder0, [siger], seal); assert.equal( d(msgseal), '{"v":"KERI10JSON000125_","t":"icp","d":"EIflL4H4134zYoRM6ls6Q086RLC_BhfNFh5uk-WxvhsL","i"' + diff --git a/test/core/httping.test.ts b/test/core/httping.test.ts index a1851f76..c482fc25 100644 --- a/test/core/httping.test.ts +++ b/test/core/httping.test.ts @@ -12,11 +12,11 @@ import * as utilApi from '../../src/keri/core/utils'; describe('siginput', () => { it('create valid Signature-Input header with signature', async () => { await libsodium.ready; - let salt = '0123456789abcdef'; - let salter = new Salter({ raw: b(salt) }); - let signer = salter.signer(); + const salt = '0123456789abcdef'; + const salter = new Salter({ raw: b(salt) }); + const signer = salter.signer(); - let headers: Headers = new Headers([ + const headers: Headers = new Headers([ ['Content-Type', 'application/json'], ['Content-Length', '256'], ['Connection', 'close'], @@ -30,7 +30,7 @@ describe('siginput', () => { new Date('2021-01-01T00:00:00.000000+00:00') ); - let [header, sig] = siginput(signer, { + const [header, sig] = siginput(signer, { name: 'sig0', method: 'POST', path: '/signify', @@ -47,7 +47,7 @@ describe('siginput', () => { assert.equal(header.size, 1); assert.equal(header.has('Signature-Input'), true); - let sigipt = header.get('Signature-Input'); + const sigipt = header.get('Signature-Input'); assert.equal( sigipt, 'sig0=("Signify-Resource" "@method" "@path" "Signify-Timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"' @@ -62,12 +62,12 @@ describe('siginput', () => { describe('desiginput', () => { it('create valid Signature-Input header with signature', async () => { await libsodium.ready; - let siginput = + const siginput = 'sig0=("signify-resource" "@method" "@path" "signify-timestamp");created=1609459200;keyid="EIaGMMWJFPmtXznY1IIiKDIrg-vIyge6mBl2QV8dDjI3";alg="ed25519"'; - let inputs = desiginput(siginput); + const inputs = desiginput(siginput); assert.equal(inputs.length, 1); - let input = inputs[0]; + const input = inputs[0]; assert.deepStrictEqual(input.fields, [ 'signify-resource', '@method', diff --git a/test/core/indexer.test.ts b/test/core/indexer.test.ts index bff64dcc..e0e53864 100644 --- a/test/core/indexer.test.ts +++ b/test/core/indexer.test.ts @@ -51,7 +51,7 @@ describe('Indexer', () => { // sig = (b"\x99\xd2<9$$0\x9fk\xfb\x18\xa0\x8c@r\x122.k\xb2\xc7\x1fp\x0e'm\x8f@" // b'\xaa\xa5\x8c\xc8n\x85\xc8!\xf6q\x91p\xa9\xec\xcf\x92\xaf)\xde\xca' // b'\xfc\x7f~\xd7o|\x17\x82\x1d\xd4 { 60, 111, 34, 129, 38, 9, ]); assert.equal(sig.length, 64); - let ps = (3 - (sig.length % 3)) % 3; - let bytes = new Uint8Array(ps + sig.length); + const ps = (3 - (sig.length % 3)) % 3; + const bytes = new Uint8Array(ps + sig.length); for (let i = 0; i < ps; i++) { bytes[i] = 0; } for (let i = 0; i < sig.length; i++) { - let odx = i + ps; + const odx = i + ps; bytes[odx] = sig[i]; } - let sig64 = Base64.encode(Buffer.from(bytes)); + const sig64 = Base64.encode(Buffer.from(bytes)); assert.equal(sig64.length, 88); assert.equal( sig64, 'AACZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ' ); - let qsc = IdrDex.Ed25519_Sig + intToB64(0, 1); + const qsc = IdrDex.Ed25519_Sig + intToB64(0, 1); assert.equal(qsc, 'AA'); let qsig64 = qsc + sig64.slice(ps); // replace prepad chars with clause assert.equal( @@ -118,7 +118,7 @@ describe('Indexer', () => { assert.equal(indexer.ondex, 0); assert.deepStrictEqual(indexer.qb64b, qsig64b); - let longsig = new Uint8Array(sig.length + 3); + const longsig = new Uint8Array(sig.length + 3); longsig.set(sig); longsig.set(new Uint8Array([10, 11, 12]), sig.length); indexer = new Indexer({ raw: longsig }); @@ -127,7 +127,7 @@ describe('Indexer', () => { assert.equal(indexer.index, 0); assert.equal(indexer.ondex, 0); - let shortsig = sig.slice(0, sig.length - 3); + const shortsig = sig.slice(0, sig.length - 3); assert.throws(() => { new Indexer({ raw: shortsig }); }); @@ -148,17 +148,17 @@ describe('Indexer', () => { assert.deepStrictEqual(indexer.qb64b, qsig64b); assert.deepStrictEqual(indexer.qb64, qsig64); - let badq64sig2 = + const badq64sig2 = 'AA_Z0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ'; assert.throws(() => { new Indexer({ qb64: badq64sig2 }); }); - let longqsig64 = qsig64 + 'ABCD'; + const longqsig64 = qsig64 + 'ABCD'; indexer = new Indexer({ qb64: longqsig64 }); assert.equal(indexer.qb64.length, Indexer.Sizes.get(indexer.code)!.fs); - let shortqsig64 = qsig64.slice(0, -4); + const shortqsig64 = qsig64.slice(0, -4); assert.throws(() => { new Indexer({ qb64: shortqsig64 }); }); @@ -283,7 +283,7 @@ describe('Indexer', () => { assert.deepStrictEqual(indexer.qb64b, qb64b); index = 90; - let ondex = 65; + const ondex = 65; qb64 = '2ABaBBCZ0jw5JCQwn2v7GKCMQHISMi5rsscfcA4nbY9AqqWMyG6FyCH2cZFwqezPkq8p3sr8f37Xb3wXgh3UPG8igSYJ'; qb64b = b(qb64); diff --git a/test/core/manager.test.ts b/test/core/manager.test.ts index 4879fce9..ce4881b6 100644 --- a/test/core/manager.test.ts +++ b/test/core/manager.test.ts @@ -24,7 +24,7 @@ describe('RandyCreator', () => { it('should create sets of random signers', async () => { await libsodium.ready; - let randy = new RandyCreator(); + const randy = new RandyCreator(); // test default arguments let keys = randy.create(); @@ -82,9 +82,9 @@ describe('SaltyCreator', () => { assert.equal(signer.qb64.length, 44); }); - let raw = '0123456789abcdef'; - let salter = new Salter({ raw: b(raw) }); - let salt = salter.qb64; + const raw = '0123456789abcdef'; + const salter = new Salter({ raw: b(raw) }); + const salt = salter.qb64; assert.equal(salter.qb64, '0AAwMTIzNDU2Nzg5YWJjZGVm'); salty = new SaltyCreator(salter.qb64); assert.equal(salty.salter.code, MtrDex.Salt_128); @@ -134,9 +134,9 @@ describe('Creator', () => { it('should create Randy or Salty creator', async () => { await libsodium.ready; - let raw = '0123456789abcdef'; - let salter = new Salter({ raw: b(raw) }); - let salt = salter.qb64; + const raw = '0123456789abcdef'; + const salter = new Salter({ raw: b(raw) }); + const salt = salter.qb64; let creator = new Creatory(Algos.salty).make(salt) as SaltyCreator; assert.equal(creator instanceof SaltyCreator, true); @@ -146,7 +146,7 @@ describe('Creator', () => { assert.equal(creator instanceof SaltyCreator, true); assert.equal(creator.salter.qb64, salt); - let rcreator = new Creatory(Algos.randy).make(salt) as RandyCreator; + const rcreator = new Creatory(Algos.randy).make(salt) as RandyCreator; assert.equal(rcreator instanceof RandyCreator, true); }); }); @@ -163,11 +163,11 @@ describe('Manager', () => { it('should manage key pairs for identifiers', async () => { await libsodium.ready; - let raw = '0123456789abcdef'; - let salter = new Salter({ raw: b(raw) }); - let salt = salter.qb64; + const raw = '0123456789abcdef'; + const salter = new Salter({ raw: b(raw) }); + const salt = salter.qb64; assert.equal(salt, '0AAwMTIzNDU2Nzg5YWJjZGVm'); - let stem = 'red'; + const stem = 'red'; // Create a randy Manager without encryption should raise an exception assert.throws(() => { @@ -175,44 +175,44 @@ describe('Manager', () => { }); // cryptseed0 = b('h,#|\x8ap"\x12\xc43t2\xa6\xe1\x18\x19\xf0f2,y\xc4\xc21@\xf5@\x15.\xa2\x1a\xcf') - let cryptseed0 = new Uint8Array([ + const cryptseed0 = new Uint8Array([ 104, 44, 35, 124, 138, 112, 34, 18, 196, 51, 116, 50, 166, 225, 24, 25, 240, 102, 50, 44, 121, 196, 194, 49, 64, 245, 64, 21, 46, 162, 26, 207, ]); - let cryptsigner0 = new Signer({ + const cryptsigner0 = new Signer({ raw: cryptseed0, code: MtrDex.Ed25519_Seed, transferable: false, }); - let seed0 = cryptsigner0.qb64; - let seed0b = cryptsigner0.qb64b; - let aeid0 = cryptsigner0.verfer.qb64; + const seed0 = cryptsigner0.qb64; + const seed0b = cryptsigner0.qb64b; + const aeid0 = cryptsigner0.verfer.qb64; assert.equal(aeid0, 'BCa7mK96FwxkU0TdF54Yqg3qBDXUWpOhQ_Mtr7E77yZB'); - let decrypter0 = new Decrypter({}, seed0b); - let encrypter0 = new Encrypter({}, b(aeid0)); + const decrypter0 = new Decrypter({}, seed0b); + const encrypter0 = new Encrypter({}, b(aeid0)); assert.equal(encrypter0.verifySeed(seed0b), true); // cryptseed1 = (b"\x89\xfe{\xd9'\xa7\xb3\x89#\x19\xbec\xee\xed\xc0\xf9\x97\xd0\x8f9\x1dyNI" // b'I\x98\xbd\xa4\xf6\xfe\xbb\x03') - let cryptseed1 = new Uint8Array([ + const cryptseed1 = new Uint8Array([ 137, 254, 123, 217, 39, 167, 179, 137, 35, 25, 190, 99, 238, 237, 192, 249, 151, 208, 143, 57, 29, 121, 78, 73, 73, 152, 189, 164, 246, 254, 187, 3, ]); - let cryptsigner1 = new Signer({ + const cryptsigner1 = new Signer({ raw: cryptseed1, code: MtrDex.Ed25519_Seed, transferable: false, }); - let seed1 = cryptsigner1.qb64b; - let aeid1 = cryptsigner1.verfer.qb64; + const seed1 = cryptsigner1.qb64b; + const aeid1 = cryptsigner1.verfer.qb64; assert.equal(aeid1, 'BEcOrMrG_7r_NWaLl6h8UJapwIfQWIkjrIPXkCZm2fFM'); // let decrypter1 = new Decrypter({}, seed1) - let encrypter1 = new Encrypter({}, b(aeid1)); + const encrypter1 = new Encrypter({}, b(aeid1)); assert.equal(encrypter1.verifySeed(seed1), true); - let manager = new Manager({ seed: seed0, salter: salter, aeid: aeid0 }); + const manager = new Manager({ seed: seed0, salter: salter, aeid: aeid0 }); assert.equal(manager.encrypter!.qb64, encrypter0.qb64); assert.equal(manager.decrypter!.qb64, decrypter0.qb64); assert.equal(manager.seed, seed0); @@ -222,7 +222,7 @@ describe('Manager', () => { assert.equal(manager.salt, salt); assert.equal(manager.pidx, 0); assert.equal(manager.tier, Tier.low); - let saltCipher0 = new Cipher({ qb64: manager.ks.getGbls('salt') }); + const saltCipher0 = new Cipher({ qb64: manager.ks.getGbls('salt') }); assert.equal(saltCipher0.decrypt(undefined, seed0b).qb64, salt); let [verfers, digers] = manager.incept({ salt: salt, temp: true }); @@ -268,7 +268,7 @@ describe('Manager', () => { 'ENmcKrctbztF36MttN7seUYJqH2IMnkavBgGLR6Mj2-B', ]); - let oldspre = spre; + const oldspre = spre; spre = 'DCu5o5cxzv1lgMqxMVG3IcCNK4lpFfpMM-9rfkY3XVUc'; manager.move(oldspre, spre); @@ -277,7 +277,7 @@ describe('Manager', () => { pl = manager.ks.getPubs(riKey(spre, ps.nxt.ridx))!; assert.deepStrictEqual(pl.pubs, ps.nxt.pubs); - let serb = b(ser); + const serb = b(ser); let psigers = manager.sign({ ser: serb, pubs: ps.new.pubs }); assert.equal(psigers.length, 1); assert.equal(psigers[0] instanceof Siger, true); @@ -297,7 +297,7 @@ describe('Manager', () => { ); // Test sign with indices - let indices = [3]; + const indices = [3]; psigers = manager.sign({ ser: serb, pubs: ps.new.pubs, @@ -323,24 +323,24 @@ describe('Manager', () => { vsigs = Array.from(vsigers as Array, (vsiger) => vsiger.qb64); assert.deepStrictEqual(psigs, vsigs); - let pcigars = manager.sign({ + const pcigars = manager.sign({ ser: serb, pubs: ps.new.pubs, indexed: false, }); assert.equal(pcigars.length, 1); assert.equal(pcigars[0] instanceof Cigar, true); - let vcigars = manager.sign({ + const vcigars = manager.sign({ ser: serb, verfers: verfers, indexed: false, }); assert.equal(vcigars.length, 1); - let pcigs = Array.from( + const pcigs = Array.from( pcigars as Array, (psiger) => psiger.qb64 ); - let vcigs = Array.from( + const vcigs = Array.from( vcigars as Array, (vsiger) => vsiger.qb64 ); @@ -392,7 +392,7 @@ describe('Manager', () => { assert.deepStrictEqual(oldpubs, ps.old.pubs); oldpubs = Array.from(verfers, (verfer: Verfer) => verfer.qb64); - let deadpubs = ps.old.pubs; + const deadpubs = ps.old.pubs; manager.rotate({ pre: spre }); @@ -457,7 +457,7 @@ describe('Manager', () => { assert.notEqual(manager.ks.getPris(key, decrypter0), undefined); }); - let oldrpre = rpre; + const oldrpre = rpre; rpre = 'DMqxMVG3IcCNK4lpFfCu5o5cxzv1lgpMM-9rfkY3XVUc'; manager.move(oldrpre, rpre); @@ -541,7 +541,7 @@ describe('Manager', () => { verfers = hashes[0]; digers = hashes[1]; - let witpre0 = verfers[0].qb64; + const witpre0 = verfers[0].qb64; assert.equal( verfers[0].qb64, 'BOTNI4RzN706NecNdqTlGEcMSTWiFUvesEqmxWR_op8n' @@ -559,7 +559,7 @@ describe('Manager', () => { verfers = hashes[0]; digers = hashes[1]; - let witpre1 = verfers[0].qb64; + const witpre1 = verfers[0].qb64; assert.equal( verfers[0].qb64, 'BAB_5xNXH4hoxDCtAHPFPDedZ6YwTo8mbdw_v0AOHOMt' @@ -574,11 +574,11 @@ describe('Manager', () => { await libsodium.ready; // Support Salty/Unencrypted - pass only stretched passcode as Salt. - let passcode = '0123456789abcdefghijk'; - let salter = new Salter({ raw: b(passcode) }); - let salt = salter.qb64; + const passcode = '0123456789abcdefghijk'; + const salter = new Salter({ raw: b(passcode) }); + const salt = salter.qb64; - let manager = new Manager({ salter: salter }); + const manager = new Manager({ salter: salter }); assert.equal(manager.encrypter, undefined); let [verfers, digers] = manager.incept({ salt: salt, temp: true }); @@ -609,7 +609,7 @@ describe('Manager', () => { 'ENmcKrctbztF36MttN7seUYJqH2IMnkavBgGLR6Mj2-B', ]); - let serb = b(ser); + const serb = b(ser); let psigers = manager.sign({ ser: serb, pubs: ps.new.pubs }); assert.equal(psigers.length, 1); assert.equal(psigers[0] instanceof Siger, true); @@ -628,18 +628,18 @@ describe('Manager', () => { 'AACRPqO6vdXm1oSSa82rmVVHikf7NdN4JXjOWEk30Ub5JHChL0bW6DzJfA-7VlgLm_B1XR0Z61FweP87bBQpVawI' ); - let oldspre = spre; + const oldspre = spre; spre = 'DCu5o5cxzv1lgMqxMVG3IcCNK4lpFfpMM-9rfkY3XVUc'; manager.move(oldspre, spre); - let oldpubs = Array.from(verfers, (verfer) => verfer.qb64); - let hashes = manager.rotate({ pre: spre }); + const oldpubs = Array.from(verfers, (verfer) => verfer.qb64); + const hashes = manager.rotate({ pre: spre }); verfers = hashes[0]; digers = hashes[1]; assert.equal(verfers.length, 1); assert.equal(digers.length, 1); - let pp = manager.ks.getPrms(spre)!; + const pp = manager.ks.getPrms(spre)!; assert.equal(pp.pidx, 0); assert.equal(pp.algo, Algos.salty); assert.equal(pp.salt, ''); diff --git a/test/core/matter.test.ts b/test/core/matter.test.ts index 741492ac..62b93f89 100644 --- a/test/core/matter.test.ts +++ b/test/core/matter.test.ts @@ -4,7 +4,7 @@ import { Sizage } from '../../src/keri/core/matter'; describe('Sizage', () => { it('should hold size values in 4 properties', async () => { - let sizage = new Sizage(1, 2, 3, 4); + const sizage = new Sizage(1, 2, 3, 4); assert.equal(sizage.hs, 1); assert.equal(sizage.ss, 2); assert.equal(sizage.fs, 3); diff --git a/test/core/prefixer.test.ts b/test/core/prefixer.test.ts index 98f3cbde..8ae25b5d 100644 --- a/test/core/prefixer.test.ts +++ b/test/core/prefixer.test.ts @@ -16,7 +16,7 @@ describe('Prefixer', () => { await libsodium.ready; // (b'\xacr\xda\xc83~\x99r\xaf\xeb`\xc0\x8cR\xd7\xd7\xf69\xc8E\x1e\xd2\xf0=`\xf7\xbf\x8a\x18\x8a`q') // from keripy - let verkey = new Uint8Array([ + const verkey = new Uint8Array([ 172, 114, 218, 200, 51, 126, 153, 114, 175, 235, 96, 192, 140, 82, 215, 215, 246, 57, 200, 69, 30, 210, 240, 61, 96, 247, 191, 138, 24, 138, 96, 113, @@ -29,17 +29,17 @@ describe('Prefixer', () => { ); // Test digest derivation from inception ked - let vs = versify(Ident.KERI, Versionage, Serials.JSON, 0); - let sn = 0; - let ilk = Ilks.icp; - let sith = '1'; - let keys = [new Prefixer({ raw: verkey, code: MtrDex.Ed25519 }).qb64]; - let nxt = ''; - let toad = 0; - let wits = new Array(); - let cnfg = new Array(); + const vs = versify(Ident.KERI, Versionage, Serials.JSON, 0); + const sn = 0; + const ilk = Ilks.icp; + const sith = '1'; + const keys = [new Prefixer({ raw: verkey, code: MtrDex.Ed25519 }).qb64]; + const nxt = ''; + const toad = 0; + const wits = new Array(); + const cnfg = new Array(); - let ked = { + const ked = { v: vs, // version string i: '', // qb64 prefix s: sn.toString(16), // hex string no leading zeros lowercase diff --git a/test/core/saider.test.ts b/test/core/saider.test.ts index 9b55325c..542e022a 100644 --- a/test/core/saider.test.ts +++ b/test/core/saider.test.ts @@ -14,12 +14,12 @@ describe('Saider', () => { it('should create Saidified dicts', async () => { await libsodium.ready; - let kind = Serials.JSON; - let code = MtrDex.Blake3_256; + const kind = Serials.JSON; + const code = MtrDex.Blake3_256; - let vs = versify(Ident.KERI, Versionage, kind, 0); // vaccuous size == 0 + const vs = versify(Ident.KERI, Versionage, kind, 0); // vaccuous size == 0 assert.equal(vs, 'KERI10JSON000000_'); - let sad4 = { + const sad4 = { v: vs, t: 'rep', d: '', // vacuous said @@ -32,7 +32,7 @@ describe('Saider', () => { role: 'Founder', } as Dict, } as Dict; - let saider = new Saider({}, sad4); // default version string code, kind, and label + const saider = new Saider({}, sad4); // default version string code, kind, and label assert.equal(saider.code, code); assert.equal( saider.qb64, diff --git a/test/core/salter.test.ts b/test/core/salter.test.ts index e921c405..1802d9ce 100644 --- a/test/core/salter.test.ts +++ b/test/core/salter.test.ts @@ -11,7 +11,7 @@ describe('Salter', () => { assert.notEqual(salter, null); assert.equal(salter.qb64.length, 24); - let salt = new Uint8Array([ + const salt = new Uint8Array([ 146, 78, 142, 186, 189, 77, 130, 3, 232, 248, 186, 197, 8, 0, 73, 182, ]); @@ -37,8 +37,8 @@ describe('Salter', () => { describe('Salter.signer', () => { it('should return a signer', async () => { - let salter = new Salter({ qb64: '0ACSTo66vU2CA-j4usUIAEm2' }); - let signer = salter.signer(); + const salter = new Salter({ qb64: '0ACSTo66vU2CA-j4usUIAEm2' }); + const signer = salter.signer(); assert.notEqual(signer, null); assert.equal( signer.verfer.qb64, diff --git a/test/core/serder.test.ts b/test/core/serder.test.ts index 679b69ef..1b489e07 100644 --- a/test/core/serder.test.ts +++ b/test/core/serder.test.ts @@ -15,7 +15,7 @@ import { Prefixer } from '../../src/keri/core/prefixer'; describe('deversify', () => { it('should parse a KERI event version string', async () => { - let [, kind, version, size] = deversify('KERI10JSON00011c_'); + const [, kind, version, size] = deversify('KERI10JSON00011c_'); assert.equal(kind, Serials.JSON); assert.deepStrictEqual(version, new Version(1, 0)); assert.equal(size, '00011c'); @@ -26,39 +26,39 @@ describe('Serder', () => { it('should create KERI events from dicts', async () => { await libsodium.ready; - let sith = 1; - let nsith = 1; - let sn = 0; - let toad = 0; + const sith = 1; + const nsith = 1; + const sn = 0; + const toad = 0; - let raw = new Uint8Array([ + const raw = new Uint8Array([ 5, 170, 143, 45, 83, 154, 233, 250, 85, 156, 2, 156, 155, 8, 72, 117, ]); - let salter = new Salter({ raw: raw }); - let skp0 = salter.signer( + const salter = new Salter({ raw: raw }); + const skp0 = salter.signer( MtrDex.Ed25519_Seed, true, 'A', Tier.low, true ); - let keys = [skp0.verfer.qb64]; + const keys = [skp0.verfer.qb64]; - let skp1 = salter.signer( + const skp1 = salter.signer( MtrDex.Ed25519_Seed, true, 'N', Tier.low, true ); - let ndiger = new Diger({}, skp1.verfer.qb64b); - let nxt = [ndiger.qb64]; + const ndiger = new Diger({}, skp1.verfer.qb64b); + const nxt = [ndiger.qb64]; assert.deepStrictEqual(nxt, [ 'EAKUR-LmLHWMwXTLWQ1QjxHrihBmwwrV2tYaSG7hOrWj', ]); - let ked0 = { + const ked0 = { v: 'KERI10JSON000000_', t: Ilks.icp, d: '', @@ -74,7 +74,7 @@ describe('Serder', () => { a: [], } as Dict; - let serder = new Serder(ked0); + const serder = new Serder(ked0); assert.equal( serder.raw, '{"v":"KERI10JSON0000d3_","t":"icp","d":"","i":"","s":"0","kt":"1","k":' + diff --git a/test/core/signer.test.ts b/test/core/signer.test.ts index b0286add..439a08b7 100644 --- a/test/core/signer.test.ts +++ b/test/core/signer.test.ts @@ -9,7 +9,7 @@ describe('Signer', () => { it('should sign things', async () => { await libsodium.ready; - let signer = new Signer({}); // defaults provide Ed25519 signer Ed25519 verfer + const signer = new Signer({}); // defaults provide Ed25519 signer Ed25519 verfer assert.equal(signer.code, MtrDex.Ed25519_Seed); assert.equal(signer.raw.length, Matter._rawSize(signer.code)); assert.equal(signer.verfer.code, MtrDex.Ed25519); @@ -18,12 +18,12 @@ describe('Signer', () => { Matter._rawSize(signer.verfer.code) ); - let ser = b('abcdefghijklmnopqrstuvwxyz0123456789'); + const ser = b('abcdefghijklmnopqrstuvwxyz0123456789'); - let cigar = signer.sign(ser); + const cigar = signer.sign(ser); assert.equal(cigar.code, MtrDex.Ed25519_Sig); assert.equal(cigar.raw.length, Matter._rawSize(cigar.code)); - let result = signer.verfer.verify(cigar.raw, ser); + const result = signer.verfer.verify(cigar.raw, ser); assert.equal(result, true); }); }); diff --git a/test/core/vdring.test.ts b/test/core/vdring.test.ts index fbee01a1..4cbe81f7 100644 --- a/test/core/vdring.test.ts +++ b/test/core/vdring.test.ts @@ -30,7 +30,7 @@ describe('vdr', () => { it('should fail on NB config with backers', async () => { await libsodium.ready; - let cnfg = ['NB']; + const cnfg = ['NB']; assert.throws( () => { vdr.incept({ @@ -103,7 +103,7 @@ describe('vdr', () => { it('should allow optional toad and no backers', async () => { await libsodium.ready; - let actual = vdr.incept({ + const actual = vdr.incept({ pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', }); @@ -122,7 +122,7 @@ describe('vdr', () => { it('should allow optional toad and backers', async () => { await libsodium.ready; - let actual = vdr.incept({ + const actual = vdr.incept({ pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', baks: ['a backer'], diff --git a/test/core/verfer.test.ts b/test/core/verfer.test.ts index 3669e69d..b75f0639 100644 --- a/test/core/verfer.test.ts +++ b/test/core/verfer.test.ts @@ -5,9 +5,9 @@ import { Verfer } from '../../src/keri/core/verfer'; import secp256r1 from 'ecdsa-secp256r1'; function base64ToUint8Array(base64: string) { - var binaryString = atob(base64); - var bytes = new Uint8Array(binaryString.length); - for (var i = 0; i < binaryString.length; i++) { + const binaryString = atob(base64); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { bytes[i] = binaryString.charCodeAt(i); } return new Uint8Array(bytes.buffer); @@ -16,11 +16,11 @@ function base64ToUint8Array(base64: string) { describe('Verfer', () => { it('should verify digests', async () => { await libsodium.ready; - let seed = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); + const seed = libsodium.randombytes_buf(libsodium.crypto_sign_SEEDBYTES); const keypair = libsodium.crypto_sign_seed_keypair(seed); - let verkey = keypair.publicKey; - let sigkey = keypair.privateKey; + const verkey = keypair.publicKey; + const sigkey = keypair.privateKey; let verfer = new Verfer({ raw: verkey, code: MtrDex.Ed25519N }); assert.notEqual(verfer, null); @@ -28,9 +28,9 @@ describe('Verfer', () => { assert.deepStrictEqual(verfer.raw, verkey); assert.deepStrictEqual(verfer.code, MtrDex.Ed25519N); - let ser = 'abcdefghijklmnopqrstuvwxyz0123456789'; + const ser = 'abcdefghijklmnopqrstuvwxyz0123456789'; - let sig = libsodium.crypto_sign_detached(ser, sigkey); + const sig = libsodium.crypto_sign_detached(ser, sigkey); assert.equal(verfer.verify(sig, ser), true); @@ -57,9 +57,9 @@ describe('Verfer', () => { assert.deepStrictEqual(verfer.raw, publicKey); assert.deepStrictEqual(verfer.code, MtrDex.ECDSA_256r1); - let ser = 'abcdefghijklmnopqrstuvwxyz0123456789'; + const ser = 'abcdefghijklmnopqrstuvwxyz0123456789'; - let sig = privateKey.sign(ser); + const sig = privateKey.sign(ser); assert.equal(verfer.verify(sig, ser), true); @@ -76,7 +76,7 @@ describe('Verfer', () => { ); }); it('should not verify secp256k1', async () => { - let publicKey = new Uint8Array([ + const publicKey = new Uint8Array([ 2, 79, 93, 30, 107, 249, 254, 237, 205, 87, 8, 149, 203, 214, 36, 187, 162, 251, 58, 206, 241, 203, 27, 76, 236, 37, 189, 148, 240, 178, 204, 133, 31, diff --git a/test/end/ending.test.ts b/test/end/ending.test.ts index ae7f971b..bea7bf21 100644 --- a/test/end/ending.test.ts +++ b/test/end/ending.test.ts @@ -11,43 +11,43 @@ describe('ending_signature_designature', () => { it('should create and parse signature headers', async () => { await libsodium.ready; - let name = 'Hilga'; - let temp = true; + const name = 'Hilga'; + const temp = true; - let salter = new Salter({ raw: b('0123456789abcdef') }); - let signer0 = salter.signer( + const salter = new Salter({ raw: b('0123456789abcdef') }); + const signer0 = salter.signer( MtrDex.Ed25519_Seed, true, `${name}00`, Tier.low, temp ); - let signer1 = salter.signer( + const signer1 = salter.signer( MtrDex.Ed25519_Seed, true, `${name}01`, Tier.low, temp ); - let signer2 = salter.signer( + const signer2 = salter.signer( MtrDex.Ed25519_Seed, true, `${name}02`, Tier.low, temp ); - let signers = [signer0, signer1, signer2]; + const signers = [signer0, signer1, signer2]; - let text = b( + const text = b( '{"seid":"BA89hKezugU2LFKiFVbitoHAxXqJh6HQ8Rn9tH7fxd68","name":"wit0","dts":"2021-01-01T00' + ':00:00.000000+00:00","scheme":"http","host":"localhost","port":8080,"path":"/witness"}' ); - let sigers = Array.from(signers, (signer, idx) => + const sigers = Array.from(signers, (signer, idx) => signer.sign(text, idx) ); - let pre = 'EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-'; // Hab.pre from KERIpy test - let digest = pre; + const pre = 'EGqHykT1gVyuWxsVW6LUUsz_KtLJGYMi_SrohInwvjC-'; // Hab.pre from KERIpy test + const digest = pre; let signage = new Signage(sigers); let header = signature([signage]); @@ -62,9 +62,9 @@ describe('ending_signature_designature', () => { signage = signages[0]; assert.equal(signage.markers.size, 3); signage.markers.forEach((item: string | Siger | Cigar, tag: string) => { - let marker = item as Siger; - let idx = parseInt(tag); - let siger = sigers[idx] as Siger; + const marker = item as Siger; + const idx = parseInt(tag); + const siger = sigers[idx] as Siger; assert.equal(marker.qb64, siger.qb64); assert.equal(parseInt(tag), siger.index); }); @@ -87,14 +87,14 @@ describe('ending_signature_designature', () => { assert.equal(signage.markers.size, 3); signage.markers.forEach((item: string | Siger | Cigar, tag: string) => { - let marker = item as Siger; - let idx = parseInt(tag); - let siger = sigers[idx] as Siger; + const marker = item as Siger; + const idx = parseInt(tag); + const siger = sigers[idx] as Siger; assert.equal(marker.qb64, siger.qb64); assert.equal(parseInt(tag), siger.index); }); - let cigars = Array.from(signers, (signer) => signer.sign(text)); + const cigars = Array.from(signers, (signer) => signer.sign(text)); signage = new Signage(cigars); header = signature([signage]); assert.equal(header.has('Signature'), true); @@ -108,7 +108,7 @@ describe('ending_signature_designature', () => { assert.equal(signage.indexed, false); assert.equal(signage.markers.size, 3); signage.markers.forEach((marker: Cigar, tag: string) => { - let cigar = cigars.find((cigar) => cigar.verfer!.qb64 == tag); + const cigar = cigars.find((cigar) => cigar.verfer!.qb64 == tag); assert.notEqual(cigar, undefined); assert.equal(marker.qb64, cigar!.qb64); assert.equal(tag, cigar!.verfer!.qb64); @@ -138,9 +138,9 @@ describe('ending_signature_designature', () => { assert.equal(signage.kind, 'CESR'); assert.equal(signage.markers.size, 3); signage.markers.forEach((item: string | Siger | Cigar, tag: string) => { - let marker = item as Siger; - let idx = parseInt(tag); - let siger = sigers[idx] as Siger; + const marker = item as Siger; + const idx = parseInt(tag); + const siger = sigers[idx] as Siger; assert.equal(marker.qb64, siger.qb64); assert.equal(parseInt(tag), siger.index); }); @@ -151,7 +151,7 @@ describe('ending_signature_designature', () => { assert.equal(signage.kind, 'CESR'); assert.equal(signage.markers.size, 3); signage.markers.forEach((marker: Cigar, tag: string) => { - let cigar = cigars.find((cigar) => cigar.verfer!.qb64 == tag); + const cigar = cigars.find((cigar) => cigar.verfer!.qb64 == tag); assert.notEqual(cigar, undefined); assert.equal(marker.qb64, cigar!.qb64); assert.equal(tag, cigar!.verfer!.qb64); From 15c82590f2ef9c1e8ae51e9d6e2eb6e2c9d3bd78 Mon Sep 17 00:00:00 2001 From: lenkan Date: Fri, 1 Dec 2023 15:45:50 +0100 Subject: [PATCH 115/186] add npm ci, linting, format check to workflow --- .github/workflows/main.yml | 18 +++- .../integration-scripts/credentials.test.ts | 20 +++-- .../integration-scripts/singlesig-ixn.test.ts | 42 ++++++--- .../integration-scripts/singlesig-rot.test.ts | 42 ++++++--- .../test-setup-clients.test.ts | 24 +++--- .../test-setup-single-client.test.ts | 62 +++++++++----- .../integration-scripts/utils/resolve-env.ts | 6 +- .../integration-scripts/utils/test-setup.ts | 85 ++++++++++++++----- .../integration-scripts/utils/test-util.ts | 10 ++- package.json | 3 +- src/keri/app/controller.ts | 12 ++- src/keri/app/grouping.ts | 3 +- src/keri/app/habery.ts | 3 +- src/keri/core/decrypter.ts | 6 +- src/keri/core/eventing.ts | 5 +- src/keri/core/indexer.ts | 12 ++- src/keri/core/manager.ts | 5 +- src/keri/core/matter.ts | 4 +- src/keri/core/tholder.ts | 5 +- test/app/grouping.test.ts | 9 +- test/core/encrypter.test.ts | 3 +- test/core/manager.test.ts | 6 +- 22 files changed, 269 insertions(+), 116 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ff4ff131..d0f11fe5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,13 +27,23 @@ jobs: node-version: '18.12.1' cache: 'npm' - - name: build + - name: Install dependencies run: | npm cache clean --force npm set registry https://registry.npmjs.org/ - npm i - npm test -- --coverage=true - npm run build + npm ci + + - name: Check formatting + run: npm run pretty:check + + - name: Lint + run: npm run lint + + - name: Test + run: npm test -- --coverage=true + + - name: Build + run: npm run build - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v3 diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index d49db9ae..d9712ce4 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -115,10 +115,12 @@ test('credentials', async () => { const verifierAidName = 'verifier'; // Create two identifiers, one for each client - const issuerIcpRes = await issuerClient.identifiers().create(issuerAidName, { - toad: 3, - wits: [...KLI_WITNESS_DEMO_PREFIXES], - }); + const issuerIcpRes = await issuerClient + .identifiers() + .create(issuerAidName, { + toad: 3, + wits: [...KLI_WITNESS_DEMO_PREFIXES], + }); let issOp = await issuerIcpRes.op(); while (!issOp['done']) { issOp = await issuerClient.operations().get(issOp.name); @@ -131,10 +133,12 @@ test('credentials', async () => { .addEndRole(issuerAidName, 'agent', issuerClient!.agent!.pre); console.log("Issuer's AID:", issuerAID); - const holderIcpRes = await holderClient.identifiers().create(holderAidName, { - toad: 3, - wits: [...KLI_WITNESS_DEMO_PREFIXES], - }); + const holderIcpRes = await holderClient + .identifiers() + .create(holderAidName, { + toad: 3, + wits: [...KLI_WITNESS_DEMO_PREFIXES], + }); let hldOp = await holderIcpRes.op(); while (!hldOp['done']) { hldOp = await holderClient.operations().get(hldOp.name); diff --git a/examples/integration-scripts/singlesig-ixn.test.ts b/examples/integration-scripts/singlesig-ixn.test.ts index 20df9484..1986ba6a 100644 --- a/examples/integration-scripts/singlesig-ixn.test.ts +++ b/examples/integration-scripts/singlesig-ixn.test.ts @@ -1,6 +1,10 @@ -import { EventResult, SignifyClient } from "signify-ts"; -import { getOrCreateClients, getOrCreateContact, getOrCreateIdentifier } from "./utils/test-setup"; -import { waitOperation } from "./utils/test-util"; +import { EventResult, SignifyClient } from 'signify-ts'; +import { + getOrCreateClients, + getOrCreateContact, + getOrCreateIdentifier, +} from './utils/test-setup'; +import { waitOperation } from './utils/test-util'; let client1: SignifyClient, client2: SignifyClient; let name1_id: string, name1_oobi: string; @@ -10,20 +14,20 @@ beforeAll(async () => { [client1, client2] = await getOrCreateClients(2); }); beforeAll(async () => { - [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, "name1"); + [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, 'name1'); }); beforeAll(async () => { - contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); + contact1_id = await getOrCreateContact(client2, 'contact1', name1_oobi); }); interface KeyState { i: string; s: string; - [property: string]: any + [property: string]: any; } -describe("singlesig-ixn", () => { - test("step1", async () => { +describe('singlesig-ixn', () => { + test('step1', async () => { expect(name1_id).toEqual(contact1_id); const keystate1 = await client1.keyStates().get(name1_id); @@ -35,28 +39,38 @@ describe("singlesig-ixn", () => { // local and remote keystate sequence match expect(keystate1[0].s).toEqual(keystate2[0].s); }); - test("ixn1", async () => { + test('ixn1', async () => { // local keystate before ixn - const keystate0: KeyState = (await client1.keyStates().get(name1_id)).at(0); + const keystate0: KeyState = ( + await client1.keyStates().get(name1_id) + ).at(0); expect(keystate0).not.toBeNull(); // ixn - const result: EventResult = await client1.identifiers().interact("name1", {}); + const result: EventResult = await client1 + .identifiers() + .interact('name1', {}); await waitOperation(client1, await result.op()); // local keystate after ixn - const keystate1: KeyState = (await client1.keyStates().get(name1_id)).at(0); + const keystate1: KeyState = ( + await client1.keyStates().get(name1_id) + ).at(0); expect(parseInt(keystate1.s)).toBeGreaterThan(0); // sequence has incremented expect(parseInt(keystate1.s)).toEqual(parseInt(keystate0.s) + 1); // remote keystate after ixn - const keystate2: KeyState = (await client2.keyStates().get(contact1_id)).at(0); + const keystate2: KeyState = ( + await client2.keyStates().get(contact1_id) + ).at(0); // remote keystate is one behind expect(parseInt(keystate2.s)).toEqual(parseInt(keystate1.s) - 1); // refresh remote keystate - let op = await client2.keyStates().query(contact1_id, parseInt(keystate1.s), undefined); + let op = await client2 + .keyStates() + .query(contact1_id, parseInt(keystate1.s), undefined); op = await waitOperation(client2, op); const keystate3: KeyState = op.response; // local and remote keystate match diff --git a/examples/integration-scripts/singlesig-rot.test.ts b/examples/integration-scripts/singlesig-rot.test.ts index 3f88fb92..d5a7af91 100644 --- a/examples/integration-scripts/singlesig-rot.test.ts +++ b/examples/integration-scripts/singlesig-rot.test.ts @@ -1,6 +1,10 @@ -import { EventResult, RotateIdentifierArgs, SignifyClient } from "signify-ts"; -import { getOrCreateClients, getOrCreateContact, getOrCreateIdentifier } from "./utils/test-setup"; -import { waitOperation } from "./utils/test-util"; +import { EventResult, RotateIdentifierArgs, SignifyClient } from 'signify-ts'; +import { + getOrCreateClients, + getOrCreateContact, + getOrCreateIdentifier, +} from './utils/test-setup'; +import { waitOperation } from './utils/test-util'; let client1: SignifyClient, client2: SignifyClient; let name1_id: string, name1_oobi: string; @@ -10,10 +14,10 @@ beforeAll(async () => { [client1, client2] = await getOrCreateClients(2); }); beforeAll(async () => { - [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, "name1"); + [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, 'name1'); }); beforeAll(async () => { - contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); + contact1_id = await getOrCreateContact(client2, 'contact1', name1_oobi); }); interface KeyState { @@ -21,11 +25,11 @@ interface KeyState { s: string; k: string[]; n: string[]; - [property: string]: any + [property: string]: any; } -describe("singlesig-rot", () => { - test("step1", async () => { +describe('singlesig-rot', () => { + test('step1', async () => { expect(name1_id).toEqual(contact1_id); const keystate1 = await client1.keyStates().get(name1_id); @@ -37,20 +41,26 @@ describe("singlesig-rot", () => { // local and remote keystate sequence match expect(keystate1[0].s).toEqual(keystate2[0].s); }); - test("rot1", async () => { + test('rot1', async () => { // local keystate before rot - const keystate0: KeyState = (await client1.keyStates().get(name1_id)).at(0); + const keystate0: KeyState = ( + await client1.keyStates().get(name1_id) + ).at(0); expect(keystate0).not.toBeNull(); expect(keystate0.k).toHaveLength(1); expect(keystate0.n).toHaveLength(1); // rot const args: RotateIdentifierArgs = {}; - const result: EventResult = await client1.identifiers().rotate("name1", args); + const result: EventResult = await client1 + .identifiers() + .rotate('name1', args); await waitOperation(client1, await result.op()); // local keystate after rot - const keystate1: KeyState = (await client1.keyStates().get(name1_id)).at(0); + const keystate1: KeyState = ( + await client1.keyStates().get(name1_id) + ).at(0); expect(parseInt(keystate1.s)).toBeGreaterThan(0); // sequence has incremented expect(parseInt(keystate1.s)).toEqual(parseInt(keystate0.s) + 1); @@ -60,12 +70,16 @@ describe("singlesig-rot", () => { expect(keystate1.n[0]).not.toEqual(keystate0.n[0]); // remote keystate after rot - const keystate2: KeyState = (await client2.keyStates().get(contact1_id)).at(0); + const keystate2: KeyState = ( + await client2.keyStates().get(contact1_id) + ).at(0); // remote keystate is one behind expect(parseInt(keystate2.s)).toEqual(parseInt(keystate1.s) - 1); // refresh remote keystate - let op = await client2.keyStates().query(contact1_id, parseInt(keystate1.s), undefined); + let op = await client2 + .keyStates() + .query(contact1_id, parseInt(keystate1.s), undefined); op = await waitOperation(client2, op); const keystate3: KeyState = op.response; // local and remote keystate match diff --git a/examples/integration-scripts/test-setup-clients.test.ts b/examples/integration-scripts/test-setup-clients.test.ts index 29540239..906f8528 100644 --- a/examples/integration-scripts/test-setup-clients.test.ts +++ b/examples/integration-scripts/test-setup-clients.test.ts @@ -1,29 +1,33 @@ -import { SignifyClient } from "signify-ts"; -import { getOrCreateClients, getOrCreateContact, getOrCreateIdentifier } from "./utils/test-setup"; +import { SignifyClient } from 'signify-ts'; +import { + getOrCreateClients, + getOrCreateContact, + getOrCreateIdentifier, +} from './utils/test-setup'; let client1: SignifyClient, client2: SignifyClient; let name1_id: string, name1_oobi: string; let name2_id: string, name2_oobi: string; -let contact1_id: string, contact2_id: string;; +let contact1_id: string, contact2_id: string; beforeAll(async () => { // create two clients with random secrets [client1, client2] = await getOrCreateClients(2); }); beforeAll(async () => { - [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, "name1"); - [name2_id, name2_oobi] = await getOrCreateIdentifier(client2, "name2"); + [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, 'name1'); + [name2_id, name2_oobi] = await getOrCreateIdentifier(client2, 'name2'); }); beforeAll(async () => { - contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); - contact2_id = await getOrCreateContact(client1, "contact2", name2_oobi); + contact1_id = await getOrCreateContact(client2, 'contact1', name1_oobi); + contact2_id = await getOrCreateContact(client1, 'contact2', name2_oobi); }); -describe("test-setup-clients", () => { - test("step1", async () => { +describe('test-setup-clients', () => { + test('step1', async () => { expect(name1_id).toEqual(contact1_id); }); - test("step2", async () => { + test('step2', async () => { expect(name2_id).toEqual(contact2_id); }); }); diff --git a/examples/integration-scripts/test-setup-single-client.test.ts b/examples/integration-scripts/test-setup-single-client.test.ts index f8be928f..32bb084b 100644 --- a/examples/integration-scripts/test-setup-single-client.test.ts +++ b/examples/integration-scripts/test-setup-single-client.test.ts @@ -1,39 +1,59 @@ -import { SignifyClient } from "signify-ts"; -import { getOrCreateClients, getOrCreateIdentifier } from "./utils/test-setup"; -import { resolveEnvironment } from "./utils/resolve-env"; +import { SignifyClient } from 'signify-ts'; +import { getOrCreateClients, getOrCreateIdentifier } from './utils/test-setup'; +import { resolveEnvironment } from './utils/resolve-env'; let client: SignifyClient; let name1_id: string, name1_oobi: string; beforeAll(async () => { // Create client with pre-defined secret. Allows working with known identifiers - [client] = await getOrCreateClients(1, ["0ADF2TpptgqcDE5IQUF1HeTp"]); + [client] = await getOrCreateClients(1, ['0ADF2TpptgqcDE5IQUF1HeTp']); }); beforeAll(async () => { - [name1_id, name1_oobi] = await getOrCreateIdentifier(client, "name1"); + [name1_id, name1_oobi] = await getOrCreateIdentifier(client, 'name1'); }); -describe("test-setup-single-client", () => { - test("step1", async () => { - expect(client.agent?.pre).toEqual("EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc"); - expect(client.controller?.pre).toEqual("EB3UGWwIMq7ppzcQ697ImQIuXlBG5jzh-baSx-YG3-tY"); +describe('test-setup-single-client', () => { + test('step1', async () => { + expect(client.agent?.pre).toEqual( + 'EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc' + ); + expect(client.controller?.pre).toEqual( + 'EB3UGWwIMq7ppzcQ697ImQIuXlBG5jzh-baSx-YG3-tY' + ); }); - test("step2", async () => { + test('step2', async () => { const env = resolveEnvironment(); - const oobi = await client.oobis().get("name1", "witness"); + const oobi = await client.oobis().get('name1', 'witness'); expect(oobi.oobis).toHaveLength(3); switch (env.preset) { - case "local": - expect(name1_oobi).toEqual(`http://localhost:3902/oobi/${name1_id}/agent/EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc`); - expect(oobi.oobis[0]).toEqual(`http://localhost:5642/oobi/${name1_id}/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha`); - expect(oobi.oobis[1]).toEqual(`http://localhost:5643/oobi/${name1_id}/witness/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM`); - expect(oobi.oobis[2]).toEqual(`http://localhost:5644/oobi/${name1_id}/witness/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX`); + case 'local': + expect(name1_oobi).toEqual( + `http://localhost:3902/oobi/${name1_id}/agent/EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc` + ); + expect(oobi.oobis[0]).toEqual( + `http://localhost:5642/oobi/${name1_id}/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha` + ); + expect(oobi.oobis[1]).toEqual( + `http://localhost:5643/oobi/${name1_id}/witness/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM` + ); + expect(oobi.oobis[2]).toEqual( + `http://localhost:5644/oobi/${name1_id}/witness/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX` + ); break; - case "docker": - expect(name1_oobi).toEqual(`http://keria:3902/oobi/${name1_id}/agent/EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc`); - expect(oobi.oobis[0]).toEqual(`http://witness-demo:5642/oobi/${name1_id}/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha`); - expect(oobi.oobis[1]).toEqual(`http://witness-demo:5643/oobi/${name1_id}/witness/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM`); - expect(oobi.oobis[2]).toEqual(`http://witness-demo:5644/oobi/${name1_id}/witness/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX`); + case 'docker': + expect(name1_oobi).toEqual( + `http://keria:3902/oobi/${name1_id}/agent/EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc` + ); + expect(oobi.oobis[0]).toEqual( + `http://witness-demo:5642/oobi/${name1_id}/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha` + ); + expect(oobi.oobis[1]).toEqual( + `http://witness-demo:5643/oobi/${name1_id}/witness/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM` + ); + expect(oobi.oobis[2]).toEqual( + `http://witness-demo:5644/oobi/${name1_id}/witness/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX` + ); break; } }); diff --git a/examples/integration-scripts/utils/resolve-env.ts b/examples/integration-scripts/utils/resolve-env.ts index 9cb1cf79..d41ce4d1 100644 --- a/examples/integration-scripts/utils/resolve-env.ts +++ b/examples/integration-scripts/utils/resolve-env.ts @@ -9,9 +9,9 @@ export interface TestEnvironment { witnessIds: string[]; } -const WAN = "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha"; -const WIL = "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM"; -const WES = "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX"; +const WAN = 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'; +const WIL = 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM'; +const WES = 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX'; export function resolveEnvironment( input?: TestEnvironmentPreset diff --git a/examples/integration-scripts/utils/test-setup.ts b/examples/integration-scripts/utils/test-setup.ts index 0dc253f6..ea9760f1 100644 --- a/examples/integration-scripts/utils/test-setup.ts +++ b/examples/integration-scripts/utils/test-setup.ts @@ -1,6 +1,13 @@ -import { CreateIdentiferArgs, EventResult, SignifyClient, Tier, randomPasscode, ready } from "signify-ts"; -import { resolveEnvironment } from "./resolve-env"; -import { waitOperation } from "./test-util"; +import { + CreateIdentiferArgs, + EventResult, + SignifyClient, + Tier, + randomPasscode, + ready, +} from 'signify-ts'; +import { resolveEnvironment } from './resolve-env'; +import { waitOperation } from './test-util'; /** * Connect or boot a number of SignifyClient instances @@ -14,25 +21,32 @@ import { waitOperation } from "./test-util"; * Launch jest from shell with pre-defined secrets * $ SIGNIFY_SECRETS="0ACqshJKkJ7DDXcaDuwnmI8s,0ABqicvyicXGvIVg6Ih-dngE" npx jest ./tests */ -export async function getOrCreateClients(count: number, brans: string[] | undefined = undefined): Promise { +export async function getOrCreateClients( + count: number, + brans: string[] | undefined = undefined +): Promise { const tasks: Promise[] = []; - const secrets = process.env["SIGNIFY_SECRETS"]?.split(","); + const secrets = process.env['SIGNIFY_SECRETS']?.split(','); for (let i = 0; i < count; i++) { - tasks.push(getOrCreateClient(brans?.at(i) ?? secrets?.at(i) ?? undefined)); + tasks.push( + getOrCreateClient(brans?.at(i) ?? secrets?.at(i) ?? undefined) + ); } const clients: SignifyClient[] = await Promise.all(tasks); - console.log(`SIGNIFY_SECRETS="${clients.map(i => i.bran).join(",")}"`); + console.log(`SIGNIFY_SECRETS="${clients.map((i) => i.bran).join(',')}"`); return clients; } /** * Connect or boot a SignifyClient instance */ -export async function getOrCreateClient(bran: string | undefined = undefined): Promise { +export async function getOrCreateClient( + bran: string | undefined = undefined +): Promise { const env = resolveEnvironment(); await ready(); bran ??= randomPasscode(); - bran = bran.padEnd(21, "_"); + bran = bran.padEnd(21, '_'); const client = new SignifyClient(env.url, bran, Tier.low, env.bootUrl); try { await client.connect(); @@ -41,7 +55,10 @@ export async function getOrCreateClient(bran: string | undefined = undefined): P if (!res.ok) throw new Error(); await client.connect(); } - console.log("client", { agent: client.agent?.pre, controller: client.controller.pre }); + console.log('client', { + agent: client.agent?.pre, + controller: client.controller.pre, + }); return client; } @@ -55,7 +72,11 @@ export async function getOrCreateClient(bran: string | undefined = undefined): P * }); * @see resolveEnvironment */ -export async function getOrCreateIdentifier(client: SignifyClient, name: string, kargs: CreateIdentiferArgs | undefined = undefined): Promise<[string, string]> { +export async function getOrCreateIdentifier( + client: SignifyClient, + name: string, + kargs: CreateIdentiferArgs | undefined = undefined +): Promise<[string, string]> { let id: any = undefined; try { const identfier = await client.identifiers().get(name); @@ -65,22 +86,26 @@ export async function getOrCreateIdentifier(client: SignifyClient, name: string, const env = resolveEnvironment(); kargs ??= { toad: env.witnessIds.length, - wits: env.witnessIds + wits: env.witnessIds, }; - const result: EventResult = await client.identifiers().create(name, kargs); + const result: EventResult = await client + .identifiers() + .create(name, kargs); let op = await result.op(); op = await waitOperation(client, op); // console.log("identifiers.create", op); id = op.response.i; } const eid = client.agent?.pre!; - if (!await hasEndRole(client, name, "agent", eid)) { - const result: EventResult = await client.identifiers().addEndRole(name, "agent", eid); + if (!(await hasEndRole(client, name, 'agent', eid))) { + const result: EventResult = await client + .identifiers() + .addEndRole(name, 'agent', eid); let op = await result.op(); op = await waitOperation(client, op); // console.log("identifiers.addEndRole", op); } - const oobi = await client.oobis().get(name, "agent"); + const oobi = await client.oobis().get(name, 'agent'); const result: [string, string] = [id, oobi.oobis[0]]; console.log(name, result); return result; @@ -89,9 +114,16 @@ export async function getOrCreateIdentifier(client: SignifyClient, name: string, /** * Get list of end role authorizations for a Keri idenfitier */ -export async function getEndRoles(client: SignifyClient, alias: string, role?: string): Promise { - const path = (role !== undefined) ? `/identifiers/${alias}/endroles/${role}` : `/identifiers/${alias}/endroles`; - const response: Response = await client.fetch(path, "GET", null); +export async function getEndRoles( + client: SignifyClient, + alias: string, + role?: string +): Promise { + const path = + role !== undefined + ? `/identifiers/${alias}/endroles/${role}` + : `/identifiers/${alias}/endroles`; + const response: Response = await client.fetch(path, 'GET', null); if (!response.ok) throw new Error(await response.text()); const result = await response.json(); // console.log("getEndRoles", result); @@ -101,7 +133,12 @@ export async function getEndRoles(client: SignifyClient, alias: string, role?: s /** * Test if end role is authorized for a Keri identifier */ -export async function hasEndRole(client: SignifyClient, alias: string, role: string, eid: string): Promise { +export async function hasEndRole( + client: SignifyClient, + alias: string, + role: string, + eid: string +): Promise { const list = await getEndRoles(client, alias, role); for (const i of list) { if (i.role === role && i.eid === eid) { @@ -120,8 +157,12 @@ export async function hasEndRole(client: SignifyClient, alias: string, role: str * contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); * }); */ -export async function getOrCreateContact(client: SignifyClient, name: string, oobi: string): Promise { - const list = await client.contacts().list(undefined, "alias", `^${name}$`); +export async function getOrCreateContact( + client: SignifyClient, + name: string, + oobi: string +): Promise { + const list = await client.contacts().list(undefined, 'alias', `^${name}$`); // console.log("contacts.list", list); if (list.length > 0) { const contact = list[0]; diff --git a/examples/integration-scripts/utils/test-util.ts b/examples/integration-scripts/utils/test-util.ts index df0f7505..bfd2d821 100644 --- a/examples/integration-scripts/utils/test-util.ts +++ b/examples/integration-scripts/utils/test-util.ts @@ -1,7 +1,7 @@ -import { SignifyClient } from "signify-ts"; +import { SignifyClient } from 'signify-ts'; export function sleep(ms: number): Promise { - return new Promise(resolve => { + return new Promise((resolve) => { setTimeout(resolve, ms); }); } @@ -9,7 +9,11 @@ export function sleep(ms: number): Promise { /** * Poll for operation to become completed */ -export async function waitOperation(client: SignifyClient, op: any, retries: number | undefined = undefined): Promise { +export async function waitOperation( + client: SignifyClient, + op: any, + retries: number | undefined = undefined +): Promise { const WAIT = 500; // 0.5 seconds retries ??= 10; // default 10 retries or 5 seconds while (retries-- > 0) { diff --git a/package.json b/package.json index a75d79af..3275be3b 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "lint": "npx eslint src test examples/integration-scripts examples/scripts", "prepare": "npm run build", "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", - "pretty": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' 'examples/**/*.ts' --write" + "pretty": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' 'examples/**/*.ts' --write", + "pretty:check": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' 'examples/**/*.ts' --check" }, "name": "signify-ts", "author": "Phil Feairheller", diff --git a/src/keri/app/controller.ts b/src/keri/app/controller.ts index e9fdac06..af4c5c6a 100644 --- a/src/keri/app/controller.ts +++ b/src/keri/app/controller.ts @@ -113,7 +113,11 @@ export class Controller { this.salter = new Salter({ qb64: this.bran, tier: this.tier }); - const creator = new SaltyCreator(this.salter.qb64, this.tier, this.stem); + const creator = new SaltyCreator( + this.salter.qb64, + this.tier, + this.stem + ); this.signer = creator .create( @@ -209,7 +213,11 @@ export class Controller { const nsalter = new Salter({ qb64: nbran, tier: this.tier }); const nsigner = this.salter.signer(undefined, false); - const creator = new SaltyCreator(this.salter.qb64, this.tier, this.stem); + const creator = new SaltyCreator( + this.salter.qb64, + this.tier, + this.stem + ); const signer = creator .create( undefined, diff --git a/src/keri/app/grouping.ts b/src/keri/app/grouping.ts index 0de192c6..f9745499 100644 --- a/src/keri/app/grouping.ts +++ b/src/keri/app/grouping.ts @@ -82,10 +82,9 @@ export class Groups { sigs: sigs, gid: gid, smids: smids, - rmids: rmids + rmids: rmids, }; const res = await this.client.fetch(path, method, data); return await res.json(); } - } diff --git a/src/keri/app/habery.ts b/src/keri/app/habery.ts index 08da4b3e..3339a27b 100644 --- a/src/keri/app/habery.ts +++ b/src/keri/app/habery.ts @@ -76,7 +76,8 @@ export class Habery { } } let algo; - const salter = salt != undefined ? new Salter({ qb64: salt }) : undefined; + const salter = + salt != undefined ? new Salter({ qb64: salt }) : undefined; if (salt != undefined) { algo = Algos.salty; } else { diff --git a/src/keri/core/decrypter.ts b/src/keri/core/decrypter.ts index b1ca0538..9be6a1d4 100644 --- a/src/keri/core/decrypter.ts +++ b/src/keri/core/decrypter.ts @@ -64,7 +64,11 @@ export class Decrypter extends Matter { _x25519(cipher: Cipher, prikey: Uint8Array, transferable: boolean = false) { const pubkey = libsodium.crypto_scalarmult_base(prikey); - const plain = libsodium.crypto_box_seal_open(cipher.raw, pubkey, prikey); + const plain = libsodium.crypto_box_seal_open( + cipher.raw, + pubkey, + prikey + ); if (cipher.code == MtrDex.X25519_Cipher_Salt) { return new Salter({ qb64b: plain }); } else if (cipher.code == MtrDex.X25519_Cipher_Seed) { diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index ff4af89b..6daa175f 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -433,7 +433,10 @@ export function messagize( .qb64b ); atc = concat(atc, new TextEncoder().encode(seal[1].i)); - atc = concat(atc, new Seqner({sn: parseInt(seal[1].s)}).qb64b); + atc = concat( + atc, + new Seqner({ sn: parseInt(seal[1].s) }).qb64b + ); atc = concat(atc, new TextEncoder().encode(seal[1].d)); } else if (seal[0] == 'SealLast') { atc = concat( diff --git a/src/keri/core/indexer.ts b/src/keri/core/indexer.ts index a4f52b9c..8649ca55 100644 --- a/src/keri/core/indexer.ts +++ b/src/keri/core/indexer.ts @@ -43,7 +43,9 @@ export class IndexedSigCodex { Ed448_Big_Crt_Sig: string = '3B'; // Ed448 signature appears in current list only. has(prop: string): boolean { - const m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + const m = new Map( + Array.from(Object.entries(this), (v) => [v[1], v[0]]) + ); return m.has(prop); } } @@ -61,7 +63,9 @@ export class IndexedCurrentSigCodex { Ed448_Big_Crt_Sig: string = '3B'; // Ed448 signature appears in current list only. has(prop: string): boolean { - const m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + const m = new Map( + Array.from(Object.entries(this), (v) => [v[1], v[0]]) + ); return m.has(prop); } } @@ -77,7 +81,9 @@ export class IndexedBothSigCodex { Ed448_Big_Sig: string = '3A'; // Ed448 signature appears in both lists. has(prop: string): boolean { - const m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + const m = new Map( + Array.from(Object.entries(this), (v) => [v[1], v[0]]) + ); return m.has(prop); } } diff --git a/src/keri/core/manager.ts b/src/keri/core/manager.ts index 8742043f..dbbb8f2d 100644 --- a/src/keri/core/manager.ts +++ b/src/keri/core/manager.ts @@ -216,7 +216,10 @@ export function openManager(passcode: string, salt?: string) { } const bran = MtrDex.Salt_128 + 'A' + passcode.substring(0, 21); // qb64 salt for seed - const signer = new Salter({ qb64: bran }).signer(MtrDex.Ed25519_Seed, false); + const signer = new Salter({ qb64: bran }).signer( + MtrDex.Ed25519_Seed, + false + ); const seed = signer.qb64; const aeid = signer.verfer.qb64; // lest it remove encryption diff --git a/src/keri/core/matter.ts b/src/keri/core/matter.ts index 03e51b27..8abaedf7 100644 --- a/src/keri/core/matter.ts +++ b/src/keri/core/matter.ts @@ -7,7 +7,9 @@ import { Buffer } from 'buffer'; export class Codex { has(prop: string): boolean { - const m = new Map(Array.from(Object.entries(this), (v) => [v[1], v[0]])); + const m = new Map( + Array.from(Object.entries(this), (v) => [v[1], v[0]]) + ); return m.has(prop); } } diff --git a/src/keri/core/tholder.ts b/src/keri/core/tholder.ts index b6d18c0d..4221df25 100644 --- a/src/keri/core/tholder.ts +++ b/src/keri/core/tholder.ts @@ -80,7 +80,10 @@ export class Tholder { private _processLimen(limen: string) { const matter = new Matter({ qb64: limen }); if (NumDex.has(matter.code)) { - const number = new CesrNumber({ raw: matter.raw, code: matter.code }); + const number = new CesrNumber({ + raw: matter.raw, + code: matter.code, + }); this._processUnweighted(number.num); } else if (BexDex.has(matter.code)) { // TODO: Implement Bexter diff --git a/test/app/grouping.test.ts b/test/app/grouping.test.ts index 4b408725..9685af03 100644 --- a/test/app/grouping.test.ts +++ b/test/app/grouping.test.ts @@ -182,7 +182,14 @@ describe('Grouping', () => { ); assert.equal(lastCall[1]!.method, 'GET'); - await groups.join('aid1', { 'ked': {} }, ['sig'], 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', ['1', '2', '3'], ['a', 'b', 'c']); + await groups.join( + 'aid1', + { ked: {} }, + ['sig'], + 'ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', + ['1', '2', '3'], + ['a', 'b', 'c'] + ); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; assert.equal(lastCall[0]!, url + '/identifiers/aid1/multisig/join'); assert.equal(lastCall[1]!.method, 'POST'); diff --git a/test/core/encrypter.test.ts b/test/core/encrypter.test.ts index 53c27d79..5aff91cc 100644 --- a/test/core/encrypter.test.ts +++ b/test/core/encrypter.test.ts @@ -32,7 +32,8 @@ describe('Encrypter', () => { 114, ]); const saltqb64 = new Matter({ raw: salt, code: MtrDex.Salt_128 }).qb64; - const saltqb64b = new Matter({ raw: salt, code: MtrDex.Salt_128 }).qb64b; + const saltqb64b = new Matter({ raw: salt, code: MtrDex.Salt_128 }) + .qb64b; assert.equal(saltqb64, '0AA2CGQNobs5jXCNoMATSody'); // b'h,#|\x8ap"\x12\xc43t2\xa6\xe1\x18\x19\xf0f2,y\xc4\xc21@\xf5@\x15.\xa2\x1a\xcf' diff --git a/test/core/manager.test.ts b/test/core/manager.test.ts index ce4881b6..2fc78a3e 100644 --- a/test/core/manager.test.ts +++ b/test/core/manager.test.ts @@ -212,7 +212,11 @@ describe('Manager', () => { const encrypter1 = new Encrypter({}, b(aeid1)); assert.equal(encrypter1.verifySeed(seed1), true); - const manager = new Manager({ seed: seed0, salter: salter, aeid: aeid0 }); + const manager = new Manager({ + seed: seed0, + salter: salter, + aeid: aeid0, + }); assert.equal(manager.encrypter!.qb64, encrypter0.qb64); assert.equal(manager.decrypter!.qb64, decrypter0.qb64); assert.equal(manager.seed, seed0); From 1d8b39f243e15ca0e7e16d5132b86f0b4ea114ec Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Fri, 1 Dec 2023 13:05:19 -0800 Subject: [PATCH 116/186] Fix serializeACDCAttachment to work with the correct anchor per type. --- src/keri/app/credentialing.ts | 2 +- src/keri/core/utils.ts | 18 +++++++++++------- test/app/credentialing.test.ts | 8 ++++---- test/core/utils.test.ts | 3 ++- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 5a65b409..0881e5e0 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -712,7 +712,7 @@ export class Ipex { const atc = ims.substring(args.anc.size); const embeds: Record = { - acdc: [args.acdc, d(serializeACDCAttachment(args.acdc))], + acdc: [args.acdc, d(serializeACDCAttachment(args.iss))], iss: [args.iss, d(serializeIssExnAttachment(args.anc))], anc: [args.anc, atc], }; diff --git a/src/keri/core/utils.ts b/src/keri/core/utils.ts index 82b85d1c..42b0a540 100644 --- a/src/keri/core/utils.ts +++ b/src/keri/core/utils.ts @@ -115,10 +115,12 @@ export function bytesToInt(ar: Uint8Array): number { return value; } -export function serializeACDCAttachment(acdc: Serder): Uint8Array { - const prefixer = new Prefixer({ raw: b(acdc.raw) }); - const seqner = new Seqner({ sn: acdc.sn }); - const saider = new Saider({ qb64: acdc.ked['d'] }); +export function serializeACDCAttachment( + anc: Serder +): Uint8Array { + const prefixer = new Prefixer({ qb64: anc.pre }); + const seqner = new Seqner({ sn: anc.sn }); + const saider = new Saider({qb64: anc.ked['d']}) const craw = new Uint8Array(); const ctr = new Counter({ code: CtrDex.SealSourceTriples, count: 1 }).qb64b; const prefix = prefixer.qb64b; @@ -135,9 +137,11 @@ export function serializeACDCAttachment(acdc: Serder): Uint8Array { return newCraw; } -export function serializeIssExnAttachment(iss: Serder): Uint8Array { - const seqner = new Seqner({ sn: iss.sn }); - const ancSaider = new Saider({ qb64: iss.ked['d'] }); +export function serializeIssExnAttachment( + anc: Serder +): Uint8Array { + const seqner = new Seqner({ sn: anc.sn }); + const ancSaider = new Saider({qb64: anc.ked['d']}) const coupleArray = new Uint8Array( seqner.qb64b.length + ancSaider.qb64b.length ); diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index 68c16395..5e632ba9 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -420,10 +420,10 @@ describe('Ipex', () => { ]); assert.equal( end, - '-LAg4AACA' + - '-e-acdc-IABBHsidiI6IkFDREMxMEpTT04wMDAxOTdfIiwiZCI6IkVN0AAAAAAAAAAAAAAAAAAAAAAAEMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo-LAW5AACAA' + - '-e-iss-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAAAECVCyxNpB4PJkpLbWqI02WXs1wf7VUxPNY2W28SN2qqm-LAa5AACAA' + - '-e-anc-AABAADMtDfNihvCSXJNp1VronVojcPGo--0YZ4Kh6CAnowRnn4Or4FgZQqaqCEv6XVS413qfZoVp8j2uxTTPkItO7ED' + '-LAg4AACA-e-acdc-IABEMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo0AAAAAAAAAAAAAAAAAAAAAAAENf3IEYwYtFmlq5Zz' + + 'oI-zFzeR7E3ZNRN2YH_0KAFbdJW-LAW5AACAA-e-iss-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAAAECVCyxNpB4PJkpLbWqI02WXs1wf7VU' + + 'xPNY2W28SN2qqm-LAa5AACAA-e-anc-AABAADMtDfNihvCSXJNp1VronVojcPGo--0YZ4Kh6CAnowRnn4Or4FgZQqaqCEv6XVS413qfZo' + + 'Vp8j2uxTTPkItO7ED' ); const [admit, asigs, aend] = await ipex.admit( diff --git a/test/core/utils.test.ts b/test/core/utils.test.ts index 7ddc1579..e9520f29 100644 --- a/test/core/utils.test.ts +++ b/test/core/utils.test.ts @@ -22,6 +22,7 @@ describe(serializeIssExnAttachment, () => { describe(serializeACDCAttachment, () => { it('serializes acdc data', () => { const [, data] = Saider.saidify({ + i: 'EP-hA0w9X5FDonCDxQv32OTCAvcxkZxgDLOnDb3Jcn3a', d: '', v: versify(Ident.ACDC, undefined, Serials.JSON, 0), a: { @@ -32,7 +33,7 @@ describe(serializeACDCAttachment, () => { const result = serializeACDCAttachment(new Serder(data)); expect(d(result)).toEqual( - '-IABBHsiZCI6IkVORTZzbWw4X1NMZVIzdk9NajRJRExLX2Nn0AAAAAAAAAAAAAAAAAAAAAAAENE6sml8_SLeR3vOMj4IDLK_cgd-A-vtg0Jnu7ozdBjW' + '-IABEP-hA0w9X5FDonCDxQv32OTCAvcxkZxgDLOnDb3Jcn3a0AAAAAAAAAAAAAAAAAAAAAAAEHGU7u7cSMjMcJ1UyN8r-MnoZ3cDw4sMQNYxRLjqGVJI' ); }); }); From e9e045ca6b47e68572cdea25d72ae43e6819e50b Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Fri, 1 Dec 2023 13:15:45 -0800 Subject: [PATCH 117/186] Run prettier --- src/keri/core/utils.ts | 12 ++++-------- test/app/credentialing.test.ts | 6 +++--- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/keri/core/utils.ts b/src/keri/core/utils.ts index 42b0a540..a3737a9f 100644 --- a/src/keri/core/utils.ts +++ b/src/keri/core/utils.ts @@ -115,12 +115,10 @@ export function bytesToInt(ar: Uint8Array): number { return value; } -export function serializeACDCAttachment( - anc: Serder -): Uint8Array { +export function serializeACDCAttachment(anc: Serder): Uint8Array { const prefixer = new Prefixer({ qb64: anc.pre }); const seqner = new Seqner({ sn: anc.sn }); - const saider = new Saider({qb64: anc.ked['d']}) + const saider = new Saider({ qb64: anc.ked['d'] }); const craw = new Uint8Array(); const ctr = new Counter({ code: CtrDex.SealSourceTriples, count: 1 }).qb64b; const prefix = prefixer.qb64b; @@ -137,11 +135,9 @@ export function serializeACDCAttachment( return newCraw; } -export function serializeIssExnAttachment( - anc: Serder -): Uint8Array { +export function serializeIssExnAttachment(anc: Serder): Uint8Array { const seqner = new Seqner({ sn: anc.sn }); - const ancSaider = new Saider({qb64: anc.ked['d']}) + const ancSaider = new Saider({ qb64: anc.ked['d'] }); const coupleArray = new Uint8Array( seqner.qb64b.length + ancSaider.qb64b.length ); diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index 5e632ba9..ef131d1d 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -421,9 +421,9 @@ describe('Ipex', () => { assert.equal( end, '-LAg4AACA-e-acdc-IABEMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo0AAAAAAAAAAAAAAAAAAAAAAAENf3IEYwYtFmlq5Zz' + - 'oI-zFzeR7E3ZNRN2YH_0KAFbdJW-LAW5AACAA-e-iss-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAAAECVCyxNpB4PJkpLbWqI02WXs1wf7VU' + - 'xPNY2W28SN2qqm-LAa5AACAA-e-anc-AABAADMtDfNihvCSXJNp1VronVojcPGo--0YZ4Kh6CAnowRnn4Or4FgZQqaqCEv6XVS413qfZo' + - 'Vp8j2uxTTPkItO7ED' + 'oI-zFzeR7E3ZNRN2YH_0KAFbdJW-LAW5AACAA-e-iss-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAAAECVCyxNpB4PJkpLbWqI02WXs1wf7VU' + + 'xPNY2W28SN2qqm-LAa5AACAA-e-anc-AABAADMtDfNihvCSXJNp1VronVojcPGo--0YZ4Kh6CAnowRnn4Or4FgZQqaqCEv6XVS413qfZo' + + 'Vp8j2uxTTPkItO7ED' ); const [admit, asigs, aend] = await ipex.admit( From 85e0f5c66010549fbdc978ebdf03e2e49f8acc54 Mon Sep 17 00:00:00 2001 From: lenkan Date: Sat, 2 Dec 2023 12:02:27 +0100 Subject: [PATCH 118/186] convert remaining integration-scripts to tests --- examples/integration-scripts/README.md | 17 -- .../{challenge.ts => challenge.test.ts} | 64 +++---- .../{delegation.ts => delegation.test.ts} | 33 ++-- ...est-present.ts => request-present.test.ts} | 169 ++++++++---------- examples/integration-scripts/run_all.sh | 1 - .../integration-scripts/utils/test-util.ts | 20 ++- src/keri/app/contacting.ts | 5 +- 7 files changed, 126 insertions(+), 183 deletions(-) delete mode 100644 examples/integration-scripts/README.md rename examples/integration-scripts/{challenge.ts => challenge.test.ts} (70%) rename examples/integration-scripts/{delegation.ts => delegation.test.ts} (77%) rename examples/integration-scripts/{request-present.ts => request-present.test.ts} (56%) delete mode 100755 examples/integration-scripts/run_all.sh diff --git a/examples/integration-scripts/README.md b/examples/integration-scripts/README.md deleted file mode 100644 index 07cf17d2..00000000 --- a/examples/integration-scripts/README.md +++ /dev/null @@ -1,17 +0,0 @@ -This folder contains scripts intended to test the integration between [signify-ts](https://github.com/WebOfTrust/signify-ts) and [keria](https://github.com/weboftrust/keria). The scripts execute basic KERI functionalities and may be helpful examples to implementors. - -Each script should be executed with: -`ts-node --esm script_name.ts` - -and requires [keria](https://github.com/weboftrust/keria) to be installed and running with: -`keria start --config-file demo-witness-oobis.json --config-dir ./scripts` - -If the script depends on witnesses, you need to have [keripy](https://github.com/WebOfTrust/keripy) installed and running with: -`kli witness demo` - -Additionally, if the script also depends on schemas you need to have [vLEI server](https://github.com/WebOfTrust/vLEI) installed and running with: -`vLEI-server -s ./schema/acdc -c ./samples/acdc/ -o ./samples/oobis/` - -You can also execute all script the scrip: -`run_all.sh` - diff --git a/examples/integration-scripts/challenge.ts b/examples/integration-scripts/challenge.test.ts similarity index 70% rename from examples/integration-scripts/challenge.ts rename to examples/integration-scripts/challenge.test.ts index be815fa5..eee7c239 100644 --- a/examples/integration-scripts/challenge.ts +++ b/examples/integration-scripts/challenge.test.ts @@ -1,27 +1,25 @@ import { strict as assert } from 'assert'; import signify, { Serder } from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; +import { resolveOobi, waitOperation } from './utils/test-util'; -const url = 'http://127.0.0.1:3901'; -const boot_url = 'http://127.0.0.1:3903'; +const { url, bootUrl } = resolveEnvironment(); -await run(); - -async function run() { +test('challenge', async () => { await signify.ready(); - // Boot two clients const bran1 = signify.randomPasscode(); const bran2 = signify.randomPasscode(); const client1 = new signify.SignifyClient( url, bran1, signify.Tier.low, - boot_url + bootUrl ); const client2 = new signify.SignifyClient( url, bran2, signify.Tier.low, - boot_url + bootUrl ); await client1.boot(); await client2.boot(); @@ -57,12 +55,10 @@ async function run() { 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ], }); - let op1 = await icpResult1.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - const aid1 = op1['response']; + const { response: aid1 } = await waitOperation<{ i: string }>( + client1, + await icpResult1.op() + ); await client1 .identifiers() .addEndRole('alice', 'agent', client1!.agent!.pre); @@ -89,43 +85,39 @@ async function run() { const oobi1 = await client1.oobis().get('alice', 'agent'); const oobi2 = await client2.oobis().get('bob', 'agent'); - op1 = await client1.oobis().resolve(oobi2.oobis[0], 'bob'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await resolveOobi(client1, oobi2.oobis[0], 'bob'); console.log("Client 1 resolved Bob's OOBI"); - op2 = await client2.oobis().resolve(oobi1.oobis[0], 'alice'); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await resolveOobi(client2, oobi1.oobis[0], 'alice'); console.log("Client 2 resolved Alice's OOBI"); // List Client 1 contacts let contacts1 = await client1.contacts().list(); - assert.equal(contacts1[3].alias, 'bob'); + expect(contacts1[0].alias).toEqual('bob'); + expect(contacts1[0].challenges).toHaveLength(0); // Bob responds to Alice challenge await client2.challenges().respond('bob', aid1.i, challenge1_small.words); console.log('Bob responded to Alice challenge with signed words'); // Alice verifies Bob's response - op1 = await client1 - .challenges() - .verify('alice', aid2.i, challenge1_small.words); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + const verifyOperation = await waitOperation( + client1, + await client1 + .challenges() + .verify('alice', aid2.i, challenge1_small.words) + ); console.log('Alice verified challenge response'); //Alice mark response as accepted - const exn = new Serder(op1.response.exn); - op1 = await client1.challenges().responded('alice', aid2.i, exn.ked.d); + const verifyResponse = verifyOperation.response as { + exn: Record; + }; + const exn = new Serder(verifyResponse.exn); + + await client1.challenges().responded('alice', aid2.i, exn.ked.d); console.log('Alice marked challenge response as accepted'); // Check Bob's challenge in conctats contacts1 = await client1.contacts().list(); - console.log('Challenge authenticated'); -} + expect(contacts1[0].challenges[0].authenticated).toEqual(true); +}, 30000); diff --git a/examples/integration-scripts/delegation.ts b/examples/integration-scripts/delegation.test.ts similarity index 77% rename from examples/integration-scripts/delegation.ts rename to examples/integration-scripts/delegation.test.ts index 797f43f5..f626f3fa 100644 --- a/examples/integration-scripts/delegation.ts +++ b/examples/integration-scripts/delegation.test.ts @@ -1,12 +1,11 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; +import { resolveOobi, waitOperation } from './utils/test-util'; -const url = 'http://127.0.0.1:3901'; -const boot_url = 'http://127.0.0.1:3903'; +const { url, bootUrl } = resolveEnvironment(); -await run(); - -async function run() { +test('delegation', async () => { await signify.ready(); // Boot two clients const bran1 = signify.randomPasscode(); @@ -15,13 +14,13 @@ async function run() { url, bran1, signify.Tier.low, - boot_url + bootUrl ); const client2 = new signify.SignifyClient( url, bran2, signify.Tier.low, - boot_url + bootUrl ); await client1.boot(); await client2.boot(); @@ -52,10 +51,7 @@ async function run() { ], }); let op1 = await icpResult1.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await waitOperation(client1, op1); const aid1 = await client1.identifiers().get('delegator'); await client1 .identifiers() @@ -65,18 +61,14 @@ async function run() { // Client 2 resolves delegator OOBI console.log('Client 2 resolving delegator OOBI'); const oobi1 = await client1.oobis().get('delegator', 'agent'); - let op2 = await client2.oobis().resolve(oobi1.oobis[0], 'delegator'); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await resolveOobi(client2, oobi1.oobis[0], 'delegator'); console.log('OOBI resolved'); // Client 2 creates delegate AID const icpResult2 = await client2 .identifiers() .create('delegate', { delpre: aid1.prefix }); - op2 = await icpResult2.op(); + let op2 = await icpResult2.op(); const delegatePrefix = op2.name.split('.')[1]; console.log("Delegate's prefix:", delegatePrefix); console.log('Delegate waiting for approval...'); @@ -91,11 +83,8 @@ async function run() { console.log('Delegator approved delegation'); // Client 2 check approval - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await waitOperation(client2, op2); const aid2 = await client2.identifiers().get('delegate'); assert.equal(aid2.prefix, delegatePrefix); console.log('Delegation approved for aid:', aid2.prefix); -} +}, 60000); diff --git a/examples/integration-scripts/request-present.ts b/examples/integration-scripts/request-present.test.ts similarity index 56% rename from examples/integration-scripts/request-present.ts rename to examples/integration-scripts/request-present.test.ts index da00f5b2..47a66b72 100644 --- a/examples/integration-scripts/request-present.ts +++ b/examples/integration-scripts/request-present.test.ts @@ -1,12 +1,15 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; +import { resolveOobi, waitOperation } from './utils/test-util'; +import { resolveEnvironment } from './utils/resolve-env'; -const url = 'http://127.0.0.1:3901'; -const boot_url = 'http://127.0.0.1:3903'; +const { url, bootUrl, vleiServerUrl } = resolveEnvironment(); -await run(); +const schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const schemaOobi = `${vleiServerUrl}/oobi/${schemaSAID}`; -async function run() { +// TODO: Marked as skipped because request/present changes +test.skip('request-present', async () => { await signify.ready(); // Boot three clients const bran1 = signify.randomPasscode(); @@ -16,29 +19,35 @@ async function run() { url, bran1, signify.Tier.low, - boot_url + bootUrl ); const client2 = new signify.SignifyClient( url, bran2, signify.Tier.low, - boot_url + bootUrl ); const client3 = new signify.SignifyClient( url, bran3, signify.Tier.low, - boot_url + bootUrl ); - await client1.boot(); - await client2.boot(); - await client3.boot(); - await client1.connect(); - await client2.connect(); - await client3.connect(); - const state1 = await client1.state(); - const state2 = await client2.state(); - const state3 = await client3.state(); + + const [state1, state2, state3] = await Promise.all([ + client1 + .boot() + .then(() => client1.connect()) + .then(() => client1.state()), + client2 + .boot() + .then(() => client2.connect()) + .then(() => client2.state()), + client3 + .boot() + .then(() => client3.connect()) + .then(() => client3.state()), + ]); console.log( 'Client 1 connected. Client AID:', state1.controller.state.i, @@ -59,7 +68,7 @@ async function run() { ); // Create two identifiers, one for each client - let op1 = await client1.identifiers().create('issuer', { + const op1 = await client1.identifiers().create('issuer', { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -67,17 +76,14 @@ async function run() { 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ], }); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await waitOperation(client1, await op1.op()); const aid1 = await client1.identifiers().get('issuer'); await client1 .identifiers() .addEndRole('issuer', 'agent', client1!.agent!.pre); console.log("Issuer's AID:", aid1.prefix); - let op2 = await client2.identifiers().create('recipient', { + const op2 = await client2.identifiers().create('recipient', { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -85,17 +91,14 @@ async function run() { 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ], }); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await waitOperation(client2, await op2.op()); const aid2 = await client2.identifiers().get('recipient'); await client2 .identifiers() .addEndRole('recipient', 'agent', client2!.agent!.pre); console.log("Recipient's AID:", aid2.prefix); - let op3 = await client3.identifiers().create('verifier', { + const op3 = await client3.identifiers().create('verifier', { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -103,82 +106,49 @@ async function run() { 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ], }); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await waitOperation(client3, await op3.op()); + const aid3 = await client3.identifiers().get('verifier'); await client3 .identifiers() .addEndRole('verifier', 'agent', client3!.agent!.pre); console.log("Verifier's AID:", aid3.prefix); - const schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; - // Exchenge OOBIs console.log('Resolving OOBIs...'); - const oobi1 = await client1.oobis().get('issuer', 'agent'); - const oobi2 = await client2.oobis().get('recipient', 'agent'); - const oobi3 = await client3.oobis().get('verifier', 'agent'); - const schemaOobi = 'http://127.0.0.1:7723/oobi/' + schemaSAID; + const [oobi1, oobi2, oobi3] = await Promise.all([ + client1.oobis().get('issuer', 'agent'), + client2.oobis().get('recipient', 'agent'), + client3.oobis().get('verifier', 'agent'), + ]); + + await Promise.all([ + resolveOobi(client1, oobi2.oobis[0], 'recipient'), + resolveOobi(client1, oobi3.oobis[0], 'verifier'), + resolveOobi(client1, schemaOobi, 'schema'), + ]); - op1 = await client1.oobis().resolve(oobi2.oobis[0], 'recipient'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - op1 = await client1.oobis().resolve(oobi3.oobis[0], 'verifier'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - op1 = await client1.oobis().resolve(schemaOobi, 'schema'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } console.log('Issuer resolved 3 OOBIs'); - op2 = await client2.oobis().resolve(oobi1.oobis[0], 'issuer'); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - op2 = await client2.oobis().resolve(oobi3.oobis[0], 'verifier'); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - op2 = await client2.oobis().resolve(schemaOobi, 'schema'); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await Promise.all([ + resolveOobi(client2, oobi1.oobis[0], 'issuer'), + resolveOobi(client2, oobi3.oobis[0], 'verifier'), + resolveOobi(client2, schemaOobi, 'schema'), + ]); console.log('Recipient resolved 3 OOBIs'); - op3 = await client3.oobis().resolve(oobi1.oobis[0], 'issuer'); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - op3 = await client3.oobis().resolve(oobi2.oobis[0], 'recipient'); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - op3 = await client3.oobis().resolve(schemaOobi, 'schema'); - while (!op3['done']) { - op3 = await client3.operations().get(op3.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await Promise.all([ + resolveOobi(client3, oobi1.oobis[0], 'issuer'), + resolveOobi(client3, oobi2.oobis[0], 'recipient'), + resolveOobi(client3, schemaOobi, 'schema'), + ]); console.log('Verifier resolved 3 OOBIs'); // Create registry for issuer - op1 = await client1.registries().create('issuer', 'vLEI'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + const vcpResult = await client1 + .registries() + .create({ name: 'issuer', registryName: 'vLEI' }); + await waitOperation(client1, await vcpResult.op()); const registries = await client1.registries().list('issuer'); assert.equal(registries.length, 1); assert.equal(registries[0].name, 'vLEI'); @@ -193,14 +163,16 @@ async function run() { const vcdata = { LEI: '5493001KJTIIGC8Y1R17', }; - op1 = await client1 - .credentials() - .issue('issuer', registries[0].regk, schemaSAID, aid2.prefix, vcdata); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - const creds1 = await client1.credentials().list('issuer'); + const credRes = await client1.credentials().issue({ + issuerName: 'issuer', + registryId: registries[0].regk, + schemaId: schemaSAID, + recipient: aid2.prefix, + data: vcdata, + }); + await waitOperation(client1, credRes.op); + + const creds1 = await client1.credentials().list(); assert.equal(creds1.length, 1); assert.equal(creds1[0].sad.s, schemaSAID); assert.equal(creds1[0].sad.i, aid1.prefix); @@ -208,7 +180,7 @@ async function run() { console.log('Credential issued'); // Recipient check issued credential - const creds2 = await client2.credentials().list('recipient'); + const creds2 = await client2.credentials().list(); assert.equal(creds2.length, 1); assert.equal(creds2[0].sad.s, schemaSAID); assert.equal(creds2[0].sad.i, aid1.prefix); @@ -253,11 +225,10 @@ async function run() { const creds3 = await client3 .credentials() - .list('verifier', { filter: { '-i': { $eq: aid1.prefix } } }); // filter by issuer + .list({ filter: { '-i': { $eq: aid1.prefix } } }); // filter by issuer assert.equal(creds3.length, 1); assert.equal(creds3[0].sad.s, schemaSAID); assert.equal(creds3[0].sad.i, aid1.prefix); assert.equal(creds3[0].status.s, '0'); // 0 = issued assert.equal(creds3[0].sad.a.i, aid2.prefix); // verify that the issuee is the same as the presenter - console.log('Credential presented and received by verifier'); -} +}, 60000); diff --git a/examples/integration-scripts/run_all.sh b/examples/integration-scripts/run_all.sh deleted file mode 100755 index e5ae3162..00000000 --- a/examples/integration-scripts/run_all.sh +++ /dev/null @@ -1 +0,0 @@ -for f in ./*.ts; do ts-node --esm $f; done \ No newline at end of file diff --git a/examples/integration-scripts/utils/test-util.ts b/examples/integration-scripts/utils/test-util.ts index bfd2d821..28d78328 100644 --- a/examples/integration-scripts/utils/test-util.ts +++ b/examples/integration-scripts/utils/test-util.ts @@ -1,4 +1,4 @@ -import { SignifyClient } from 'signify-ts'; +import { Operation, SignifyClient } from 'signify-ts'; export function sleep(ms: number): Promise { return new Promise((resolve) => { @@ -9,13 +9,12 @@ export function sleep(ms: number): Promise { /** * Poll for operation to become completed */ -export async function waitOperation( +export async function waitOperation( client: SignifyClient, - op: any, - retries: number | undefined = undefined -): Promise { + op: Operation, + retries: number = 10 +): Promise> { const WAIT = 500; // 0.5 seconds - retries ??= 10; // default 10 retries or 5 seconds while (retries-- > 0) { op = await client.operations().get(op.name); if (op.done === true) return op; @@ -23,3 +22,12 @@ export async function waitOperation( } throw new Error(`Timeout: operation ${op.name}`); } + +export async function resolveOobi( + client: SignifyClient, + oobi: string, + alias: string +) { + const op = await client.oobis().resolve(oobi, alias); + await waitOperation(client, op); +} diff --git a/src/keri/app/contacting.ts b/src/keri/app/contacting.ts index c4485407..cb3ef2f4 100644 --- a/src/keri/app/contacting.ts +++ b/src/keri/app/contacting.ts @@ -1,4 +1,5 @@ import { SignifyClient } from './clienting'; +import { Operation } from './coring'; /** * Contacts @@ -157,13 +158,13 @@ export class Challenges { * @param {string} name Name or alias of the identifier * @param {string} source Prefix of the identifier that was challenged * @param {Array} words List of challenge words to check for - * @returns {Promise} A promise to the result + * @returns A promise to the long running operation */ async verify( name: string, source: string, words: string[] - ): Promise { + ): Promise> { const path = `/challenges/${name}/verify/${source}`; const method = 'POST'; const data = { From acfa4c6667c3014e0e46ccc7fdfccf84d8166250 Mon Sep 17 00:00:00 2001 From: lenkan Date: Mon, 4 Dec 2023 14:29:52 +0100 Subject: [PATCH 119/186] fix: remove TextEncoder import from node:util --- src/keri/app/credentialing.ts | 1 - src/keri/core/eventing.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 0881e5e0..3317a4bc 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -15,7 +15,6 @@ import { import { Saider } from '../core/saider'; import { Serder } from '../core/serder'; import { Siger } from '../core/siger'; -import { TextDecoder } from 'util'; import { TraitDex } from './habery'; import { serializeACDCAttachment, diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index 6daa175f..d03e4473 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -19,7 +19,6 @@ import { Siger } from './siger'; import { Cigar } from './cigar'; import { Counter, CtrDex } from './counter'; import { Seqner } from './seqner'; -import { TextEncoder } from 'util'; const MaxIntThold = 2 ** 32 - 1; From 373e9c7726d2b0d4098a18fe5c3562957ee0cc3d Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Tue, 5 Dec 2023 11:28:17 -0800 Subject: [PATCH 120/186] Adding verifier to single issuer script --- .../single-issuer-holder.test.ts | 59 ++++++++++++++++++- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/examples/integration-scripts/single-issuer-holder.test.ts b/examples/integration-scripts/single-issuer-holder.test.ts index fa6e838f..242055bd 100644 --- a/examples/integration-scripts/single-issuer-holder.test.ts +++ b/examples/integration-scripts/single-issuer-holder.test.ts @@ -2,7 +2,7 @@ import assert from 'node:assert'; import signify, { SignifyClient, IssueCredentialArgs, - Operation, + Operation, Serder, } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; @@ -118,6 +118,32 @@ async function issueCredential( return creds[0]; } +async function grantCredential( + client: SignifyClient, + issuerName: string, + recipient: string, + acdc: Serder, anc: Serder, iss: Serder +) { + const dt = createTimestamp(); + + const [grant, gsigs, end] = await client.ipex().grant({ + senderName: issuerName, + recipient: recipient, + datetime: dt, + acdc: acdc, + anc: anc, + iss: iss, + }); + + await client + .exchanges() + .sendFromEvents(issuerName, 'credential', grant, gsigs, end, [ + recipient, + ]); + + console.log('Grant message sent'); +} + interface Notification { i: string; dt: string; @@ -207,9 +233,11 @@ test( await signify.ready(); const issuerClient = await connect(url, bootUrl); const holderClient = await connect(url, bootUrl); + const verifierClient = await connect(url, bootUrl); await issuerClient.state(); await holderClient.state(); + await verifierClient.state(); const issuerWits = await Promise.all( witnessUrls.map(async (url, i) => { @@ -233,6 +261,17 @@ test( }) ); + const verifierWits = await Promise.all( + witnessUrls.map(async (url, i) => { + const result = await resolveOobi( + verifierClient, + url + '/oobi', + `witness-${i}` + ); + return result.i; + }) + ); + // Create two identifiers, one for each client const issuerPrefix = await createIdentifier( issuerClient, @@ -244,10 +283,16 @@ test( 'holder', holderWits ); + const verifierPrefix = await createIdentifier( + verifierClient, + 'verifier', + verifierWits + ); // Exchange OOBIs const issuerOobi = await getAgentOobi(issuerClient, 'issuer'); const holderOobi = await getAgentOobi(holderClient, 'holder'); + const verifierOobi = await getAgentOobi(verifierClient, 'verifier'); await resolveOobi(issuerClient, holderOobi, 'holder'); await resolveOobi( issuerClient, @@ -260,6 +305,13 @@ test( vleiServerUrl + '/oobi/' + SCHEMA_SAID, 'schema' ); + await resolveOobi(verifierClient, holderOobi, 'holder'); + await resolveOobi(holderClient, verifierOobi, 'verifier'); + await resolveOobi( + verifierClient, + vleiServerUrl + '/oobi/' + SCHEMA_SAID, + 'schema' + ); await createRegistry(issuerClient, 'issuer', 'vLEI'); @@ -288,10 +340,13 @@ test( await holderClient.notifications().mark(grantNotification.i); - await wait(async () => { + const c = await wait(async () => { const creds = await holderClient.credentials().list(); assert(creds.length >= 1); + return creds[0] }); + + const cred = await holderClient.credentials().get("holder", c['sad']['d']) }, 1000 * 60 * 5 ); From facf020363da52e09be9713af88e9091fe77268a Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Wed, 6 Dec 2023 07:52:13 -0800 Subject: [PATCH 121/186] Addition of submitGrant that calls the correct endpoint to perform a credential grant. Sample in `single-issuer-holder.test.ts` of using data from credentials/list to create a GRANT for presenting a held credential. --- .../single-issuer-holder.test.ts | 71 ++++++++++++++++--- src/keri/app/credentialing.ts | 52 ++++++++++++-- 2 files changed, 105 insertions(+), 18 deletions(-) diff --git a/examples/integration-scripts/single-issuer-holder.test.ts b/examples/integration-scripts/single-issuer-holder.test.ts index 242055bd..e65b45ee 100644 --- a/examples/integration-scripts/single-issuer-holder.test.ts +++ b/examples/integration-scripts/single-issuer-holder.test.ts @@ -2,7 +2,8 @@ import assert from 'node:assert'; import signify, { SignifyClient, IssueCredentialArgs, - Operation, Serder, + Operation, + Serder, } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; @@ -122,7 +123,12 @@ async function grantCredential( client: SignifyClient, issuerName: string, recipient: string, - acdc: Serder, anc: Serder, iss: Serder + acdc: Serder, + acdcAttachment: string, + anc: Serder, + ancAttachment: string, + iss: Serder, + issAttachment: string ) { const dt = createTimestamp(); @@ -131,17 +137,14 @@ async function grantCredential( recipient: recipient, datetime: dt, acdc: acdc, + acdcAttachment: acdcAttachment, anc: anc, + ancAttachment: ancAttachment, iss: iss, + issAttachment: issAttachment, }); - await client - .exchanges() - .sendFromEvents(issuerName, 'credential', grant, gsigs, end, [ - recipient, - ]); - - console.log('Grant message sent'); + await client.ipex().submitGrant(issuerName, grant, gsigs, end, [recipient]); } interface Notification { @@ -343,10 +346,56 @@ test( const c = await wait(async () => { const creds = await holderClient.credentials().list(); assert(creds.length >= 1); - return creds[0] + return creds[0]; + }); + + console.log('Loading full credential'); + const cred = await holderClient + .credentials() + .get('holder', c['sad']['d']); + + const acdc = new Serder(cred['sad']); + const iss = new Serder(cred['iss']); + const anc = new Serder(cred['anc']); + + console.log(`Presenting credential to verifier: ${c['sad']['d']}`); + await grantCredential( + holderClient, + 'holder', + verifierPrefix, + acdc, + cred['atc'], + anc, + cred['ancatc'], + iss, + cred['issatc'] + ); + + const verifierGrantNotification = await waitForNotification( + verifierClient, + '/exn/ipex/grant' + ); + + console.log( + `Notifcation of grant received by verifier ${verifierGrantNotification.a.d}` + ); + await admitCredential( + verifierClient, + 'verifier', + verifierGrantNotification.a.d!, + holderPrefix + ); + + await verifierClient.notifications().mark(verifierGrantNotification.i); + + console.log('Checking for credential'); + const p = await wait(async () => { + const creds = await verifierClient.credentials().list(); + assert(creds.length >= 1); + return creds[0]; }); - const cred = await holderClient.credentials().get("holder", c['sad']['d']) + console.log(`Credential ${p.sad.d} received by Verifier`); }, 1000 * 60 * 5 ); diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 3317a4bc..6e31774c 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -112,8 +112,11 @@ export interface IpexGrantArgs { agree?: string; datetime?: string; acdc: Serder; + acdcAttachment?: string; iss: Serder; + issAttachment?: string; anc: Serder; + ancAttachment?: string; } /** @@ -704,15 +707,27 @@ export class Ipex { i: args.recipient, }; - const keeper = this.client.manager?.get(hab); - const sigs = await keeper.sign(b(args.anc.raw)); - const sigers = sigs.map((sig: string) => new Siger({ qb64: sig })); - const ims = d(messagize(args.anc, sigers)); - const atc = ims.substring(args.anc.size); + let atc = args.ancAttachment; + if (atc === undefined) { + const keeper = this.client.manager?.get(hab); + const sigs = keeper.sign(b(args.anc.raw)); + const sigers = sigs.map((sig: string) => new Siger({ qb64: sig })); + const ims = d(messagize(args.anc, sigers)); + atc = ims.substring(args.anc.size); + } + + const acdcAtc = + args.acdcAttachment === undefined + ? d(serializeACDCAttachment(args.iss)) + : args.acdcAttachment; + const issAtc = + args.issAttachment === undefined + ? d(serializeIssExnAttachment(args.anc)) + : args.issAttachment; const embeds: Record = { - acdc: [args.acdc, d(serializeACDCAttachment(args.iss))], - iss: [args.iss, d(serializeIssExnAttachment(args.anc))], + acdc: [args.acdc, acdcAtc], + iss: [args.iss, issAtc], anc: [args.anc, atc], }; @@ -729,6 +744,29 @@ export class Ipex { ); } + async submitGrant( + name: string, + exn: Serder, + sigs: string[], + atc: string, + recp: string[] + ): Promise { + const body = { + exn: exn.ked, + sigs: sigs, + atc: atc, + rec: recp, + }; + + const response = await this.client.fetch( + `/identifiers/${name}/ipex/grant`, + 'POST', + body + ); + + return response.json(); + } + /** * Create an IPEX admit EXN message * @async From c6e8a4c4ae9320aff8feaf8adbe2336e40723d44 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Wed, 6 Dec 2023 11:11:23 -0800 Subject: [PATCH 122/186] Getting unit tests to run locally and successfully --- .../integration-scripts/credentials.test.ts | 27 +++++++++---------- src/keri/app/credentialing.ts | 4 +-- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index d9712ce4..52b074de 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -1,18 +1,20 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; +import {resolveEnvironment} from "./utils/resolve-env"; +const { url, bootUrl, vleiServerUrl, witnessIds, witnessUrls } = resolveEnvironment(); -const url = 'http://127.0.0.1:3901'; -const boot_url = 'http://127.0.0.1:3903'; -const WAN_WITNESS_AID = 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'; -const WIL_WITNESS_AID = 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM'; -const WES_WITNESS_AID = 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX'; -const WITNESS_HOST = 'witness-demo'; +const boot_url = bootUrl; +const WAN_WITNESS_AID = witnessIds[0]; +const WIL_WITNESS_AID = witnessIds[1]; +const WES_WITNESS_AID = witnessIds[2]; const WITNESS_OOBIS = [ - `http://${WITNESS_HOST}:5642/oobi/${WAN_WITNESS_AID}/controller?name=Wan&tag=witness`, - `http://${WITNESS_HOST}:5643/oobi/${WIL_WITNESS_AID}/controller?name=Wil&tag=witness`, - `http://${WITNESS_HOST}:5644/oobi/${WES_WITNESS_AID}/controller?name=Wes&tag=witness`, + `${witnessUrls[0]}/oobi/${WAN_WITNESS_AID}/controller?name=Wan&tag=witness`, + `${witnessUrls[1]}/oobi/${WIL_WITNESS_AID}/controller?name=Wil&tag=witness`, + `${witnessUrls[2]}/oobi/${WES_WITNESS_AID}/controller?name=Wes&tag=witness`, ]; +console.log(WITNESS_OOBIS) + const KLI_WITNESS_DEMO_PREFIXES = [ WAN_WITNESS_AID, WIL_WITNESS_AID, @@ -21,7 +23,7 @@ const KLI_WITNESS_DEMO_PREFIXES = [ // Credential Schema discovery through credential schema OOBI resolution const qviSchemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; -const vLEIServerHostUrl = 'http://vlei-server:7723/oobi'; +const vLEIServerHostUrl = `${vleiServerUrl}/oobi`; const schemaOobiUrl = `${vLEIServerHostUrl}/${qviSchemaSAID}`; // Boots an agent and connects to it, returning the connected SignifyClient @@ -82,11 +84,6 @@ test('credentials', async () => { const issuerClient = await bootAndConnect(signify.randomPasscode()); const holderClient = await bootAndConnect(signify.randomPasscode()); const verifierClient = await bootAndConnect(signify.randomPasscode()); - await Promise.all([ - resolveWitnesses(issuerClient), - resolveWitnesses(holderClient), - resolveWitnesses(verifierClient), - ]); const state1 = await issuerClient.state(); const state2 = await holderClient.state(); diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 6e31774c..0443b4ef 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -295,8 +295,8 @@ export class Credentials { d: '', i: said, s: '1', - p: cred.status.d, ri: cred.sad.ri, + p: cred.status.d, dt: dt, }; @@ -710,7 +710,7 @@ export class Ipex { let atc = args.ancAttachment; if (atc === undefined) { const keeper = this.client.manager?.get(hab); - const sigs = keeper.sign(b(args.anc.raw)); + const sigs = await keeper.sign(b(args.anc.raw)); const sigers = sigs.map((sig: string) => new Siger({ qb64: sig })); const ims = d(messagize(args.anc, sigers)); atc = ims.substring(args.anc.size); From ed571827d0fdec010f4a5b74392ff2737c273a46 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Wed, 6 Dec 2023 12:27:20 -0800 Subject: [PATCH 123/186] Prettier --- examples/integration-scripts/credentials.test.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index 52b074de..35a60116 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -1,7 +1,8 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; -import {resolveEnvironment} from "./utils/resolve-env"; -const { url, bootUrl, vleiServerUrl, witnessIds, witnessUrls } = resolveEnvironment(); +import { resolveEnvironment } from './utils/resolve-env'; +const { url, bootUrl, vleiServerUrl, witnessIds, witnessUrls } = + resolveEnvironment(); const boot_url = bootUrl; const WAN_WITNESS_AID = witnessIds[0]; @@ -13,8 +14,6 @@ const WITNESS_OOBIS = [ `${witnessUrls[2]}/oobi/${WES_WITNESS_AID}/controller?name=Wes&tag=witness`, ]; -console.log(WITNESS_OOBIS) - const KLI_WITNESS_DEMO_PREFIXES = [ WAN_WITNESS_AID, WIL_WITNESS_AID, From b006fdd69110df3d3b1ab29e2ebfd9fa600d3b5c Mon Sep 17 00:00:00 2001 From: lenkan Date: Wed, 6 Dec 2023 22:19:32 +0100 Subject: [PATCH 124/186] add logs --- .github/workflows/main.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d0f11fe5..0b87367c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -69,3 +69,7 @@ jobs: run: docker compose up deps - name: Run integration test run: npm run test:integration + - name: Print logs + run: docker compose logs + if: always() + From 507ed5616a2c563cb4f0c9b490cc357871fb4721 Mon Sep 17 00:00:00 2001 From: lenkan Date: Wed, 6 Dec 2023 22:25:30 +0100 Subject: [PATCH 125/186] add timeouts --- examples/integration-scripts/singlesig-ixn.test.ts | 4 ++-- examples/integration-scripts/singlesig-rot.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/integration-scripts/singlesig-ixn.test.ts b/examples/integration-scripts/singlesig-ixn.test.ts index 1986ba6a..7776f87d 100644 --- a/examples/integration-scripts/singlesig-ixn.test.ts +++ b/examples/integration-scripts/singlesig-ixn.test.ts @@ -38,7 +38,7 @@ describe('singlesig-ixn', () => { // local and remote keystate sequence match expect(keystate1[0].s).toEqual(keystate2[0].s); - }); + }, 30000); test('ixn1', async () => { // local keystate before ixn const keystate0: KeyState = ( @@ -75,5 +75,5 @@ describe('singlesig-ixn', () => { const keystate3: KeyState = op.response; // local and remote keystate match expect(keystate3.s).toEqual(keystate1.s); - }); + }, 30000); }); diff --git a/examples/integration-scripts/singlesig-rot.test.ts b/examples/integration-scripts/singlesig-rot.test.ts index d5a7af91..1da3d339 100644 --- a/examples/integration-scripts/singlesig-rot.test.ts +++ b/examples/integration-scripts/singlesig-rot.test.ts @@ -40,7 +40,7 @@ describe('singlesig-rot', () => { // local and remote keystate sequence match expect(keystate1[0].s).toEqual(keystate2[0].s); - }); + }, 30000); test('rot1', async () => { // local keystate before rot const keystate0: KeyState = ( @@ -86,5 +86,5 @@ describe('singlesig-rot', () => { expect(keystate3.s).toEqual(keystate1.s); expect(keystate3.k[0]).toEqual(keystate1.k[0]); expect(keystate3.n[0]).toEqual(keystate1.n[0]); - }); + }, 30000); }); From e54ea2b50466e2ebf11ba9ca6b1bc031970ea717 Mon Sep 17 00:00:00 2001 From: lenkan Date: Wed, 6 Dec 2023 22:27:28 +0100 Subject: [PATCH 126/186] remove oobis --- examples/integration-scripts/multisig.test.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index 3ab15bfe..dddf9690 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -6,14 +6,13 @@ import signify, { } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -const { url, bootUrl, witnessUrls, vleiServerUrl } = resolveEnvironment(); +const { url, bootUrl, vleiServerUrl } = resolveEnvironment(); const WITNESS_AIDS = [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ]; -const WITNESS_OOBIS = witnessUrls.map((url) => `${url}/oobi`); const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; const SCHEMA_OOBI = `${vleiServerUrl}/oobi/${SCHEMA_SAID}`; @@ -1144,7 +1143,6 @@ async function bootClient(): Promise { state.agent.i ); - await resolveWitnesses(client); return client; } @@ -1161,12 +1159,6 @@ async function createAID(client: SignifyClient, name: string, wits: string[]) { return aid; } -async function resolveWitnesses(client: SignifyClient) { - await Promise.all( - WITNESS_OOBIS.map((oobi) => client.oobis().resolve(oobi)) - ); -} - async function multisigIssue( client: SignifyClient, memberName: string, From 73cd2c1151b11e24c71c4e12b19ea77d71abf0e2 Mon Sep 17 00:00:00 2001 From: lenkan Date: Wed, 6 Dec 2023 22:29:41 +0100 Subject: [PATCH 127/186] increase timeout --- examples/integration-scripts/multisig.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index dddf9690..857dc57f 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -1105,7 +1105,7 @@ test('multisig', async function run() { console.log('Member1 received exchange message with the admit response'); const creds = await client4.credentials().list(); console.log(`Holder holds ${creds.length} credential`); -}, 240000); +}, 360000); async function waitForOp(client: SignifyClient, op: any) { while (!op['done']) { From 318c7555b148995ca2e3e13ecc594423934826a6 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Wed, 6 Dec 2023 16:51:01 -0800 Subject: [PATCH 128/186] One script change to get local execution to work. Changed workflow for integration tests to pull image every time since our plan is to overwrite the dev tags on the images for development builds for KERIA / KERIpy --- .github/workflows/main.yml | 2 +- .../integration-scripts/test-setup-single-client.test.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0b87367c..7e6341d3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -66,7 +66,7 @@ jobs: - name: Build run: npm run build - name: Start dependencies - run: docker compose up deps + run: docker compose up deps --pull always - name: Run integration test run: npm run test:integration - name: Print logs diff --git a/examples/integration-scripts/test-setup-single-client.test.ts b/examples/integration-scripts/test-setup-single-client.test.ts index 32bb084b..f01957e8 100644 --- a/examples/integration-scripts/test-setup-single-client.test.ts +++ b/examples/integration-scripts/test-setup-single-client.test.ts @@ -29,16 +29,16 @@ describe('test-setup-single-client', () => { switch (env.preset) { case 'local': expect(name1_oobi).toEqual( - `http://localhost:3902/oobi/${name1_id}/agent/EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc` + `http://127.0.0.1:3902/oobi/${name1_id}/agent/EC60ue9GOpQGrLBlS9T0dO6JkBTbv3V05Y4O730QBBoc` ); expect(oobi.oobis[0]).toEqual( - `http://localhost:5642/oobi/${name1_id}/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha` + `http://127.0.0.1:5642/oobi/${name1_id}/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha` ); expect(oobi.oobis[1]).toEqual( - `http://localhost:5643/oobi/${name1_id}/witness/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM` + `http://127.0.0.1:5643/oobi/${name1_id}/witness/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM` ); expect(oobi.oobis[2]).toEqual( - `http://localhost:5644/oobi/${name1_id}/witness/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX` + `http://127.0.0.1:5644/oobi/${name1_id}/witness/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX` ); break; case 'docker': From 272ac28154acc1fe77f8958962a9973c693b4166 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Wed, 6 Dec 2023 18:34:19 -0800 Subject: [PATCH 129/186] Add test coverage for new grant methods. --- test/app/credentialing.test.ts | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index ef131d1d..daff35ae 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -7,12 +7,12 @@ import libsodium from 'libsodium-wrappers-sumo'; import fetchMock from 'jest-fetch-mock'; import 'whatwg-fetch'; import { - b, + b, d, Ident, Ilks, interact, Saider, - Serder, + Serder, serializeACDCAttachment, serializeIssExnAttachment, Serials, versify, } from '../../src'; @@ -323,7 +323,7 @@ describe('Credentialing', () => { }); describe('Ipex', () => { - it('Ipex', async () => { + it('should do all the IPEX things', async () => { await libsodium.ready; const bran = '0123456789abcdefghijk'; const client = new SignifyClient(url, bran, Tier.low, boot_url); @@ -426,6 +426,27 @@ describe('Ipex', () => { 'Vp8j2uxTTPkItO7ED' ); + const [ng, ngsigs, ngend] = await ipex.grant({ + senderName: 'multisig', + recipient: holder, + message: '', + acdc: new Serder(acdc), + acdcAttachment: d(serializeACDCAttachment(iserder)), + iss: iserder, + issAttachment: d(serializeIssExnAttachment(anc)), + anc, + ancAttachment: "-AABAADMtDfNihvCSXJNp1VronVojcPGo--0YZ4Kh6CAnowRnn4Or4FgZQqaqCEv6XVS413qfZoVp8j2uxTTPkItO7ED", + datetime: mockCredential.sad.a.dt, + }); + + assert.deepStrictEqual(ng.ked, grant.ked) + assert.deepStrictEqual(ngsigs, gsigs) + assert.deepStrictEqual(ngend, ngend) + + await ipex.submitGrant("multisig", ng, ngsigs, ngend, [holder]) + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0], 'http://127.0.0.1:3901/identifiers/multisig/ipex/grant') + const [admit, asigs, aend] = await ipex.admit( 'holder', '', @@ -450,6 +471,11 @@ describe('Ipex', () => { 'AAD6NAWzEr_KonMJhKL32JLTVZ2_xwVNMqlr-ovAwoIQS5IEWZ8POd4rbWO49-8NqK8GedjUyii3y9o1b0QkYzQJ', ]); + await ipex.submitAdmit("multisig", admit, asigs, aend, [holder]) + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0], 'http://127.0.0.1:3901/identifiers/multisig/ipex/admit') + + assert.equal(aend, ''); }); }); From 11b1d37a14c67c623295939ad83a2767fd131948 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Wed, 6 Dec 2023 18:39:37 -0800 Subject: [PATCH 130/186] Pretty --- test/app/credentialing.test.ts | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index daff35ae..b016fb31 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -7,12 +7,15 @@ import libsodium from 'libsodium-wrappers-sumo'; import fetchMock from 'jest-fetch-mock'; import 'whatwg-fetch'; import { - b, d, + b, + d, Ident, Ilks, interact, Saider, - Serder, serializeACDCAttachment, serializeIssExnAttachment, + Serder, + serializeACDCAttachment, + serializeIssExnAttachment, Serials, versify, } from '../../src'; @@ -435,17 +438,21 @@ describe('Ipex', () => { iss: iserder, issAttachment: d(serializeIssExnAttachment(anc)), anc, - ancAttachment: "-AABAADMtDfNihvCSXJNp1VronVojcPGo--0YZ4Kh6CAnowRnn4Or4FgZQqaqCEv6XVS413qfZoVp8j2uxTTPkItO7ED", + ancAttachment: + '-AABAADMtDfNihvCSXJNp1VronVojcPGo--0YZ4Kh6CAnowRnn4Or4FgZQqaqCEv6XVS413qfZoVp8j2uxTTPkItO7ED', datetime: mockCredential.sad.a.dt, }); - assert.deepStrictEqual(ng.ked, grant.ked) - assert.deepStrictEqual(ngsigs, gsigs) - assert.deepStrictEqual(ngend, ngend) + assert.deepStrictEqual(ng.ked, grant.ked); + assert.deepStrictEqual(ngsigs, gsigs); + assert.deepStrictEqual(ngend, ngend); - await ipex.submitGrant("multisig", ng, ngsigs, ngend, [holder]) + await ipex.submitGrant('multisig', ng, ngsigs, ngend, [holder]); let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - assert.equal(lastCall[0], 'http://127.0.0.1:3901/identifiers/multisig/ipex/grant') + assert.equal( + lastCall[0], + 'http://127.0.0.1:3901/identifiers/multisig/ipex/grant' + ); const [admit, asigs, aend] = await ipex.admit( 'holder', @@ -471,10 +478,12 @@ describe('Ipex', () => { 'AAD6NAWzEr_KonMJhKL32JLTVZ2_xwVNMqlr-ovAwoIQS5IEWZ8POd4rbWO49-8NqK8GedjUyii3y9o1b0QkYzQJ', ]); - await ipex.submitAdmit("multisig", admit, asigs, aend, [holder]) + await ipex.submitAdmit('multisig', admit, asigs, aend, [holder]); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - assert.equal(lastCall[0], 'http://127.0.0.1:3901/identifiers/multisig/ipex/admit') - + assert.equal( + lastCall[0], + 'http://127.0.0.1:3901/identifiers/multisig/ipex/admit' + ); assert.equal(aend, ''); }); From 34e46b38d639efb36ad84811b754a330c763d700 Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 7 Dec 2023 11:15:11 +0100 Subject: [PATCH 131/186] suggestion: bail on first failing integration test --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3275be3b..9897982a 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "build:types": "tsc -p tsconfig.build.json", "build": "npm run build:cjs && npm run build:esm && npm run build:types", "test": "jest test/", - "test:integration": "jest examples/integration-scripts/ --runInBand", + "test:integration": "jest examples/integration-scripts/ --runInBand --bail", "lint": "npx eslint src test examples/integration-scripts examples/scripts", "prepare": "npm run build", "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", From 1d270126a99a3519d5d1ad5f04e25870c60fe2d6 Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 7 Dec 2023 12:20:57 +0100 Subject: [PATCH 132/186] using jest config to configure default timeout for integration tests --- examples/integration-scripts/jest.config.ts | 8 ++++++++ examples/integration-scripts/jest.setup.ts | 1 + examples/integration-scripts/singlesig-ixn.test.ts | 4 ++-- examples/integration-scripts/singlesig-rot.test.ts | 4 ++-- examples/integration-scripts/witness.test.ts | 2 +- jest.config.js | 3 --- jest.config.ts | 9 +++++++++ 7 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 examples/integration-scripts/jest.config.ts create mode 100644 examples/integration-scripts/jest.setup.ts delete mode 100644 jest.config.js create mode 100644 jest.config.ts diff --git a/examples/integration-scripts/jest.config.ts b/examples/integration-scripts/jest.config.ts new file mode 100644 index 00000000..c17a8580 --- /dev/null +++ b/examples/integration-scripts/jest.config.ts @@ -0,0 +1,8 @@ +import { Config } from 'jest'; + +const config: Config = { + preset: 'ts-jest', + setupFilesAfterEnv: ['/jest.setup.ts'], +}; + +export default config; diff --git a/examples/integration-scripts/jest.setup.ts b/examples/integration-scripts/jest.setup.ts new file mode 100644 index 00000000..1399c911 --- /dev/null +++ b/examples/integration-scripts/jest.setup.ts @@ -0,0 +1 @@ +jest.setTimeout(30000); diff --git a/examples/integration-scripts/singlesig-ixn.test.ts b/examples/integration-scripts/singlesig-ixn.test.ts index 7776f87d..1986ba6a 100644 --- a/examples/integration-scripts/singlesig-ixn.test.ts +++ b/examples/integration-scripts/singlesig-ixn.test.ts @@ -38,7 +38,7 @@ describe('singlesig-ixn', () => { // local and remote keystate sequence match expect(keystate1[0].s).toEqual(keystate2[0].s); - }, 30000); + }); test('ixn1', async () => { // local keystate before ixn const keystate0: KeyState = ( @@ -75,5 +75,5 @@ describe('singlesig-ixn', () => { const keystate3: KeyState = op.response; // local and remote keystate match expect(keystate3.s).toEqual(keystate1.s); - }, 30000); + }); }); diff --git a/examples/integration-scripts/singlesig-rot.test.ts b/examples/integration-scripts/singlesig-rot.test.ts index 1da3d339..d5a7af91 100644 --- a/examples/integration-scripts/singlesig-rot.test.ts +++ b/examples/integration-scripts/singlesig-rot.test.ts @@ -40,7 +40,7 @@ describe('singlesig-rot', () => { // local and remote keystate sequence match expect(keystate1[0].s).toEqual(keystate2[0].s); - }, 30000); + }); test('rot1', async () => { // local keystate before rot const keystate0: KeyState = ( @@ -86,5 +86,5 @@ describe('singlesig-rot', () => { expect(keystate3.s).toEqual(keystate1.s); expect(keystate3.k[0]).toEqual(keystate1.k[0]); expect(keystate3.n[0]).toEqual(keystate1.n[0]); - }, 30000); + }); }); diff --git a/examples/integration-scripts/witness.test.ts b/examples/integration-scripts/witness.test.ts index 3de604b0..996d5fdf 100644 --- a/examples/integration-scripts/witness.test.ts +++ b/examples/integration-scripts/witness.test.ts @@ -89,4 +89,4 @@ test('test witness', async () => { assert.equal(aid1.state.b.length, 1); assert.equal(aid1.state.b.length, 1); assert.equal(aid1.state.b[0], WITNESS_AID); -}, 30000); +}); diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index ac2884fe..00000000 --- a/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - preset: 'ts-jest', -}; diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 00000000..fff65ca4 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,9 @@ +import { Config } from 'jest'; + +const config: Config = { + preset: 'ts-jest', + testMatch: ['/test/**/*.test.ts'], + projects: ['', '/examples/integration-scripts'], +}; + +export default config; From 600e08b6259026060918837d167bc2762ab40359 Mon Sep 17 00:00:00 2001 From: lenkan Date: Wed, 22 Nov 2023 15:49:07 +0100 Subject: [PATCH 133/186] add integration test for issuing chained credential --- .../single-issuer-chained-credential.test.ts | 263 ++++++++++++++++++ .../integration-scripts/utils/test-util.ts | 34 +++ 2 files changed, 297 insertions(+) create mode 100644 examples/integration-scripts/single-issuer-chained-credential.test.ts diff --git a/examples/integration-scripts/single-issuer-chained-credential.test.ts b/examples/integration-scripts/single-issuer-chained-credential.test.ts new file mode 100644 index 00000000..170f112c --- /dev/null +++ b/examples/integration-scripts/single-issuer-chained-credential.test.ts @@ -0,0 +1,263 @@ +import assert from 'node:assert'; +import signify, { SignifyClient, Saider } from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; +import { resolveOobi, wait, waitOperation } from './utils/test-util'; + +const { bootUrl, url, vleiServerUrl } = resolveEnvironment(); + +const QVI_SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const LE_SCHEMA_SAID = 'ENPXp1vQzRF6JwIuS-mp2U8Uf1MoADoP_GqQ62VsDZWY'; +const WITNESS_AIDS: string[] = ['BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha']; + +const QVI_SCHEMA_OOBI = `${vleiServerUrl}/oobi/${QVI_SCHEMA_SAID}`; +const LE_SCHEMA_OOBI = `${vleiServerUrl}/oobi/${LE_SCHEMA_SAID}`; + +function createTimestamp() { + const dt = new Date().toISOString().replace('Z', '000+00:00'); + return dt; +} + +async function connect(url: string, bootUrl: string) { + const client = new signify.SignifyClient( + url, + signify.randomPasscode(), + signify.Tier.low, + bootUrl + ); + + await client.boot(); + await client.connect(); + + return client; +} + +async function createIdentifier( + client: signify.SignifyClient, + name: string, + witnesses: string[] +) { + const icpResult1 = await client.identifiers().create(name, { + toad: witnesses.length, + wits: witnesses, + }); + const op = await icpResult1.op(); + await waitOperation(client, op, 15000); + const aid = await client.identifiers().get(name); + + if (!client.agent) { + throw new Error('No agent on client'); + } + + await client.identifiers().addEndRole(name, 'agent', client.agent.pre); + + return aid.prefix; +} + +async function getAgentOobi( + client: signify.SignifyClient, + name: string +): Promise { + const result = await client.oobis().get(name, 'agent'); + return result.oobis[0]; +} + +async function createRegistry( + client: SignifyClient, + name: string, + registryName: string +) { + const result = await client.registries().create({ name, registryName }); + const op = await result.op(); + await waitOperation(client, op, 5000); + + const registries = await client.registries().list(name); + assert.equal(registries.length, 1); + assert.equal(registries[0].name, registryName); + + return registries[0]; +} + +async function issueCredential( + client: SignifyClient, + name: string, + args: { + registry: string; + schema: string; + recipient: string; + data: Record; + source?: Record; + rules?: Record; + } +) { + const result = await client.credentials().issue({ + issuerName: name, + registryId: args.registry, + schemaId: args.schema, + recipient: args.recipient, + data: args.data, + rules: args.rules && Saider.saidify({ d: '', ...args.rules })[1], + source: args.source && Saider.saidify({ d: '', ...args.source })[1], + }); + + await waitOperation(client, result.op, 10000); + + const creds = await client.credentials().list(); + const dt = createTimestamp(); + + const [grant, gsigs, end] = await client.ipex().grant({ + senderName: name, + anc: result.anc, + iss: result.iss, + acdc: result.acdc, + recipient: args.recipient, + datetime: dt, + }); + + await client.ipex().submitGrant(name, grant, gsigs, end, [args.recipient]); + return creds[0]; +} + +interface Notification { + i: string; + dt: string; + r: boolean; + a: { r: string; d?: string; m?: string }; +} + +async function waitForNotification( + client: SignifyClient, + route: string +): Promise { + return wait(async () => { + const notifications = await client.notifications().list(); + for (const notif of notifications.notes) { + if (notif.a.r == route) { + return notif; + } + } + + throw new Error('No notification'); + }); +} + +async function admitCredential( + client: SignifyClient, + name: string, + said: string, + recipient: string +) { + const dt = createTimestamp(); + + const [admit, sigs, end] = await client.ipex().admit(name, '', said, dt); + + await client.ipex().submitAdmit(name, admit, sigs, end, [recipient]); +} + +test('single issuer chained credentials', async () => { + await signify.ready(); + const issuerClient = await connect(url, bootUrl); + const holderClient = await connect(url, bootUrl); + + await issuerClient.state(); + await holderClient.state(); + const issuerPrefix = await createIdentifier( + issuerClient, + 'issuer', + WITNESS_AIDS + ); + const holderPrefix = await createIdentifier( + holderClient, + 'holder', + WITNESS_AIDS + ); + + // Exchange OOBIs + const issuerOobi = await getAgentOobi(issuerClient, 'issuer'); + const holderOobi = await getAgentOobi(holderClient, 'holder'); + await resolveOobi(issuerClient, holderOobi, 'holder'); + await resolveOobi(issuerClient, QVI_SCHEMA_OOBI, 'qvi-schema'); + await resolveOobi(issuerClient, LE_SCHEMA_OOBI, 'le-schema'); + await resolveOobi(holderClient, issuerOobi, 'issuer'); + await resolveOobi(holderClient, QVI_SCHEMA_OOBI, 'qvi-schema'); + await resolveOobi(holderClient, LE_SCHEMA_OOBI, 'le-schema'); + + await createRegistry(issuerClient, 'issuer', 'vLEI'); + + const registires = await issuerClient.registries().list('issuer'); + const result = await issuerClient.credentials().issue({ + issuerName: 'issuer', + registryId: registires[0].regk, + schemaId: QVI_SCHEMA_SAID, + recipient: issuerPrefix, + data: { + LEI: '5493001KJTIIGC8Y1R17', + }, + }); + + await waitOperation(issuerClient, result.op, 5); + const sourceCredential = await wait(async () => { + const result = await issuerClient.credentials().list(); + assert(result.length >= 1); + return result[0]; + }); + + await issueCredential(issuerClient, 'issuer', { + registry: registires[0].regk, + schema: LE_SCHEMA_SAID, + // schema: QVI_SCHEMA_SAID, + recipient: holderPrefix, + data: { + LEI: '5493001KJTIIGC8Y1R17', + }, + source: { + qvi: { + n: sourceCredential.sad.d, + s: sourceCredential.sad.s, + }, + }, + rules: { + usageDisclaimer: { + l: 'Usage of a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, does not assert that the Legal Entity is trustworthy, honest, reputable in its business dealings, safe to do business with, or compliant with any laws or that an implied or expressly intended purpose will be fulfilled.', + }, + issuanceDisclaimer: { + l: 'All information in a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, is accurate as of the date the validation process was complete. The vLEI Credential has been issued to the legal entity or person named in the vLEI Credential as the subject; and the qualified vLEI Issuer exercised reasonable care to perform the validation process set forth in the vLEI Ecosystem Governance Framework.', + }, + }, + }); + + const grantNotification = await waitForNotification( + holderClient, + '/exn/ipex/grant' + ); + + await admitCredential( + holderClient, + 'holder', + grantNotification.a.d!, + issuerPrefix + ); + + await holderClient.notifications().mark(grantNotification.i); + + const holderCredential = await wait( + async () => { + const creds = await holderClient.credentials().list(); + const lei = creds.find( + (cred: { schema: { $id: string } }) => + cred.schema.$id === LE_SCHEMA_SAID + ); + + expect(lei).toBeDefined(); + return lei; + }, + { timeout: 10000 } + ); + + expect(holderCredential).toMatchObject({ + sad: { a: { LEI: '5493001KJTIIGC8Y1R17' } }, + }); + expect(holderCredential.chains).toHaveLength(1); + expect(holderCredential.chains[0]).toMatchObject({ + sad: { a: { LEI: '5493001KJTIIGC8Y1R17' } }, + }); +}, 30000); diff --git a/examples/integration-scripts/utils/test-util.ts b/examples/integration-scripts/utils/test-util.ts index 28d78328..a7952798 100644 --- a/examples/integration-scripts/utils/test-util.ts +++ b/examples/integration-scripts/utils/test-util.ts @@ -31,3 +31,37 @@ export async function resolveOobi( const op = await client.oobis().resolve(oobi, alias); await waitOperation(client, op); } + +export interface WaitOptions { + timeout?: number; +} + +/** + * Retry fn until timeout, throws the last caught excetion after timeout passed + */ +export async function wait( + fn: () => Promise, + options: WaitOptions = {} +): Promise { + const start = Date.now(); + const timeout = options.timeout ?? 10000; + let error: Error | null = null; + + while (Date.now() - start < timeout) { + try { + const result = await fn(); + return result; + } catch (err) { + error = err as Error; + if (Date.now() - start < timeout) { + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + } + } + + if (error) { + throw error; + } else { + throw new Error(`Timeout after ${Date.now() - start}ms`); + } +} From 0f27cc2dd6c75928618f6ca54cb52cb198636506 Mon Sep 17 00:00:00 2001 From: Kent Bull Date: Thu, 7 Dec 2023 09:14:39 -0700 Subject: [PATCH 134/186] Move example app to other repo The example React and Typescript application has been moved to the WebOfTrust/signify-react-ts repository --- examples/signify-react-ts/.eslintrc | 12 - examples/signify-react-ts/.gitignore | 24 - examples/signify-react-ts/.puppeteerrc.cjs | 10 - examples/signify-react-ts/README.md | 33 - examples/signify-react-ts/client.png | Bin 348934 -> 0 bytes examples/signify-react-ts/connecting.png | Bin 95905 -> 0 bytes examples/signify-react-ts/identifier.png | Bin 341725 -> 0 bytes examples/signify-react-ts/index.html | 14 - examples/signify-react-ts/package.json | 32 - examples/signify-react-ts/public/vite.svg | 1 - examples/signify-react-ts/src/App.css | 57 -- examples/signify-react-ts/src/App.tsx | 25 - .../signify-react-ts/src/MainComponent.tsx | 807 ------------------ examples/signify-react-ts/src/Signify.tsx | 206 ----- examples/signify-react-ts/src/SignifyDemo.tsx | 45 - .../signify-react-ts/src/TestsComponent.tsx | 28 - .../signify-react-ts/src/assets/react.svg | 1 - examples/signify-react-ts/src/index.css | 69 -- examples/signify-react-ts/src/main.tsx | 10 - .../src/test_components/Challenges.tsx | 112 --- .../src/test_components/Credentials.tsx | 196 ----- .../src/test_components/Delegation.tsx | 74 -- .../src/test_components/Multisig.tsx | 136 --- .../src/test_components/Randy.tsx | 90 -- .../src/test_components/Rotation.tsx | 56 -- .../src/test_components/Salty.tsx | 129 --- .../src/test_components/Witnesses.tsx | 76 -- examples/signify-react-ts/src/vite-env.d.ts | 1 - .../signify-react-ts/tests/integrations.js | 92 -- examples/signify-react-ts/tsconfig.json | 20 - examples/signify-react-ts/vite.config.ts | 8 - 31 files changed, 2364 deletions(-) delete mode 100644 examples/signify-react-ts/.eslintrc delete mode 100644 examples/signify-react-ts/.gitignore delete mode 100644 examples/signify-react-ts/.puppeteerrc.cjs delete mode 100644 examples/signify-react-ts/README.md delete mode 100644 examples/signify-react-ts/client.png delete mode 100644 examples/signify-react-ts/connecting.png delete mode 100644 examples/signify-react-ts/identifier.png delete mode 100644 examples/signify-react-ts/index.html delete mode 100644 examples/signify-react-ts/package.json delete mode 100644 examples/signify-react-ts/public/vite.svg delete mode 100644 examples/signify-react-ts/src/App.css delete mode 100644 examples/signify-react-ts/src/App.tsx delete mode 100644 examples/signify-react-ts/src/MainComponent.tsx delete mode 100644 examples/signify-react-ts/src/Signify.tsx delete mode 100644 examples/signify-react-ts/src/SignifyDemo.tsx delete mode 100644 examples/signify-react-ts/src/TestsComponent.tsx delete mode 100644 examples/signify-react-ts/src/assets/react.svg delete mode 100644 examples/signify-react-ts/src/index.css delete mode 100644 examples/signify-react-ts/src/main.tsx delete mode 100644 examples/signify-react-ts/src/test_components/Challenges.tsx delete mode 100644 examples/signify-react-ts/src/test_components/Credentials.tsx delete mode 100644 examples/signify-react-ts/src/test_components/Delegation.tsx delete mode 100644 examples/signify-react-ts/src/test_components/Multisig.tsx delete mode 100644 examples/signify-react-ts/src/test_components/Randy.tsx delete mode 100644 examples/signify-react-ts/src/test_components/Rotation.tsx delete mode 100644 examples/signify-react-ts/src/test_components/Salty.tsx delete mode 100644 examples/signify-react-ts/src/test_components/Witnesses.tsx delete mode 100644 examples/signify-react-ts/src/vite-env.d.ts delete mode 100644 examples/signify-react-ts/tests/integrations.js delete mode 100644 examples/signify-react-ts/tsconfig.json delete mode 100644 examples/signify-react-ts/vite.config.ts diff --git a/examples/signify-react-ts/.eslintrc b/examples/signify-react-ts/.eslintrc deleted file mode 100644 index 74b07096..00000000 --- a/examples/signify-react-ts/.eslintrc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "env": { "browser": true, "es2020": true }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:react-hooks/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { "ecmaVersion": "latest", "sourceType": "module" }, - "plugins": ["react-refresh"], - "rules": { "react-refresh/only-export-components": "warn" } -} diff --git a/examples/signify-react-ts/.gitignore b/examples/signify-react-ts/.gitignore deleted file mode 100644 index a547bf36..00000000 --- a/examples/signify-react-ts/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/examples/signify-react-ts/.puppeteerrc.cjs b/examples/signify-react-ts/.puppeteerrc.cjs deleted file mode 100644 index 21a646c2..00000000 --- a/examples/signify-react-ts/.puppeteerrc.cjs +++ /dev/null @@ -1,10 +0,0 @@ -const {join} = require('path'); - -/** - * @type {import("puppeteer").Configuration} - */ -module.exports = { - // Changes the cache location for Puppeteer. - cacheDirectory: join(__dirname, '.cache', 'puppeteer'), -}; - diff --git a/examples/signify-react-ts/README.md b/examples/signify-react-ts/README.md deleted file mode 100644 index 18fdc349..00000000 --- a/examples/signify-react-ts/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Signify React sample app - -### Run locally - - -The code is built using React, Vite, Typescript and running code locally requires a Mac or Linux OS. - -- Install [Node.js](https://nodejs.org) - -- To install dependencies of Signify, in the `project root directory` run: - ```bash - npm install - ``` - -- Navigate to `examples/signify-react-ts` directory - ```bash - cd examples/signify-react-ts - ``` - -- Install dependencies: - ```bash - npm install - ``` - -- Run the development server: - ```bash - npm run dev - ``` - -- Open [http://127.0.0.1:5173/](http://127.0.0.1:5173/) in browser - - - diff --git a/examples/signify-react-ts/client.png b/examples/signify-react-ts/client.png deleted file mode 100644 index d0f1737c4ea0775d0ff3b94eb8dbaec6b5487324..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348934 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 %W3h+u^%!aZ9`f@j#~ZgVE~s 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 diff --git a/examples/signify-react-ts/connecting.png b/examples/signify-react-ts/connecting.png deleted file mode 100644 index 603a13090b25265f41a85a6890fc9c43484093f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95905 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 diff --git a/examples/signify-react-ts/identifier.png b/examples/signify-react-ts/identifier.png deleted file mode 100644 index a6db01b6f544015e9a6c6837e1fad70287030e58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 341725 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�b6#Tb{p|Yim^y6|F%{B?Xmj*G2 zXJu;n@TZFLDwHywS<1ja$AECcwed)A#^;=~O0PzQZ`DTX7vQNd`S}4LVK_I$ziH#U z+eMw`Gk8xZTa*Dnbhp8`nr#$5bIP7SfB3v-4yhWRy|x}=o)edcYVU0nFa|)(ombxV zWTdHa7sEyJq{pkmZ7wle5AlS?ly)x|d-ZvgcZiy*X5H7-c=p-s`qbFDnO5h&B32a`R( zi9J9&y?c~w4{|)e53f5`O!GU?x?Bu~G&W?*M}Pk@Jwv({dntF=6~_jRi|jB4;>y=7 zKP#98@6Y)Oj^&}!RqqTMY*eXG_Sem>$xf5SJp83QonJJedk1fZ`o&E8r4V3>#TSQD2^bPh_C?3s?uGBhrL=*_a%9Q4s}(vtweP zrz39Rw3!;yyg_xTye{?7mnrfOSNA?=tTDUZA`R9B449;{!*QF=*)3@sl839MJ~*xy z`^HpNIWjN&P#cu=K0C7qRk>Lf-{s_P%W_OVk>#|fIU}vtYny6j^*hB}AQ%2jkE2lK zmY*@>oy{R4AhlsF32}Cpfh}a^@g8%IXm1y)&JXU8ou63Yo~a#tnV6l4ySihqdbZ2R z+;ub}=&mKi~KSbHanjHGUB=S)@R*SIdU zg=CITM3hV?E>^i2h_fjJeg@zISZ`A5CbB&~(mS=(lfN2RI1+a6y9ZB=$sfoNkOqKK zli#F3MqtQf?o2JT$?US!!Zn49jfXs4e!eLQvu4?@O+hT zW4QVvM{VOuvxgpyI3FT_6Dp3R(oV9?XO_K{F$AZXk?x$|jn}I)&Q8{{ekVO#pfsFq z2YyC840CTBEgrMzk6F}|7cq8>PM=RUtXkiUm3za_5$!t=`Fj4cy43iTFtOJ7D$Gdl z`Ccl&nXpA)%h+fjuK{jn;oCoiAko*mT1~Y=Y1iHnPU{11kMtuRVSC*& z5)BMfxJzef9}>$_p8~?*nU+p6a4$j_J6^9iug-B1P5`7}21;fNy`F;efJ7#c>CDBy zgiIHVi;tT{DDS|x>2<;tB;_+pZjm|3 znJeHANj5-?eAoo5BIsnsxw?rUE|g*r=APM-$~;Xpk&Twa=jxtWoN$gsv69L|7^wh> zkECmMVF7<)w{bH<$k}k;Z9AE4f!di?-a^sfs65kQb>zFovp*qGLfrk$f30zKZBxzE z==%fdxh=LIyr{GG(8I4M?1P;VFojSNTf0@fr&M(VEpc6ePHx@&r=w@#-z19a52qg` zGsx~3fQo=*6x9)m*`#;qzqYqE#E9AkM1}_{yK}o@9A>&mx|V3x&eIVcrfR4EDn-iE zDJCaq-gX2pa&rig+#CI0Uvck6X%mRnPGNY|N;g5hI3eBgp8h=Qbe9Rdy}u&u1-&rQ%PX2rEsKJQ}n>3fRwIOby8hSV~WVWa@29Pl&N zX~qmoRz|C%Hr#?L?fp>)_JCKJer)NKf&esfA)a_+t zUhkg-%`0$9RRB3zASeF%#&4=My9IK272tbhyHIL^q6G5Zd?KFL=lBzN=gIFY1B_7v z5@W0Jp^pl!rJjSI+4b*ocDE(c#|8U*Tr>HlFUds4Nwgf%U`LC3YqDpMHWXMl_oFvt z($j>x+<~#I?Z+zq`z;^Hc0VVLXG*i=qwuEQ1&!U74LD9NgDuh4V~d9<=q+v}ZkS?D zzCdnJllXbW+`&k|Lp}Z(R4s|i*2deb*WUrr>bT2=sYJeszZJk4Bi<; zJrYrps&x;aDR}N#wt(ex<%K_CWz+DbGeJ26c0y$+zFIEcx$3o(Ua}DHInh4RG&5XM zAIC7eYY8gH`CetwHv&Wzn>7kWqRm5`5~VVoCA%Fyt9=5Ebuh10L4l9wU>n82jHhDe z%ZZ)H!~bEyW67l?g$AC)XvM%JF1_*a_URXL6vrQ37S(nnYk};hi63$a85vXka7n|>wGZ8!X6 zFYT-YJ{xISi0DYzE*#?S3DHcQIG^i#cALY5%=u`>yYc!{NY*1cRUqkP;)9sC04z16 z%Qi#YBuB@b)ql+Uq$Mm&L`ze4>);ur%`G-Q$s6YVp zaCv)3+uM3Aq%e!VsN17p^A|na;k@5$_VM7Ln1zJraPi}ejCDXkg~%{q$qxpB9md1~ zE@fdjRgoQ)&#wKGk_nd$Aa~+2wLT|jIPZ1h4RX@2DmvG&r|3qW$FKg1mEeQVa{HWQ zP2Eki0dwxG%3-yV#NKfM5D&6@^s`6V(6!sv=TwJNaZ7J4uXBS}SotqhLnDQ?t$H~< z#nvJfbNFs%_De6D8*Zoyw)8qS1xDUSp_(*{mXMi z(@A&Y*WyD@REM7EiBQ)SsALE+HoE?3EV&0p+RzG$4o`d4@XhBBr1Q8mPgmS$AE}=c zFzGVOs{;ZC6?Kc9GT)&G#KPja9E(((0v4u?^F9Sn;T%f!b%@V$>`^^cNWZg}<9_dUbfJ`pQ_ zMOQxO94LD`Rz*#=DI1?gy>K8+*sC-vFC54y&1vhqt_>Mh72)1zQ;zqx#jl0zhW~_t z!rSYnqQuYqL|l5>&lx7PwSJ83h&Sj+c$FI}+i%Lm`zp9T*L?p}tnTHGNCO?5ZwZKU zc}eu-ffUP7c;wa)pvi2q!j``8uXf8A>o(n|$G%TW%((71G1l!}VB(xMAf=48=6$&; zG<&dy-R%=7L0JysTxSQrPlAj8p)>-hGjKu!x69)^BSPr4!`6xG_2^Km4mCGv{5a?R zo1{oLjyDAMG}dWyjv*^&K8PdzbCFl>35ZC!86DsnwMIqIqw?mT$!RgnnT zdMFLZKzYm};`-~X4ss%Or^%5D`9fyqG>oZYz2`5tkt)JH-xiD_7^DSA;#J?6Yw;^i z>ga?xNN^q-AGVD@y>VH^u8NRG5msI9xZY5jdH_YXgTzb|txh>C_nsIi@Xs14t*G^rf;^gOe zU{`=!_-r5_bLmze8}1>+N&q|!HA>@VYMbu!AH)8v*r3N^NfsJmsF%|zUjI_rZheq~ zf40aW(t0V?n~JYF6KvJ%Ag%)Q+uBU8tYxyblfhRubo0(tnyPu_HT4;_g&Teez3I98 zpVzUyZ@oE#D%{$z3|-QQ{8bpzxwKGy&1M%1k~mEa@mc6 ztS{gz>Q!VKtw!G%wf~eqE33Ut_I@2dy_}8|+~_!YI(Vgd2F(Gi2aqlT1P>*eES!zn z1;QFZ^rU@kcw8aaz8-BS1#e{n91W_jK+Is3sROl=#nj-WeG5yn{a{cetX= zzY3H%m~4`*t_)`j`;Nr)NbpO}sIoPk52~yYhh31DM*qt+G&B@jNRzUv#fQ2Jn~L(Q zw$*yghdyAfaXh2_XJ0vau#lV3XzqwG?((0=k{Mpj$+tCOd(~-=3e&Sh6-wCNY=eAhD`xvA#w`XT2V_ zE;t~#7E2+x4kW*=;4CS^CPX|z1{KFkhlJ69CwaIZfs~zTQY9L0zP7DEG??VCi=b+> zH`$i;F6|`i`%m|nK&~tOvUu+q`P`&{6!Y|9d%b&Z6){y83V@1Jn6=O4Ks~dS+odj> z51{Z>j>^j8%fI(*w9bMHhFyFQj%k_$e*U*#0F&#iw}G=E`Tb&0TydPMi5fc{#ZmXE zPyq4QhWpS(H-1@Ym;`tq)07h2+--DMlNWu;&#;MPpmzk?oeAVL3V{xnS@?r3>tIU@ zXB~Ztuc(c{W7)fBr zdlQd`1_K3Nh~hSeoKM71+x|O%KqRS^yUiK(1_ zj+GW)eZtA9?CI%=gY{wm{Br-y8=28TDim>&P6?#N7z^hIG;WItq~5Cv+)T^im*Nqh zwCu8RU#0lMPbDfq5?m9|n-CVfGx}cA2&yqcsH!OcO6}ZK$ytSa!di0n$EDXvN=n8> zW0~`5h^G3`-d<)3!%Z}BX52#{Z=uv%b<<-2v>HHG`-&Cbj7~`+(r1SYEoxlMy;#47 z)M^3U7Xb2Ah!OujZ}mV`&wQE4E$Qrf=)OmJ0` zn{mwa@8#dEeYIFAV)urd2VCWR?#kVt6#Cj+Fi+~N@vv5-;-w!@q}F?B)MChf0Dru& z^*DS%24KhxONuu8f~m)tdYEgrp}ve?dJPegGn|LVWSQ50z%z}OAnw_4^(KI zeD@Txs|5}VYT5F}4)$Gl+g?(Y<*0OWuqidU0kS{uohhKNo}uD?)v0DTHIfa)NI(Q# zl_?tKz1@6W#~jN0JFGxcAog_+mYaoXkk`t+Ss@Pa;bdJeRv)!h?;S<*+d&yRssRM)@GE8xk7rCZy&hic#L-Se7e zoh0X(=B3avvC!DLZr6f0dKY%%G-zc=KV`Xzhys0P0hb>!zWv=)fp_74G3y|={CV?= z*VWi(Kl_dDwy@tEMN`)u1WA6uZAmmO<$#kqg z7C}3vOWGMoR3q*s&9DW6#OYZ&aApe(QYBcSW$!LuPMFAD3&vv~qu_shGj`vBT?X|NRC`zz^F7zc|{?aC(t#GxY z^VrmjJZ2lPll{jJ|J=Ykg_^)H-Vp6CPNu(zTNh840_zt8r|JR*M9Hasq!WggW4M?%1WU=-~aW z7yY@Lq8fohqh_lbt3O#M?uT~abu*KnvMF-afbUio0pY}0#(+*sMnqa0{YfaAl-<6+ z5faFOI#HIO$8*vO-6Atttlo*9SzT0Q)}JYuITqX7B8UPycPTr)!v6WN72yY?{UQ)D znp+&X$2d*beYZVJ%NH; z^(VeylIW&aw5+r?CLvYZ>G5`ScI=ytf)w&i;1asz`Dv2MkG~TZz=K>;H@&o#;(QUN z-aNs_pPJq&eCE-y3Ag=Xv!5UTSYT$Uk$I#0S>t1_1q_CTgKA8U$A2u`mA*F9daujO z`?kS(Nt+GQYudkW^XqtW&*yIZtEoqFc?A@oIhOUYq?@=82)t zt(``ZJp$6d&qq#?<~!T-uJGN!+_yaoyS@&Y@!;!SWLI}l4O2Wnbb9g$#a48Q$MGnx zoGwhKlX^1!K62%R^*y7ckuN8PIi+m>sF%YZhoayqB?S$?wx^%vX>Hq7y89h>Ql@6{ zl!4Jna?!Gb)$0Wp3-vpv1|nGY;@xo>wcf7ou0RoDyE!JXYOaEzqkx5oadp0ASw9xC zuF;N@NOQp37rEENp!bpx{SUCA?FlQUh@KvK%3Q)Q9dqlL++MjJ_`tE8;!X0?@@C@j zSZXZZJ+8zFakY-Fj?W=g6Wxaodsvdm9B7ifY}tQla^t$oFwN}`%YJM@Z``7dd0c8c z@JC1gyT+sh`Ca>n8H736LN*U6*InB$J?Fic`(6@3AFVnV&tGtnA$5)dTf-h<@k(`& zPU`F^Q*3J#=Yy15?*T3lviz;?N(bNsA-C-J&u9cUo*F&o^AMPNoVCVmYcj zj<7`cwyLs%M|C(=-COq2EKg!$BqTd%db^A5_}B$U>85Ab`^NUX-f(8j%f+7%H>Z z4{`Et%#buWEeMy4z-aviw0YAnkRr)-$;gDtJE9$ZpusZs8skUkZv;m3EZsv>pJyrf z7Ea^~jywkL$Xw-Q3DibE<%}kkcoM!4seK#QLxQNa^xLhJCoI2RD>St7-g;k$uxM9G zB+4u`aq&y}xLnz%nFz7DopM7>3N#ZUd_!^*0HBwx33Vv|2P)MPUx>Pv7$as>pRgDA zqbCPl+T3EsMvSpI@|BsLLPt1KO0s-w_U8ESk{~fcP0<60v{-tjzLrNnoqU@=^EO{W zbTIB7gz^5M$5F}QhtY}YudxJw$N^d{{aj=3#=e=E42uLlb;?Bj`6e*lcTkSxDki6N@Qg zY!y0O&FE*#e=6zPG=AvFU_LuA^=^%o0|kFzZlbnf+<+{6Q7w50VrPHtWtuHkZqJu4 z6LzOQ^&8EtjFXX-NNvmmW|{+ZW2rfsdpmzLg`>SQfEM5^cL|G=QA8bioh%6(*6;{2 z0hfoYvBRE|ay7&jD>Qt9%DTQHff60)y{6#4F-oDeykelu@0*LF-=OK|jy^U^$mv0J#XGUYnsn)-xIvKUce6qUprh&tB$0rEw zPl-@B+&S{)j4?6|PY~qFUVDyZ^cHEW*ziRCGu5JDY!x@zHv6;J{zi9i-)Upm2xut| z&v&%T7!C{WRC{UUqdd$K*Qo}3pL?ej_3`VlzscUjpR}_)@!gtdH7xAv;JvFxXY-u$ z9;w*KNzLdwnC!mPmR+6>0sCVy0w!I~L}Gl%q{k{uFm9t`pri3kX%n+W45c9d_c*;Z zHfmA%r!m6#_vQXTnY@5XBRL3lOT9EOXYDN>{t-T#m^EuKJ@@MmMt2Keu)|DKdl;sk z%OMA~_4v6wAD7+gl)JE3YkL#y%8-I?BTOCj$85B%_XzQ5InihZ758X$ikg^zjJ7#d z4>${KNkd%AZgr3zdj2sQxB*gO0NkNagaKpUqZ?FTAAFdh`t{;(L%M`U_^<_{S|JgC zFa$8OqsyjVfBOXO-QMGWTq+~#BBeKBssTOz$L**@v`OrLU$t^1Wk(axdBRTghTGrh zZ!~a8eGRBn%NQ`N`q!nc_W%0^STwhJi~hVBPxwEshAEVm1vYn}g#WeJZOv;rQ2~Pj z8#=ate@@TM)6wOadQ1Q1G3e>h%Bz1~@gmA`pk-HYEou7KwKqn8aKyr)mp9M9W|XtT zO*(BXc|Y}1$wejXA4G9n2Gx<6IOYGKB0+77Z_n9m^V+YE+j!PTBTRC9H$ zqKp1S^3wOUg_j#Wh2CL@Fo|N)1S~BPVb+%*0#2zvdn2Yp`1<6>^7$z znn97`r~(ES0_=jKBDo0zXT|0d!uvr-Ndw+eVq#*@oc(<#pX>Aaj6u>%1Y-XB z>ICU`CpPETFJnzj&BE+#$)lsAkXLlb6|G{OEEu9ruGNU^OoxGR$aMmgpPWoCtEQ?N zeLU?TF*Y`4HGu$?kFR&pN5(QV?zZ6q5&jfFt7|LfBg?r4Pisrd!7*(xhb-!}Qvv~O zgxxM;!q5xuw)y?BEbEgegWR2z*(c4{mzQ%r9pMzNmq!!KJ2ak)(RG{UJstJIc~#(x zUymT$wJXEaDMHS9tZZy!qoX+;9UYY>3#01FV*!s06RW*JptPo|qY`Eb_X_jA;m@x_ zD_u9V`1$#fj+ANcbDof2!OWEw1JrSGaaNP%W~gt>;*Vt^%Sje48}J%A=+#E^l{_OO zBeG0HSom;qz*j&h2w(=tW$3l=uTS)-#)R|jdgYTDXXX7X#sq`UL`u)zh^E{b(Q$XL zK{Q`Mwq|O1&k`4&C5yNtLPA3|_4Q%Z)zy_N;#Yf-8&Q(?Whqw9Rx&0yYG$Af&8A4g zxY$_Bkvzrq^>sBz$FhEj>x)Hhalb2XD#&V@1kS3E(>**aI``TW&!&G}`T zREfdawlhHQdXh!Ds-|XK(_XkkPWa`pJm*?oiam6Z%CEh>9ks6AToe)#Qn_@x&Fks( zQzV9udp_x`KNeKGduj8z$?xD2_c_AK%1YJOx9P&yPp`hCwTS{xvytt=t`ntn#6s83 zNzcjw3+X*p0_-Qio0F6C%-fo@cxNZ3H6ziKog`*pMV*#FMu{D`K7*~MYm@(K7go~r zf~(Wa3SF)S=!hJ&%ApF8>IWbr>d96k&+920B`=&E< z;7e6tR>)dz0)woXnVIlGFRv?VE#GEi91dBE(;gie$-W_Y$M>Y3_#PJUj=APqKRG|& zns)9Nk`|ozcHZ~f4|_#-d;59}rfoA`tPAJ_&@kq`kGv51!G-wp3x~?@Vh=TceF@&0 zs*;C}0`i@gm$%5%K?*l))XPtGlH+NJvi{i?PzO+a)C0a!Q&dz0CXw0xaCWe=@qy+d zQ>(-f4oK`Q03+5mHX}AAjqx*r!G4(uv7*$3tgNgq0H4=?2GPVXQl*Sf-8$LW>!c}> zxLi|)HXQUjc2ad-b!PgvW;Pwc9oEV^sYhnr=iw0%_jPTmyiT@nC^@_IrE>iCKzOTi zq|#+=*moiIZQI@T)z!hNDjVYaL7E^C2l70n`ugg8Bb(;308rB^`&nVJ>x+Y;!os26 zBwk*pixP0NA+&O*>HKCdM3uRD`G7<(9GpQPJv!f>_<%32!={ZG1yH~YuIc4<{?3p7 z?EfRfcQMcbtf9Z}e>5i85=V|DkJ0Ka4&L`&KPcRKtUe(`X7`v831IN_EB;bTzT}1@ zI95FQ6*((*JnV7Vt9KlGzQEn_y83!eL&Nl~!v9L`V(R#~7NE`QRaI3*Fqk?QsfL+Z zu6bW_ZXBC7pb+;&I{MQ@s?2&w0$x78^gG@bVGn`%oSwQD`aii9&OxG~vPm4=C~Dn8 zsK_oGCgHWoSjL!Kz)eo`I-FeJm{46~^qb}A_j;*t9Gxd51jM&mv9O2TPcA>WuS^Dj zLg-%a47m2Smphv;_ik?XCM9|8JW7Re|8FnA!mnR1tE|UjQ;g7%NaV-Bz|TXL1-cbX z0s;cHMJal4CSl>^#YIy?zf0E-#Vn`@N};w$iK|a?xxWCbkZU_xUaRl(_g`KPBZ7o+<)xSg4YP&Tli`>j;5s^@LLhV&md|otjDpPSygMzQ2ehvY)LB2oJ{t z#(bNZ5!H5;S5jhPWyOh;dmVs7tRTK-eYVf8U#-CNc@Zj={d0S^9$1GZ zDas{@rAQMN59@si&~4D{oA&7w_6?QR69~n%;at3KV3_01oLF}}M@s(lxYJV)YEh5p z!Gw$jDp~%m+^^@qmze|y2WLqJ-47$@XPr2BR8kFW^uwium{?l5S&v$^t!`>snqs=c zVf(jl1eBD$UxV-qwczCa{ry;-Ea6gLx29`6_ZRPK!nF9wHB9B~kFNo-=Jwn-{o!{D zi_Sg7X<8aKw!b<=|LfPU(wZ8<$-L-lxQOjrP8iW_P{joXge$F6e;>5)tw; zReEp?|26l!Nz+E9Ghv*TNw-^vM@D4jdMFf1D(b-{=5@@z$r_CAaix53V1= zUDqGFxqf`YMIIhVFCCGoR=9h3_^rPm=r3cyiK_JZRuLr-)5SS_Mfma||M>X0j=nwx z9!5`a8G`a?q0j}yyK%>R&7C+YVH2Dee<{j-I1;qZ3de;GXM@DK_mxYHbB2WrSva*kbgvj0v=gP|$jcccB!IqFQ%-z=kjmn~)`xtPo(5fna zM!DE0l@RPVa(a5?fb31is}^d+vT7E|P=QBAM(*O{Gt<$b+t}D73p(8I5_*CC*pT1R z(edNQk56WmW7&0~A;fHIwN7RR1_p+!<*pM?OPoZMvxf+1Xz<^`;c!!3g3s8&pFYtt zF$KoPKJ>jj(nbS@zIAu!Tucu3CwTbqV?Y2Vpr{^RUbhF~`hvj!TcF;>PlO2oC+_#@ zY3H?JMx_jKyq5EwX0Yk@HO}5=1|}v#Qc@WtlyS1&oimbJtgX8{MBE3}b#;vsRUPR; zGHgzG_Ie8Z8VrF5D`$xNAUuJIR@Ci6nsRa&+S=N_xbIMF7HJ?gA2q*zt)OrZ7}E}* z0ASn121b|}8KaYvLuzZ!0TARgJ zP6tqOsPv6wJSRAPWi5e2zvKPwJ8zwwj4x3~oSA``1H;3F!1;OK#pt0N&CM{Cmw2L( zz@nhdjm1iT8XCJ{!!!A}VOOn+ z$BL>Cb#-(W*G-dCQx)F6vr3vh$ zMDP;00SIUz5t9Nf0|Q3amq2G1mmI*Hi9!xP1>w`6-vItht@GKB5BQ|K<_b*{lGiT< z56+f5Y5W+txCoe;^Am(+dWVPAgm%pBcLIZgDqPmo(4@l217I+ltWniZ+M0kBVp08! zp{1quOh|~^`}A$HfSum=F+$95LqiV$paaxT67bEEo;lLpNXVvjF#4|_KUx4FEz~F^ z1Oht?Kp>s$*bVOj5*7Otlsr1BQKSVA$Fj9s*#8HFL&PsFqzBeDPZcsm zJ=^>-ab@J?C3Dr@I5<)*SRBdd3~b#!%!lUyHQaNKcH`Cn-v3wI;b&#vAs;Vk@){Zs1s&!V0YQBA>ebtmZBRo) zgHD<8>-Q7da4jNA$}qXy&!BoYc7rd2KN?hX<%soa?C~;ZE*`wZ-gD9g^bmOZRj%4l zy}QGWeWRqJirWM57SNYZ#B5qov9aHP#oxNQsyDzvut|FQR$VO6bb|0pPe z0d^3IC)Lzmr7-81W8BYu|LS?Bo&U6yzCM$)vvYKGbU{P^(becl4 ztf%VZWHg3G87|2-WZhNDvmV8B-1$%kFowLj?n^>%cBk{H5thxeOdYn}RPL3+zZ(DR z$rL@JqNCOEYRI-3SNA$Bvi&`ys6%{z$M8z~OpgZq4EUW|OcP(7Fy@zW_;0c?LY{9F!@y--W zs)k}07h=4l4aUiY_a$X_*dM8A5MiTUW&_13^zPmILSrW5M{Z7z&K9zI9#ry)Yk}{< zJNR7I1Ov`!#M({wZIYGxf}7+wtppC5!S#{fX6zc)>9$O1O!BSLMnuUlexPoqo z3T1L79UWmsPRn(f2J#&)>rPy>R2>~1Gh^)n8pF3)_UvC7r|s2U>J2=*H2S2nRdhW| zHEzpaPzFo)qg;`r-OKjN6q`0Nrv&quN`HDpwe79SK0C`%0A#A;EaWVUUC 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ⅅih#b7?Lse8U^&v;PtN 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

=Aq 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

PB+mU^Z~JL2n*UwGGrF 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 z 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ȔM`f zT@jv~oY2qBgcJc>_D+!F^1oayUP=N7 zk`4pX2Ex$GGOp5>H~&z~d7&VCDn^d?=R+FS;S_@)Mj;l3S^iWLvJpM&P?8kw_b-x5 zcG*`=lXoyAu5PAJk(5<=bVch^OZ1F?q^O#b>^#+&=4dTjf-={_r09v(m#FSM985}r z@Ht1wfhE@C5Rfv${{i~f8iUL#lVeGc(LFoqm{+0Q0yzkIMME^=5&gep=zHK&y*3hK z6wPgbs;K~)7;mK5O6LKbiOl`1T>1T87i^O6WM?iD8*vvmnAfW1+a#009gLii zy^*9e0+ghu@T3i6JJ2{N1$KvD!_epstZ4>-K&-FHU=;BF5J=Tw{9aob0o?hW0fPABvw0d`K())V+S=O0&-XTxr8(u3t+1oOFummE>CQ=j6{j3w z+fK5AER0Ps6*;nLCFXR(yD*T0xV67Kk&V2J=%vYA>cHS283RCuBK#Z5JR(SsaQYog_WtZW-wY0b;V_92FSO;g8)kNa?jo0vS14W7*>vSsj1NgKJwT0y0Fp0%lqnZJGZE z19{|fBC*7CA@mGU#wDy=G4=qg13+8x&yew+A$9}c^~jP`w93QKQ#ND9AZSb|$V#PB zW8)#H_-U29&EKvQcfCRtE2Ub%CSIkIW$0(IzW>KV(W<504cM?KF;hJlq9niar#z%~ zy6Z1xq|OT7oS9XE-TV};cW3H7+?`M0aU>TjfRJ* z{O-6wT=;>iuH9)zJ+i~e+krs}2;HI~I3YC(%76!tA6Fs;{`qi}V}!Uu#Sfm%$mB6h zPseFU6%V|Ul$glw8Z!dnx?S36kg;|1A)%NKw)T9WKsa?3L9wVHPme@&UGl)=4EC`A(gZMM0EcqI@r zuM_Vq1_sWD=hy-_AXpPC`jRY#hb1WEf%5E^_|{!~YTq9lR%hw)jyHdP9)66o*uP6q zL6j1ylr@@CiM!dmb|E5>2_K@5MSMLVq_Ayxc=%6>Kolb*q-3rXVljTS(f+%4{J9{_ zNS6P0z;6#8#W8_AE zbo=x3*qL$PsHon2qo$^g$56e04CEZaO|W@4llGx3akD&xz23~_+XG3G_^N{`uPVo{GHUy31b`# z7{tcKkHYuQ4>|dc+}w>leRtOX zbyYIQU@`7+5$h)TfUo4C1AK7UD;l#9@g5kUbU;zs3}!gTS6*U%m|PiSMa_bRj4#%v2+b;``UP59FaPrP|ZO{LO;8ka-URKQ?yolxeT0E=%FAyT^T7u^+n|P&y{w`};|+ zCbvxJf_8<;v3!SGhP6119Lsy3>|bkhq8+5Yr?G?jEsPL< zn?ERJUS{6&pLY3eu*)B3sJnKQ@>trN>Pg?89$Gu0f678niPQe&Y3`hX*QMty^NQVn zMEPv^Zxo1P+LdpG#;u1<|N3q+Gw`x^@U-%+m_K&rs9-+-_<5@T_(9MB^h9^iIMUuf z!!kv7as1a`CCzSox63@-NcA6{*~0$^yt)7V4axuhzZ*mTZ(j*sw$lxcz@O%lFCu#^r+Kn}(S4_g^n)Sq~gQ{E}SDSo-&`QS!aTS%!Et6wcak65atMqV~{(7L!T(Ft%iDr&G zLixC1#a{L5&dI+r6jh*T)>zka~KA&7S0QT6p@+JF7f zKu7YY9_;_uD?jpM=v(c&|JeJYzY1p)0q~xXi+0Jt(WjTV>ks_(=VfdV+7N*aVeub4 zB_kuQlC1QfAMkHnr*)BCxAtxb3K^HbKmNscSnUVu)S3QkmA|AnF$ZtQuLdya6EE~n>0jUKbQ|WQ*<(Y`3O}%s3FLM>InnXg<&@0+ANF?6hfGn8&+6;z za{#^b2X`R=t9&uXBH+ZJGY&|g(gk`d9;Pp5Ql9gEmImy7aSuASFT$X{4WAM?&PyS7cXq1I7DeOtbj!C>v^_ownF z>nRckdsVrm8z<9q_}@kb9=Ni;wC=K%l%cT8&+=kna$-1f4uJp^au>*sebIvPZcavXf6*zO*?xd|d%HMM8szZ6Gr ze;j?pm=gv$TO=H$SJzx*-2{0z`NKRsen7_h`uiVvc+jH-=Y2DV0@Al;Ks>Bs%cn78 zd70&P@plit@9kPT@}lcy!8g&!rRPUy7UWMA|FU|!@mp~+S_oMzi56?k6@0Oz&LtZ~ z4dY}^^F7nov*)e?Y+_)reIEbI`F!VV2SsQV;GglntW0cdZUM9%JjHyV4gj3K6A0e# zhsHN{l&c5qgLXwiS~?DwihgB4;L~^~9Ht)OX1y@C8ethbW|pYI%Ni_g$EslA~T&ARwJnBp;5zJ@W%KV!au z!VnV0_c1Oqe*{R@nzxF!9Uq$AUbZ=tPUF#7zS7`=G}oF```>mx|8V58?TJ(M@}F}WQ6I8% zGwd51tB2Z=E_)0IY6uQFb*Atjx(4e_^&$tRT=myIjb&vn_&r|x851HvjTe5>xca(* z!KU52p-9;RR$AeeiXY^vzL20_GfOdD|Lc1jpSp&IUzHyD9l+#a1DfKTL0`XpleDop zc0e+)2S=fdkBCUW!*p4u)o!Hau-ADfT_0kPhR+~I?DMc_SQ`v*_uTpO47+#N6)!JI zq3t%eu_3f5(a=&(Vrcam46Z-L%ihPNR6t4su)ngECrbdqc@=E~g?1L2l5smc_BZ+Y z&u=Y7v51I}b+((K6t}VmILO3rxDil_0G^1zomZIiUs{~iGV6GAMqQm5fMj_?gCBZf zrtC^Te}6G^^P{t4-4y(AfI;gH9y|yz?Ll&KavhO8oCPN7+KOKLD^7uU=NQ0RKv7pV z_N{v0>MEOKqS|YHt^FxP`)S0ZwO#D&*{3|ZtBDi-EP$00xbOkcsvmO;F^+;)oy-Pf z+Dcv95l#pY+EPPh9Scgzu7;2;eUnGGUcGu1ua>J7e1mq%ER`!bDljYpF4)M#BmrX> zLzrh(E%@vfeFmzE3eI+_Lpf@kK}NsXFl?vyX>l3oZW`!FD(~H*l7NQkIw)Z6FNFy+ zlI0S7z&6C1Rl~ps1#EMEm7IK| z@FoNdME4+&DDb(}uo%5?&I5-DTFFwNl~0b}>}pT(E&-f=;q+-LFwO5ODlX_gSLePC z^zDwF9o@aPH?7q54?Rq&+71t`@t;4-nwx_FofkjcQS^LnZtf^lN~hbFZH2a9?q3|l z1Iz+xD6;@SRP)X4bLZ$zkoWp2?i7GLZl;SvoWsI0#uByhQjE;SSUEQ7 z@LG^TD+bQF2r|t%`G+5-d=Fb&*HzUMA;?kl%fZ<-cWKP-f;k<%<8Hr$O$yFJUsU%6 zyp7Hhq0+OYSs^gUYO9FT_8teQ zs-~vtPBDFC=OhbqyX$+-paO3AR&Qh{9NHMHICV*ufxL$O*aNX ztavieM3X>lPdV3gR1{cL0TU^`=Y`4(S0G4Lq;bHja zpML^ewK1Z$!?YT6*%z_@b>XVOJAkD8PMZO!8Q_bJ)o#Cr*`Lr;ce`R70ce%MYx8l| zZlvSVw{PFF`wfn;aC3XZm}TU*NNsKHP*dCn=qv#1_8$IprQekI?vexiS=W|;X*s{| zvpskgT@vtsqDI%RkffBueuUS&r{uN52?oEYUSJ6{JVqO-`=!J-_SmUq0n1xc)#_N6Y^GZ6pdQ|}XV~WPeA?qt{^K{;}!@>N`IP_82e*) z&I@J5#!P*+F-r9o&qc2F&Z`wopCnYs*5*cyDx7cr@oN6c2aZ>Jze{<1m>$tXXm^sMQYXQ8W|JuA~Pd(C38^&CfrgTB+P>1}1 zwFEv-fqVa~wFmQC0yq3S8|9W4i!nIx{fB^S3;-vLhnrLCc7faw6Bl0%Xv(Ck;3?U1 z68#;Dh3&`9m@z&`Id$Q}1xO-lQS(6Iuv#u55Tm>vkjcVg*wgYc=h||*QXpB8evijZ z{hmCj#Mq+@`xZfAVcwfvB3?tbx$0LgU0RE=r5;3wn3peq!W+VB=;OY_XTnlbk08OF z#n&@15C_nVA;)8wJV5D%DoCZ+Nfh&owc(;ylekH`#LMd}$KL|uh40_LyLovX;N|rP zijS=D01%w4w-Efb#n+U68oRB#UF1$$L*1FYtu2VN@4;TL(EsI*fY6Y9^*E=Z-NYf= zrQbqi?=cP`YDppm#pX?O3k#lvly3n0Eq~8hL|2=APAiRHkmnA`1ZNDYWyKtflUz;p zs{x%6hd(^Oe zcj(umGLZERh{dD^z4^NXk?6m*z7+R)Gd4|Df` zhs*o$QxCb7oa@p;Fn|JLW05gEJw0YG9;_c5!nKcFgJRo>o=?3|hFuBdo~^H)%n$hhNdD=Q1j&u`GbRK-x9b6B~vjGg-W zL?wpZS2A{PVPVyg(F4E;k{OkI_*MSR^2{R_*NXZ=au$oc zv@o|A7xd&)Zd9&k#-`VU=MSb2{FdKBH#aeKHc#M?hlWI~c5PY5+S%3m z4X)X6AkS0ajC>u+ts`%h%N($#q%vp5r1;6olG2aYg0y8|dC*ocyVP@m4z5mAH?{5pY7OV=W_LJ(cP0#< z;a%h{7O9Q$0p`7oC-Pm!*66nPAkRR?g1Fd+%10aG{vA3VA3w^FjHaW*f>_#1<^{gK zf*wf@iXJf05Y-F9VuYXlSg>TQi+OEVS2zmOZ-?>vcC%QuVmw(0bX0>~F?1zV|7lzH7 z-(rC84NR=B_(cli&7cCm;(;W$<%Y(kUW~&W6cycNY-~&j?(895Gc#|TJPh6GAbp_h zAaMZ$m;B6$5N)!$m4G@chvLz~(sE^>*%nyBK+g2&%^N|84zr6WsJ3$&8xe zNkG8n@bGY9`Ct@O!AyJx%_Q=H_P076q6n>kz;AFom{|~%0&+9o_JiZRGguFcp^GEh1_lq&V`3R0GM*)j8INxriq^sHccJ}0ko6qI zGosT@tOmluj4F&bKHm<2#i>_6OqDoyuD>|}3WXs%4mtL& zM?C2lCr)>&Ua>v`a}-O6*6e0S7lVxtl6vna_k^9v;d5PAcb{~qgfN`S(jR|sPqPJIM>?lAlW^!_QO5l@bz^dho zGVFnr<U_dsjs_z^sT=P zKgBa(mV;*Rkt06n71p$qq;%!VdMe1NS}ipb6cRR}B-+f}2}cCk{%PZeC>qpI)S7Mu zQ<0KaX$z*O98hvNXDmHrSyoICP(%PVGMWAPa}#q6x%X}*r-x5Bz$G1YCJp;}F4Xm{ zpO*nmh;g<6jxiRx2=zfQ%C=S2?`z=CTxcyY?Nnb~UDnv>PqbayZBg17A1+%)t`LRR!?d(CZJbo9jy!7*GFJY}j;;nU z!iv~RMGflJGKfa7l;IGx(8QufuU6^)4@eA8gsnMon7=ZY+;xUfeU%KPbC@7t!ENIZ z>`uG33iTt~sZ$YnLWRjjj|=uGn6-}aoo9T(`m? z4!Q0!=7k!oS#mO2SZMYMyD;wWw-iGErGt>sQG7Q7NlzZ`J-{_C;a9h#qb0MsEl#LJ zLj^5XIwMokUpe><$c7bm>ZE8DBLv-s>|{60YjSeL zMOSWe{d!)lvTnLs1|XQ@^WgnouWh}d%DXbEak!z9|N0RI2KRGi=&n|HN@&qwgLYB zDus3esNDj&HJ+iMxsfZ&v4t-0_E;Tm&BXNd0DziS`vRo4{UJ3RS91>G2vjsRHO1Q% ztcMR1m1hR)&9;mK=n*l;x<=;=BN|ld7dr1B+tKJlAM(DVgE?0{C1}$$Lb$V>dP4m! z#m)pY3s-JFYeL?XM~e%@;64nKWoPYCJWVedcsvI4N?&Y^UF6Z*ddY-TspLsPL6x@> zA2x2-bCOj+Alp3Xuro9rh>&cDI8#*8#cJ;D+3xD1XO-Q%}LwPUgP@Vq++O`))Li&1z&8~Qx-1; zGmWfjcyN0{61K+5%If=%AM=<|_PVlg0wo>>@@_Q7tik2BUgc(Icf;_Z`Q+ebH1cVg znQyDA+>vveU`lkK@|;(n4$LZ=^-K&}*i8+c$u`Ps${6{oc=A3O1LPs`9Y3x32d8@h+h|vz6yPQ**kCtud`eMD-hp|gGO)F< z_0P!6e7{9tj0rFTGTJ@F9z;ua`Il=6Y6AU)0|XvBzMe*~d$sq(iJi*I%3<{midy>w z1)t#GH8C}v$8g;o1{LBF7qEf-;3jvnFcga0&DV<2Qj$1|R!}ufdqsW3DGHPqJ+L)G zcmyWNh_N^^GEA~Ef(iyqH8?8?YT2An@2u)UABwk$F6A)leKag9B##e60)pYhHS87H z4?|P15b^>9p%%ApecE2pS>*T}9sVjwWo-?|MCd`uO9A7^i(+Cc!BqpHbOqpaRJ(+V zcp&h-k!%$xyd)#D5lh*~)c`4g-0Xf*5*OJ6X@8i7CIEc|PK%qTCo3l>9UmVb=3}Iw z9C-pGFs0|V*hB;i2dWZMu({achN) z1_{aNCTFG7-G^O-#aNdpQQuIJT?&O(zmN#_^YI11 zBYDU=)8p~uuW+lyZMR&QF~#94wU|M2a^VThXf>U6$m~{T) z%{V$<1cM;=9riMa=5kM@7;P`u{ubFo#m8r;DbJ_#v(oGOMXMk`^S%?pGDR^HVkyrU zUom}rC306Q$T$4(K@lF08EeUH8tl0quJ|}gtUk~r*BXP-C6Y z6PO09kfF5NNaYmueZWCbu?`(JHZUlMxuLaLW=2L?Rh7h;_U6Ya=X@!Dd@$jkNKaYJ@BTfZ2a=H z3`h}qJ^8z!t*Y0ovZV{;7=X}R+RjdxiY&GhTI1{Q&oX6Uaupd9ou~#Pdik-cEak|79 zFvxU=c}u*aLbg9yAz@8dTFAnzFXF*Ub{g*ToH%TXWIkcD7QGK(r&~E2c%QDt{y8!f zxNaLG2$gdz`}p|-f!$Ph}fF}Z}C_#thwMeTu%t!VY>@84SQ>G~% zDMLGKewiWOz2G^jnx}~H*K~E?A}(q@mr;qi^Fr;`$~i11n+i6DKl9Pmc@Fcui1jz4 z>{xC(L#TgLw|p(;d0l7mylL03XG4_3J(`3pea$@qP7oCs{a+1yR;~Uw-djE-e<*GQ zx_sQ+h~|$3P?RVZ%S(<3`~nZO3FZx8gv1}f*W);$##29#BP7qAqejba(p?mWg78M@ zejt>H#cOF?u~Zt3N-646)eOBgAPF|-2nh<(E+zvpys@Sfq9rbq zVj>^f_ZjVr1U$2!B+8tNc_JTL{tnC!=b1=XR~r0|(2If)^l-jade~tbi1oTfA2=Tu zM4!8Gfqrp4BObrA<&xq7>JvC05J!GW)rvr|Z5-pQEYuYj6GK};?9`^{N-@9ccaaqs zw<3jk9IuEf=G)3ct&EH~fylmXY6?K8AplB)oA|kY#*Ol4w{9jCrdtURX|f+m==Lac z@$%9M*u)dK)Gb>A7lce0-{G6eD;&)&-pMEiX|R3=y$P8?1=A0)=SU$6H5A! zgfie4j{AogpS*oye$W1cTBXD617)U#)yF=EG^)?#El<4{ZF|=s7{_eAL(wr^TK(Hd zrexRM%fqXc>RMb0CEQB%QDd8EJaej*b#NUM9k>X(mY*A?Ck+ zrI!5|wdzihhmx1DXq#rASM)wui!+JbIf^bckW1Mc-JR6+2g2;GJs7Zz1NrCtGV_@* zhBe_KaLQTEAx1K8E=OkFdW19b^*?9b*o;5Pwugc_tUe55AA*JaO(w-J`;ZI2yuO*5 zPS&uMEfa0{xBW13rI&31d=QCDZC4MKn>0L&sba5s7X@BN3CV`S0p(*yXQ$S}?Z{2) zRI8iJw=x3f07QAVZ%px@4glHc5v<^~ewsspr~f5uR0O(HLx zZ7p))@x<_PqlkN6US1n5YylpYddcj<0<1GsNk^jO`xkp~_Z{HxQ8{1<3`|4Y{9a|g z&##+ZzN-@KKDuzGiS>6L1P6>QI^dh7(MhUi8!>`bATI{eknZ*C7jPO$8zp@DbfnBt zop-bdEIfRC(a5?miS$4<#)Fvk zdZki||L1D!WQ~2tAAn{&j*UHlTonaUP%O;82|E7bf1&P1;>>sv_G;TTY`a=PS^qk>z)?`tY|%NuP`4cEV$MSw%^K=Dbcf zf!$=MI-VN1Q-O1=c{1BFBv>~czK{umosNSRTm7tG$|$&p;COkdDQLYm3%hcVQG+~3 zFjh>8N?~wBfI?dE&iGznN6vCRFHUOnuaw zF!l-6)f2=oczptrd5Ff7*y}3^0nNn&{TJrcyl6b119N0vtbbzzh>Vq(PFPGr{sVC0 zAxd)0{JcP;DF|1nLo9jrv)q^i`He1qhPkoW5Am3mK?f~}!c(04ICfsyA3CanAMFIl>WOEP2>x)O*C^5(0 z`+)Zyj8GrYth%$0Ix{_;qjAOTb3GKbVml^5E~cXpem!b5t93y@7AfC!9mNX=fZntS z8@`UZC;LDM(R-Y@oUWU&KrEzPx9-4^BOAa4g7a0=E`*BREN~?197{uf^4;a7P!U^y zK&hLUnQQSxKpq@LuXG(#?ap#C*DpH%;>Ac5ngmxIHC_xNhw0-!(;UwS^N@x{r*|@5 ztN0|!m|G()UU>W&mkscB?1rJs#qx0M@XucN> z$u_odn9QCAPftY>{??xJUDAkTm*wO(;RovoS1!}S1C}cAkZPm$QFpsveAW~VzuV7o z(f-iEfHNYqXB(d%H~Qp;49bgSic0w$aEFJJekbuva>3lZxa1YLoAx6bT=ZNO81th} z4=Qr9MrcR)M^$4yRex&XJD-V($>$=+6Qo-NOh@D0hH_mTy%#M#eIL3i01s+hPl#72 zD0|fGCSZ{P%?#@_AK zlZMiIJFoz_pLw2Rxds~!P^A~QkHFRgwmUO~$;Z^o!~L%$X$?$GFPoWh1Fzl@HG+ru zzu0@zaID|`ZB#{x2FgsPBvXcDES0g4GH1$AnI$QeDN<6RBttT!$UHS zLKspDha!##4aCJdsZE048D{Po^_Sf&dK%-=od`Az`Jre^(8ZJkPk+O`h5qiD^XDtu z+oPaiEnk~~6&)Uf)i`1rfU+m1r$r{6)+4R|8HmmnE9}{Gb+0ZS9>KOy9iBw%h?xpV z91h~zKz3F3J)+BCL9$c@@`LeHqvK45^VYa~_w2&xL?A=e4%x^ezJKtz4d@UqUKCr zZS;jtKh7`VcF?~lvEL&s!gg}0vS)LgnqgeiN*_zf-NC0y_6k+4d=T)Kv4?Tq=Bgza zVeNGHob=lr1~OH6K02x?+<(T6jB<{q9D*~NaNbm8^jFL3>YsXFzA7jO-p7Y#0f+Dm zYKYjwN=W8=+$U8oF6M4!d2w)t1&e_Wp1ub)=U@1zGdGT$z?r^zZ?Qcm` zL54*^s1AWIC46bt#|>H;TV`&9U7Bz^qSh|Dj2*yjmcKA`Am<3j`)Wyv0!&RK8&^Gs z#3%>yG2ADd(hnx$+Ba^a+6mTZnJp4D&gFy3)e-^dqNgWqy({WXq@K0Bn>{@}t-h2S z(Rt=&3K7XiwDHz8f%f;h`GNJI zHD`Q({tT4I8wsF`H@TIY+ZR7bBeL~DZU=l(lAp2&_|zbds)|PTjg6gZPMkwGd#HpX z_BZU`N!bXqwI@iR*fDGL)Mou{u6>oYwWNhhP^|)xton4JMU2;RrC&e z|EMTdB)F5fH28e30+hptIvw{6Hd17wgMmv3$X^Kkl*wWz1ism7Lvsm*D|FBMFo`6X zG9=^nVfJlVTgnz^qwN}&ImxBO{P!|G4QTDBKzDh|t~8+kFgsT7;SvY4zvcMGG+!!k zequ%6;*K20s>qYJw(N`RjseMxXQ%;Grse1fA`gp{0|Pn`u?Zs#Ny6*hwNPmQyx*XG zQm|tmOksW;IP3Fo;i`Wb81UB@s;H^a1lV$&VUrHE;kqaJ`4v!;jGuQCzw&PBf4Bge z+AWSJWZ}&AM0^1@PQyE7P!g0VJwXqT>Gf7w`|ID=k8|N_(~44lj4XKhFwgnNeGEEJC~aa#8xshJ$Dv{@Ag5n}NkFGX~9vw+Bz0%R) z7)WRFczv9>)k;huRfNJPG1Z#@my6o@IPwn!gt>5!4fdYa5}h4wLq|`|b1ZJ2(#xtz z33I*oLlu3Is^($|aUP0XSVVCW{8=x!T&TrLqOJ#%g?4i`DjI}cozVpyvZ-?&>&~ly zY5^F3d}@1J-TpTLPw-uk9agoq9aW~Do%o`Rk-`SHG;Xuw;d(Ouw1DSdhG~hj6aH}4X3GLE-BQB(K*JIwo4S%ix@$j{qxcefe1wn8Qgp8^l z{v%hZz7xxwgKMnU;R30NM(QP~tyc?T!MI)Mu?YgHluFkK-i^gYCf2RjIm9iAb38Aw z8dPEgh)VdN%{+^SzGnp?C;|vs6DG(UYkXVfQdtfBP-=;_a><@MY)$@9QaXEWXMuM&GARbp-aZijF$wTV^cF;fb$E-HK5n zAc?m%HGOERl;m12bV9udMENE0!_ie;2{j!3{$vW>{+Ta5J@H?z+fjR$N!?jyQdQt* z`gIyKX&&klOl@wVp{<-nxuczXQaw>u@W3q&D>N;~EhFAK4gkq)t*+J4H!E~mp`En9 z^en_+xZA1PvdJgnyC+v2LZW5RlwF$M2=EwXyt3xeLu3RdyP-Q|9l z&``PH#AXiUP!rC)(wHeC1%@$qG#-Nw zbU&s@OTocdA-_Mppd26u*_#5p>j!wy7;S6eGLfMKawgC*0w%)4fl|k}v|#Pe;e?B?|roSzGH7TcU4Pc4>>hk|IztLW2O>5A2@=H~?r>sG|LI zQIpUy-9l|$iLPQ7Z#XjYYYdXq4;~~)AR46fm(;v~nnCc53N<0(sQEca){w`Vuqr(9@xZ@gWHD2#*SIagSNDtO{(!6Zs$t9{-WYy+6LKh zit37ribU0Kh^H?~N>*5Vn0WV|#JltI+T&Yprw(i>p=n+E6t-j%f)!f)d(iL#U{%|# ze1D!5V23z(pWq~12U!5ik`+*aFl3qX-XVk$Ofj%xmkvX@L0HJ_8um~Ll)=mhS^$4& zEB~}>9!7WOXv6m#3^=E3bjt~r=tb*u1v>g1G+Ib(08hD5JmJANf+P>D`2ghaT5PXV zzw)i%;Z|qHrC_?c^V)mnu!Ox#`WyM&4d4Y+b9vR8x9{G4LDe&j^`#$^*j8N_dS7n& zB!ma?3Gh3whzMz4tv39`apI>HdHVFJ`|qC;@!z^x$!GkCu9i|?@i1IBSFc*uFL$Q# zSEBoHrAfUQd~95P)aP_)U#MQt`Q_VxxQ70F<;3)`9?$1CB)Y3-na^iwB)UwGwl$oT zalf-Hntg(l3H?~G;`h`HL$GsQnwVzw;Jxhe`WXVME7?XXb4=^bGF^RrefB`1ZmRy! zv%Qyo-$Ug+v?G093&mgvoR7AJFwoNrvYvR#abq(i_5*%MAws-{Ruk zSjQ@2^u!l6{u5ZI0w=+g#|mnCD)Ru8&LFYkw6LQdBz-IZz+XT@qA)DRKcJ|c!dzfw zb!ja=?!50`NLYvN2k~4PJt#iJlb}6NnJW`Kf|eHb{(cs_y*^7Z2p=nwlKs6HF&C@@ zg&kIuvIG(stgQt!j=wF}U>Z5t&h>THvNJ7rrVoekdjpCCZ@S8o@sjc=mBBux_XX^o{LMYb{liQ-;UM4?q3`66c{=yjKUv? zEZbR8Avkf>qSgay$A+;CaCJrMuaJ3=;_b|tFZjuDVbKO=S04KUhxt)L?)8HbUyre1 zh|HeSq_h%T?iVj75#&Iz@6SJeP|s2%?U4LP3hmb`SFTV!bW#Lq%<;i zxS6}&8J7e14{8oFuf{2~#~ik2HBcnA{m)%a9n8bDXde)ALZihXE*WjAzXm2Ffc9XX z><7@CkeBlFt(y|ngE-`x_;U7x^a9f2cHm=`m>Hn}BkNV~GL5qDvhxM$4;?GmdQFd1 zX^E}^XcYw@8S!89=4;SFBX=IRvMR@4ubb6GG+>c9PKkE(HwJpRb+|uUpw!5AI=j5= z`#wZG1Gxh&d;kcAaI9!R*X-ivwhcUj8!GLkb0`3w(*SI4xFy zryp5+ODKjHtX#MJodUfkS{gFXL@yb93S>i^_R`YuKMZWasQ$4|sH% zb1FT%v=?LzimL$uHXLp@ungSB>8FnAD!3O;bNqH{MOdP0aKp%b-0%!uT&Wk^R5L@bGr+Izu zQas&G+sOL+wB|Yr^M?&8Jom2a;Bex^U&agrz1uo$BOkg>J{TyJCm zwic?1H;s)tjvW}V((VU!V0~O4s<6iZ8&GxijE>@B9=obOfj7le=yS#zPPUIr4!O!2Qd@;`EA~fSc+3g$uTzS9;WFJk}*7Oi1+*n1K@Eky)*ifDVDQ0&_;- z6+#)rpski!nyNkySeM#<%P2H^gei^525iTqtA~fs?;m_zeXe)D=|oxz$Xczft&p~| zahO7BU9L)=x2?m8V`TCK^lkM9j_c42VH-JowI97)JhZq@f6M`4dflzjX4MI?Vo+4M z`uqDC1o*Yb6Gj538Qtf!XN@nxoC(JGPrD(5Z`wI3bCh{Yb8`qVftP;>e&#(K+10=F-pGP=qY91|KDO003cza*o}Qod zQbMSP8|Z2THVCa$>C_7xS~QHlod)Iy*4G+<>5w=mQu8O-G0_W_zMuu`^TL(L*Z~rQ zpM68k3aoz>oQE(Uc+nU{#mk!n;#Atx+ZJHm@Wd8?XAVw>4{iQt`d{OgUZuQu+SI^? zh>wYBi;PoM*q-L2%A`5- zj&lw;g=w7fU+HRne=h!P#U`&tGy9nbVG&i|g;UkG=Br7YBz)U{TQHoOK%K<0*Gm?U{ex)$a?e`lFywP_BMWwR_VUYo+}sp5RCp7^e*>cJ zz7ggx2C!c!k?C7&COe=*DPzjj8dX9ql%>JJ>wy`r3{wh3OML&FhymMs6vUYFUCj%@ zMUWJ%>mMa+W?n6)HOEuYZ`rcrcXptMp~X7gwY)PA<4lr}!hDnH@M)CyECKvo9oBoz zPsLJ5zgyMPk{d^1)4c9!kI=_BB4DLc`hu~FA%;%RUbGG_qgWJO%f6W&fT;v*M$rVI z^u|J2F{;36l`al6n|>j=@%m~Yz5P*TL4qbhiyBpvzGzlE6I8>drT} zNpv=fL;3)T&>i{8f}5>HkD z^fZwz+puf4f8u4eca=f${g@b$#G+>ZqO&(k{k`v8xQqI*-E#TE>(|Nx#VE?ZcuTZ= zT)14+5ihi*Kvds*9W!&J(oC#sAQyPC1UW!(pl4!A%KuzZ;g1FZl2Gpb!@8z)BXifP z$4r>hepUH+q?uD z-ORbVx;pS(ZUpXX7783Dg{D32fE*?q0BN`QU(x*7nFIzqguPNOIE-8HaYv9un$1 zr|)s6^+5lkHFP6>v>zeyYR@?lP(Fz=;m|#C#e0beCh2N#ymj)*p(`exF%INf=@()N zn;yx5mm*c3a{pWX+qag`#-U=if3ci(2C@m9NJRP*_-0l9Jk+0?nVJYKvMX!6#dsg1@~bUz$IR$<}C zC%&TfJSX}-6$~Zh<)GTSf>Mb&7 zU0o>^j{=Me)~HL|)P`M$!!Z+~H3Lu&udJ>(<0g@wLr_sWnG5hSe&R%~5WC>rck5_6 z3^v^Gm0j{|AiB1X%lbER6x)6DOHOC7XC3@e363M(15Xc+k#kIN)9gh*OX06^bGz=I zoV>h#uuAaX0|#$r&>B2wx)&CY>%2LRo*Xc4wWGw9QrQ2@8RZ$TjWjfym>kmeQy)os zJ1eH_yD&4O?04k~?K;;+|Fmq_#i~NaUcVEOk5Nzg{&h6i@f@Q>r)0|-b%;Oc=qS9L z&pNA0U3=j%lXjTL2-+G#Xr}myb(R#^YZZLYT^ZE2NzowiP}ZZP=9_*V9A$Czfy`dd zS&`J#O4gm%uMfTY7=I-)6&jfymo(wG`-Q^UzV)TgA4O-<<`Qj4umTaPCH-`J@+d(Agl=69Gi6AasRNT zP4(bnQPW|7`0KTk2B_Dq>xZtMYAMy{*0rDT`u6t^MS~P|ZoSYC|LV&c;Ysfqim={Q zLQXrZ1MGAG**Yv4dY^oRi!8igk^~AU>o&pwJY~SmA8pOL9&OX#UukO_tZNCPRrS9|Grq8fcEhGC$Ur9$D zszkwX{f15wx7fGwT!eKI^A{}d4^_-f_8+s_cLmj%nalQHzXl)VS0>@}!qfkOZ(dQI z*O;cN`A1q6$5mujMf2%9MtDvT<6L>yfn6fz!BCm3(700#**i=NN}r4YLPJ18E20Pj zI4ip6jM2=W_-bLKcNies;qiPc??9#fwOWl@25t9r7BuLD-_FVeS zvS!Vi%$$O>vLrUWl3@xy`fWNoI{bAMzQ@PhgyZk{bI-Y~uBAzw`4sJkE76pb)!#vK zict}lz}pAio>107+tW?)fL*h%l_$p?859AV@!@Y37QP9>V9)TdI=Vwbpg~bZG6C37 z1bN0x?#IML50C~WmFGMdB-MdJ3HitCnwp!){etb;!#L-DRJ>R16aEv3riyAj(GVoo(Czt9ZnmsqrX z)HqOA*HaTw^kMb&7xG0h^y`UQYR8%&&|Y=2%@sg`I*hg-^K>HftsXiIDtNiz0e=+e zfE#>v44)%dIxtH)=#cSM5UJ}K)t0&r1d6ZS2lf)VFU=C@LWkglqNY*vs_-(_vAs;3 zL?4;}NfG~pDmvuRS0~3XQ-Bf3Rhmg_64%gGGb{pSP^x)(Mje_RI% z`zF5NKJYQ=#Kgpal2!uww*&NmO5!!THX@{*w!~r*wuJ_)QH6X4)izXcD*+e~LK;Rc zp@%*9k&XWw(87bbaqpJiOMmuH+ik+AO+2-<3`JfkjU;c#p5=&a$ppd7U>m zF!0HOas`zty-FG#rK-p2P1KasJ08-@r0@P8E^_ah_b)$pAqc$SeEin4!b=`oUmD|{fuYw@+*y3Eo0OgThW0VKBU7_&j$47`bK&mDr8S{rxGS~{AMiOHr`79LT#U08hK zbo(@xkF|Y{v5EZZRtCrM?+x>uz26oooV5^_+?Ia3lZ_XjAWbE|1++W?SUE#n6cT3K z(hFioU4G^kvkycq1Pl#Aiu_7d?*z?Z~)vH_!wEWROYeZaMT z01iFbVUH0Q>mWC{$k`-jqgwy9_v`a5#QwcOVa^Vbvhp66d;gv2th*ha2I$#mP{)km z=^QmOx`!ti?>Sy_6oeA8d;p3?*kDO2OuSq*kFPq1Hvm6!rP~U#MsZa!LDHMY6X8?_e6qIvoufyt6-m zpBzl{4NbyP$R1of)!K8dVP0x?^_uH_yZ6t}+LHHJ*`R+^loOMFX?{OBB86B^->t2_ zm;c)6TNC5&coGt6K7)^8qL0M|_{52~u&T6L*k0g;@J+@_T@UOx?jIdZf7az8+`#lq zh7Cr<*b^oN_gwp*6JN+C5-d0X(7H_>t1=n^?QzsIcZ6eygkI7i9TbS5+RVIMwJ`-X z4%WxSfkB)JH9btj-+umljO|c zC~i0zvCjL60af^v%lCnLr_lLl^?Rr_Yo6Fwlo#%4rO2Yi_78BPTS`1H1ULxequ;{EK@2N_7T{NwT7+AY=_MQC z@LgEiaiOT_sG`D;H=EUJ8bGO#-6HLXrGv`vpUA#GAR`H0gg18IY>= zs@{g{G1*qG#+Z|VPoi{j)>HvhEj5E8FjRLtB>)DR2NUgV#_!&*Uz0G^aRhEJgaHTS zL%4}aB;DiSM`HO5{Ljd`@;@u`8juFNDhtu{2ej?vicG!9hK(C#4)-F7Rt;rY3EHfXL zkj452xxC#V=jI9-p39(iT;84g%!ItZvl%MKvn$an&v^Og7ei7Al!#q&E2e;%=%PTB z)SR50Y@!u=5sw7k=_=fdlc|Yo)$S}7)U60eG!H!bgn<@7n8DI&vvePUx#dCVnXr=0 zx5*lX0ok+zCUIiz$gWvBBcN#0n68C=Y)BT6h1wsK=z~7LYAmq6CJ#*oSuZ~iF?JB0 z5!PieiJILTD;cms7nBdM0)a9G^N1p3O+0zb4ia$4$yObyw6u?N&qMhgua`pWP317| zG>6rUY@509%rP?N$Jzo@6we+I2>;Qj;evWaKX~?Srtp8r$F=!&K4Izngkk=TR^Y(9>S;NVj7_Ds_1J({yhZ*z z#LL(Yx}&>;6%7b}xy_5!Sb?PuiSFdY#CvQB--uNsQ%QH{&=r#v!DJUV+0_H4OdbRv zTlRVxksWYYa01c%t-CTSWE)Nj+if;tKJm02PxxfMiFLk7I1HXKkK5!nDGypKcot+= zLGaC8me=s_%ZI%pyLAgMa`I{5c6;xSPje`q(7C!_veg1#jirap>gvP?`3rTP`3mqmDR?z5+M| zz(AoplBbWw!p9M>z-@X+2e<4HDhRU39Q!x2K<6?orHIMxdiUviW-Mc4@v zRdHJhPMhc8FB7}h+XRveL)04%%_$F&4%1LslK7|BaRVzH!N(%N7*aqA;3BeG6pdA^ zLlp}bS2p?(_}%G|H5mBlNg9(n-StBMQrC^3AbsQ;l&OHMlaL8h@U(v)Tea;CqAqr{ z@>En+k=HUgHz$_ETnL5qM~S|f&j_rEbA*Ya~><}f^ML4?HEaKh`gNsA*6E5c6@!zXlB++$D&dx>z1O(u^*4j*MIeRRI z+h{F~-wNaKYgh}w|1YoAcmcfncgJ(ywzbK$O=UyN*GM*_sDDD)e`6gxC`2GR)rEpv zimdZhd-0EPthVdtcZ%Y3z5iq6PZ2+T5#fw1kbsr3HoB`CL&gp~#C^-ZZu7mv#z~bw z%K%8gRwsMW*Z$+wZT4zxRP%p4tp#SldJpL#} z{xuJ9*Z{!>RgfU$(xK#d;kc$E161t!GzvDC6zFsT9nkirBgrv*_-7r!Tdse5)A}kA zqcnisq$q0hqoO4r32gd+17R?65TCXoiaACG2K`QDH*{U8F#IGdvG59;AXZ3O{pUrx z2*UE;M)1ntB*0+TWg6e$z=kLQ@|L@L1pe6Yp{KuD957vZIup2B4`1AGq zQ*A}R|M`Fad;$4i=kqB} zJ)=%#-|_fANI*KkhgV7GqyZPc_v1Vb~k??Z|oKvOilG{`CX1 z@O!jhwJYzod1{RRLa$_q_U+6@T2X$$k@%zZYy$gh%fEj8%Y3|Q4RKGSDo#qw+wP*} zB8LA%LqolsoMxoY!yg^L?K8e&dA0nn?-SV4dDD}EV$x>g<>$r4>=xu`;ERQTadB~R zxqEnQ8oA7ey^n&}i46cPFgV!2!69vrf4>#jyA}LiyB33~I@SiTsf-rA(Sz)ZKFdHAaSO6L_{GYe3vpK;1tv*!heYhT@ zoF^S#RIJ0_4=hZHvfOu5J?BS>=(-Kh+OJqqmUDmJLv6G1%IA+vq2m9uCxkpI^3GmT zb+W9kVWWH+@X~pm-aqZtx`k&9W=l^^Z|35sQN5b!OimZ6)6SodU^=|Ka_=7cTy0|9Jl=x6j?lSXlp8kPz@DG3F{A z3yt4@#zn47o)yei8-Lt8#E-Ql&oZo@WbFGZ%K0{34z%>8eG>5U8&U%|mfyTC{rk6S zY{asdwYD3_j51q$IcYT3rnhLY{Jqyi7e#0fBB*%U6z=u=`VKNNER43m)QvHb211IWIW!SSuU!6NaPdIsO@n|>4*>g7!1D&!(&q-VJ&+no zhKrym*Hcsb+I<+arGf9?J59Y|h63*WHg%LWlRti(aVQDp$EE{(-CaHdSa;bxor;=+ z*au)6lijhSWchUWr3EdtfIw#=Pv#hr^{n7)3}d^U0eaX#&+G0Q8XDN@SgjQ)5p@Vn z*!lT!X;f==TjX3-&?vWp%3*+MO$+?f0YvD7UPvqd%?yPNL1yocMT2M)M`Wb$qp>Ea;cVstzSN2H!P-2w0X|zo}ZO}2)~t(aM_C8 zQ&4aA*>*)!P*5q-WiXJPj}XoBsuP46nA}wUC0N4%5EoP@ASfW{9v2^A10dVoA3P7N zWMC6>5RW&5tNMfG^X;kD-qrURwc9kWbQm^o9rKPg*}iM1>glY)l+5j$!%VML*E#7v ztL&OT+RZkZZOGrTs6K3%?=hI7cRMng>w$C1%WD^`ixnj5(q=y>g@;A3UZef4qa`+1 z{p)1+`{kIX@~L-JoUgAgq&q4#I8-)lyyT&joSih_xqF3MN#10;8Wrc7Tr|wVggcP; z9Xf$j%x~oLod6D#{gYVj9g7K4Qq47ge|wA=@n*EMYGBi94oLi{rKRPqIUfLJCQmFc z^9{#d=xT)2=zFs)k+XYa?h=}48|SV@wzcYw4ji?!OCef4Dd$e3je92cKRoS&Zk_BK z=CjAaA&Ub)jFwK-?-I5fig4II(r^QfUELQ3ApgHau6)o$x{v zPtf-6rCFI@^YU{`I&|Q6v;u>OHEHeWFvZN{10cp-ki3xTFs37@*hc*)!@d`Rj|Kt-&6k1@O<%c`-IUMF-qvh25N z=q^CjVBDm+~2=R7!L{aGaIj%WVdoEF138OrjIWSMTS4~4SlBvn~C_W!tX zBxmGV-`e@Hi+-~zeD)*0_gy6iFZIsVoH{zw8hBIVnJoWHhXs$f$HPS{tqnKi7@eY7 z8{Brm`AFf!n`ea8vkw$WVM97QX;75>kD|Xd^vgO5WI2fnF?t)33Zk>Av zHoL~Te~ohD8An1$h1yLX3llS1Yuny}J>>uf4BIZd5VBi7S!m{L^Ax_vs3aUBifX4tO>f)vHkwfl* zsRS9@EKWUG773Gp-pmmq9*?1i0c7bUY-CI@F?w!)5j)8NpY2ZMcmJ3IxXqK^a^JC~1eA65?ru!n{AGKas%)MPV`AKjxrPA{M6WgF-~i>p zxT9|nUx%H(XVZXHmR99@%s2$R@5j6{G1A=Q#!HGGKisV1=+)=PFe}Uht-V8>xAQO% zWQ?sEfpZ3HygrYy>3dN4vmi4nyr;H?;TD;dfGhSqv9@6zYDU3Ont0g6uBmz>AVL<_ zzivQ`*-Cv)DF>rSGDryB1y`Ijrj?I5uzfThOBCSB6U`^*eOY?nw^Lhns3VNJAmAD~B)3B%_sV&k%oAtueYZnSR83ab1n~rWB9r!65P`};L z=Iu81rjYZDEoE-?0~68n1D#)|7Zjqb-L#Tw2U+Q3laASLYRS1YJ7RTrp+(zEW0pzT zo+-NWx0q6B^9wa&t?I{*j1tn?(___jw^$qrZqOAJ5eqMIe=e$lGej1`$C{S{j`pAb zNoEfSUwqaD){x^EVm7G{LPFn3MPw`tP*TVTk0Zsl@6ro|tLcv?Zp%5PqY@!|%`q&@ z_ndQvT1dSm?X#D~?n}Q5buu$B@C1x*m)1a_X~dx&p{HKUVQAHM_sCv*O4`N6#hC`5 zC9FTr*Tv8Pzj=b}J|||4h`@(JgM8qvG2Gnuac;2V6ebmN1xNDRoyas?Nm&{GHamgC zvoOn$Gv!oMhFGjd?S$DT21U}B_UYQNS0XRi!Jz;(OcUN&|M++|kMcE!>Zysjxi$zX zq`-W_poUOiz^#9m6Wfb)bX(bEfrY>c7c~Sq7?=DrRf;o6A$viE)sh}LWor{3kIC$@PUZa)Iqgm!K=o&!HBhhKQ`HPPG&UC#+#c1F2eKh> zcDWf$tL`1R8Ttq!1Pojv%F2AsY{ZzbYda+2r@hLcx5w1t_xTN(FE5U-2{c69o|;*T zcyRWHz@o-02?;X`BpfgVwhqsilEHlma0BZWaD!?7%D-}v42=KH=Y5u zut)ENiyk?ASUSy|c!9~B%0apKi_@{=N%@PzXYo1+SPrL ztz$70Hl4{xaU8z?q(8=~ptj)lW)H&;Q=ijp(m4%>MK8Ghm@~9|t#-eNUw2B{;!YiZ z$*(D@8G9Y`QuC(V<{*A|z4c!gKo}3k@}Yj+3j`f4lstV+YLni7)wf^)$WY zTYDF$KX3>a!F|vkoTQP)gn+n@Wu@t?6!y4Cf4z$0)qmI3#8yi>dV2L3MQl+st!A|E+YcdEevW5Q0cUQ z5}*~g#~6%QEZ&KNxFH1*P^@aqRD_9?;b5#cfx~6d->`i<8P80qe8T_-vkP&;RKWR! zTKWF#Z?&jQ$(%Mc5h_~;47%G3&S2NG{l_O(4&9|CoELjm;J9G2kp14zQupg}0}dbA zhzwpE;ed#LDsQi-tQ@geo{vndr5irL<$cannDyuUJSm*yUHh-&PNF(aDgIu)R7y03 znxU|nf@KUVUd9k!V1op8L}=(ED6kHOLYD9#dp7GrC@dw2Mi7;m=!7(OyPtVf1Wu7W zR={HxLd!r|V`BX6w9i6x>C(KTdX!}R=|S~z&+pH-S9N@7%6c|H$SA0$-HWgFhk*8M z6tIZ!h2 zBI`@V$Qi(B>$zd?8Vc_1a&sqEES2HyArt^fPC*97@j0Aj!6?*k7QQwsTYV;1?Y$uX zyGJK<1luEi_09>a$vT`HtoBGfkRM$TGVLNcoOwwq$ie)Eye$P%Nst?Bj=#&0pMz6Ee|u{>&JL*Mp?reqi`cO!q@WhH zZjfaSqSO?}6$NTY3z7mjJp?TJ%A%H+=E~-4ES4TYR6QDg)VvY%AevJhZ_D5mVSsY; zE*}*Y)iBDow^J*>W9q|U!g&b=e0v0TP9Q~;kj3olIb@%FRI;qc4D;xpaiTc|mY<(3 zTt)$l+O8=AWZt)DO=o-5FJ3HEc5E}X-WjzE#-i|&)(nMlY0vvtN2Mb&C%hhS)qK2SiT~C*(m6i-qIEdp z05@F}fz}AIQE<2%3VMYt0h`oyaVw`^(TcGgi~sf+TfO1!Sgt{bmDq4Pa75*f$sj2W zF~3LwXqt}P$cET~7!q}=1fSh7x~)5WCG#Wca^}q?UcYi9#4NH%5r?^<1LOl_vOef^ zap4fLYGzjNP%pgo)i~{%s!Fn4-mxI{+@a_#jiHG&1Dy<=uYb|5%vR`0&OeYP`1$yU zNYiXPvq&K!i!8fYspv5e)3?rAUiyfs>zzy$1H|}*McW^RyuYaMF|_)8p*LANj+mkm z3Uz)uq?NMyUEuCYL3fN6eiV)k&5Lv0<1RjErdl2)^G2kM(b{e)8grJNg z6<*MSDEeveEaVowkXy6y4p{bC6uKxvGkQ4tG;%|?J!x%ruF_n!dfnTCLqI=>H#u4> zoLNW2+MUr;_0N)%lSj#7Gfe-HmSHC(8z61!Z-sk@CGxSbYg3N7k-n3B&&!Fif z3|aIcIi!|W^6q@$1(S+UK2)ez*TxdZH}A!nHhK5SL|EApYe_+I@%M%Mwr+j>F{ zU;!%F96o4mb;wMb)F#LPN94hD0yi-U&twSwo>+6>X5(}`e-*M{y|UrUmoJrb^_YI`2V(^hpj>fNTF&ehb=*lD7GT9qur{(xo) zo%mj`zgZMziZgcbul2KL=HxWD3uhc_c?psTX1a-Z0}d!zLU$e!|JqtKrDiOA6W8b+ zoOtj&KY%yQz|5Q+%r29LfwKS3uc7_K$tI_47Mxn6xIVa`l8r{G;Invuu@>9`Rj+N{ zBzc+!sk+;|L6`ef>RmiL-Yo_q73ec+sO)XkBywRlpodSFkI}f;CF~GLi8Slihx6fL z94Rer7dC1GQxS&-H#409Z80p}Oq#=X5|=fwY}_V#6!DbbB6Q=08G=4Dje1G`>Z&n< z1K?|^RUqWLk|Z4<7|P?pe+(k8sp~837~Jtacn;QDNh}|w4)H1 zOF?H(=n=%{3V|>gc?!$Bk3cHah-R$?(1+9Q=no71AR1=i6Jy&fLKu>WyPDM*95C$4 zfW_*;>WqlbfYQu-j>38|30Rx~Y(BK^iI*2HLL5&zqQu&?2Xfv?WYsvrUOeh0LW|JQ z)FgY*!P#(L&$?3u531qE9w+DVMPvMabt3V=OWJ<3;t|M1IG@^hp>;FQxlaQZY(w>6 zrLPQ9J2~TMil#fyHduSs!51u@7?P?t0mrRK=g9Au*v9vQT2x>FBW5NU()0Sw`xk@kX6H3@AM89=DNd!@@D54E8Z#I$zk zf#-3k~?aYYO5&tX$~5fCn1UuFoyxGBQ#)8N1i8)pVvD9LKR39fC3`NxDwXn zpu6`?qY*}QApo3UGaZ%=e?V890t%jN=Ork%L9A&gNtu3CK|NHlb{xOb2UxEc*Y57B~yJJop}Mom9h`Ee)#qc-CO1}_lKAG%3L zTs`z+t>pZ@ugr-@0uT{=I${V;+iP!JcbU>*s{k zpR>Qv(VdHB6+3N1aSf_)s0@)NwkTPi2dD7~$xrx6!eG)7nj>JYlV;Rd*w_S6|K^S- z-N;Fx3kU-Q2brn*{4#39u(-HiT^)}#nfv5SM3_!t@kYlxZBIM!9M8Uda0Q2BcP;;3 z&}J^1YvNPLM~|bf3l0nb_ACT@Li>U!;XUH(bS3*~*?fyr-KC#p>z|a}hI7mjEWIdA ztkpKQ-#xsDDs&VTNm!V%|I2UUC{%TQ=h_QYI0nYV|GarwAle}HMq{|Py`&+)_y<6!s&bk z-#Ln_C7t$EqX`Eai%z7G%d~J(T8Q{qUoOWKSTq{<{_o%8#uSzzBfw`p z{gLn=kqvkMjvH%`LA8cxjWx_65L63q+<1G>gS)XfwUE>hz9&vCG63qbBS`S^fd(rG zNJ`!}KSlc%S(p6~&A%rR8p`0KK&d3Yr|Uir{NbJfh@;)llGr1jS%!e!b)Daztnb=S zok??f)Az%B_|+Pptf6^&eryP*5Fa!jf-N8;W2C(9n`f`P=)fMO_I#`@GDT=&+0sn5 z8XZ*oZUl_L>?jGfnOvUlvj^SazozA69^iE6YvcZie_=qb0T$ZNLTOs)@({CtUYAS( z6y;FFv|=07G-?S#?DcouK~bnjPbtjP<+JR)m5#Vwqo&q|Xa|q@9w}_bOBW6Ub7qsY z3Bn(R;p>}Rz>Y-@_+2XK@Im_~yi_+3-`_e(j{<9c57P296wiZ2rHgznS5~hl)JsyL zftC)H*nLnJTTnTB#B{IFm2~<<$0jEDRO{qGF^7fxt8B9}?)Iefvo}Aw+Z!juB-Uyi zqi<9_D)ejNbJT5}hcVILPe-u+OdA`0I6LzqZ}3p4^wmmX>35;o-0UvGNK)I>K{OSZ z4y1*5c6^t|=nl-B78PWNhbg{6bxsu@A1lJ^w8HGe1T)r>?%hBfgU_9%srCW;lVQjhqA+Ghy-ly#`J5r8@4E_Qq zT1Z;j5ZT=jJq-Adrw|@gF@JkXI7)~&+ORJv9hiL#kFk09oNTi$IRD}Y?*%mJ!ImFL zDF^Bt#$boQ!gnudswM5Hyw}esr~tunkKnNF8HZ;;%6%E^=`?#L1>p}N{-FRSGZJhP z%m65(Uj4fS_qSpA3?rn(V)%uJ39}ZO0qYzij#tXFOd$yQQk5`6)APS}%>k144cnD7 z4b$lSN(pc^*?-=8@Wu%EDfartIcX)RA zA-=HGkeUno+ddUv$cFJq3Veukrq#Qm49*lySEl;U*6|xX9H<0j!6rvIU03sDr)RU#)fVHh%q6 zX7#|+YPL|UPB?z&*4k$ca7CK_(z0K*~PoIy85-44t%6!T|VSkL4I+#^b z4d(sndJk@%l8z=e65!s#a_&!MRCJCwED$~{0poES%;E-R`+9pZ=&>XK22ze8q6^qr zq@p2cFMt(tso-%DHCO=MP#VrJSthOa`0-H-Zv$PMZ5E!7n-QZ=!BV4&rXaNMYFf1S ztuh_7IiNNtgUN-_lODku2-z4#=va4|1-rDS5Qlkx+o=7!BJP;*YhPD>*cM1RBPBb#6DDEx5ihR!Yk zETjomFG4IK@)>nqwD0|(b>cRm5)I;Jp&>5e_vOx##^xmDOBB_jh`}7iF4*Ith=Ukf zTwDx1DGe4$3?nKz4SN@AQ%-gRYE+p0c!Kbu!E(;SI#YyYI}Fp1D#g=ouXwx9&vM%v z07`t;=GS4(6?n#zbc_iHHUichLKcKCSSYrj^iJQHM`I&O_MDZqrE!)IJz51AI|`16aA8D$)!UySvGIx}QBrLyba`uY+OPB6kX zAo?T-<3ln_T+sg_09qE@{e|e}(HAV^+Ib19fh1~R1E2*DeRZV2OcpFgg)TK2_u3wz zdynVZE z4VPCuDKdpatS?|s9w{N9Bi6=<8W+aZDOnf8enN;%22fJe_*(024EO~>#c>xF}%)3@>8SRaFZ(0SY7gA z^v^;VL0tk5(NK6D>IAeM^rRDUl=2rnR>Y$CB!eupB@d-Tr7`D03KqdWR2~S%>0mcl z521d9EuDyjgbuzSJdBmM#^X#5-VzCDM7!b8B9uJa0?Ff7Bi3;>s`W2F6JEbPI{wf^ zh$~3%?Y~p<3_d)dRyAjz1KBXc?Rwi*uyyNJMh=b))KINIGw9JY<4&_>Uxp|0cIwqv z6!vhkv!}y1gT-LiQ;a&uu>TQ(q|R^LsQPxvXKY}=?ZcCUtv5JTQ=ei6p{ zjb`my9k4~f)^%Oy(Y~+hnf-^#hmW3w$vrIRoX085eC>_4U{~BYq7w&yGXj(ns=l^( z#VbUxfFk0#&5*wGCa=F2XyP{`NK+x#2T%G^=2(v$+XS-()T$0{2#3E_C8<2 zoU;kscrx!8`&>Miv^kuj{}u!YA?W&dT35gA?%vm?+hAOC{Q;JHr*59X4^i{;0{SQy zG3o;mBvG3s?5qs_ruYQo{~EAp5&F^G=$M(s5U2s4HEb2MNdJS?M~{IH4akXxiM(DO z59|D#Yw=P;>)EhF@667bfjzbJy*WiiWl={8tj7#qbk_2>q}^MN`r;;hY~TJOmdLpA znb@3O%b3s)lA1mHIC_j8rdW*9+<(#QmmzKcuB&4+Wii8phwbc7E%e{1X9jXomIoTO zVwsseG<**!%MpfySf`CU1iRoK<=+13`)51c41{&Xf(|m$K;OYS#&gP0SJ{18ziPsrJ;WB79N)(#duJ-y&+Q{Asq zSVwR^izgCsqXyQUkE5rdM~a9-RG*{h^z-bY9*41h(q!t*8n z(xQh}tbEItH)R#aB@Q#4A8pkdsOf$oMHX7XMolb%<^d?}NSl{FxH(6{5^5CiL_}Eo zr^Y2VcMSZtYKKTsw;@0iXt}U^X+AtZzrO?`q~dEnRY-k7KZ;9#yduU~Zh%Bbk`;02qHA95on$s52HC4zfFta{8k~jxR($vB^=V;i(v+(>0Tqy6(KMYSMwgeIq zLpGR?M2&M}Q`4Ah2E}K1!D1XC01q|U_H_r_g#Fqr$`=0&Jv^bHCgXo1T0sLYg$@L& z&I4#@gzCRMqC@SZp<57GDpNfl<*uQ6BrO99sWyVr7m}L zl_MIgg7YEgAtb<{vJBrImYJ3t<{s3D2`I`=0gLelq>OOzDiIt0h?1-Lfvuod6 zV;_4z$2&aFli|Ma&vl){TI*aVPQym(Bagy2_I~TXtcQPZ(cv_b3R7~(c|1~en}1{_6@P2nwc3>lM-X%W_1%Uzcs$P`Qzcc6qa+Ewnx73 zwu-Fnj>*l3+(?##L+*(Gc#sCm1gJySlmUF$lQ|uT^?qGmJJD-g{rP)~WzJ#9`5J&$ z6RkkNVK^H<4vzgWvBfGs62oc7Y%)IWN(pQvU&EJ@{~UNXFCX9WKbKy0?KbKBmWaEU zCtHb+%zPva$LMn5;0 za7T!wVmdE|Iz}u{01nkgN+cR_d*86$lfuV zUnj|=7wW1(P%O=82jWqZZ*ua5g25E8vAVLd76FNNEFC4Iu)wp0`jb4|+%c*@K{5?z zj*Z0Fg6rkO%2!BZAgU1ZKlqff2vhUEJ{*CK$VVnWftzhPEOgP+9jmN#0z#sQz9TS7 zBPGw-3IQL7E8F+en@+048o1p(*)MoXsSuUY@aOcGkUeHXsROh&x1ei?RE}jU>A4hC zV{+!oUy+191cv4wm(;Jxw@yPbA?=m`sSNYwbz`CJV%O67gzokw?TwhY+k->1+`tVn z(nSbghDAy=`UE`5T725HnUk4qW8|cgk_v{yM5O_JiJF6hgB%_6`N}gfu{rkwM$FYP z=lR-yb%_7fLP23+xZ?ZOgCv70PtWuTj78>uIiSSd#}tL#1EsyX-OJZYcAcgled9B7 zGTCC{=>Q)y*@MO^WawJBFwB=^P^6F3!)Lp$KkO|X4b85pAN?@j7eOox$li9){=N9u zIlD!zg{X$oJ=yI&*4-)qBb%@#39^b5>K%po63i+{11Xhqj#|k+E8q-xIqat{vZMUu zO%&ke_BBP;fEF6z$V0F;&zf1TOW2jkH}&rWr8$!4v6AC( zN}FX~Qe~z)Xvfc?3O@-_2Pkph+0d0aSMi8L&S-_vN~A=gKdDR+$q8jk0nh(O}_in&Z5YIS;Q2Z*Sr6pRS0;oz3vpa{G{+K9JP<$h7X8 z^Tptx`za+8TkBQ@h%~#d^GtYn^tMJrWQOk3cj-fouc?|+G+u=~EcNv<-*YDH){L&j z?+%8b*YRgkvwrK(Q0e8}Wo>n6N&C=T6js+#c)q!(=BZeBQ)Ul~(!3@UDD=j{0pnR?H&S3ku) zfzcNWpSNHP(;l78;n-eBD1GkSB{KK?y|!QU^U#QR7XV$KHA0m$`+z%Mov zfyb`WdMt7vQV@i6AhV8<+e3x#p26`pHgFlW&jYP$rQ2>(X#XA!+Wz({9-u_A47z_0 z?ii`d0S2ted}6(_grEYkyoZ5;5Ni&ELQ{MKq#!5v52Gc9Og}Se{ zw?KEbrXb|p`SXtLgwnH2uu|M75T7Ruwk@10GNyaa%<$T9jiZNHf}5d}dI=x`OyP^l zrKqZN^^mayV?6{an_W1%P>0H;EwxRquTe6nF_Bi$eJfUY>st4=aR|W))PtKyXp~GS z27!KSqHZ|_rx?4j%x0#zef@q{PoA>LP?_eElx(M|cIX}Y{a*B#-ouHDM{cjJ1I!Zx zcW1CeOML40TO8TGK-+#wFc6X|5}81%#-PSwxmpYW`K;ISheVE#@j|YOsi*sqId{-# zQq`Pf0gz|Or*e=W-x$!g&nu{X6N8c8*}=LakYF?t-&8rtnp$Lm0$aQ)r9gD1e)b0N zS}MP4F#J0HU5DPaju;@-8Z$y&JF9!cHix_ftiL6=A4PQg_;D?L#~AG1Ne0hiieQ3J zJP^aqBe0`iwD~fuSb9G-HmVan7JIhcq6%!bd;C5UZ*bM^&&{>O#Sf%oF<>d zd7#Cl$gox&;v4X+CnAF36E`_j5_H4(y1a!E?o9eWqeNcq{^OC`*5O#^9TQd&Oa4+Z zMK0H5SBT|(O;SNQk|0oJtu{J$+L3#m`&OxbR%*VVO1cK)^HJ3$*Yaux^Yl6s*l!dF zN40wxy7q-ecK{b@-X5C1wcV4{YQ`Rhfl=ze;r_)fQ5}qBLJ!IZPCnDrGB8C1mLDMn ziy0s!Ii2kf?*Po|j5XXL;Z9YkE{AO~$SC)qHzKq61Rl;Edhw(>->i)AM(}M>eD>w^ zQ|O2IBx$}nsg-NhL_ATyc{mjhz^R}B>o^HO1Fu_2%Z4JCC0UJS?LWXFi$Dwr0hBZP z4Q{hbjP&#o5Lpum^B-vpp*&Dt{SP`ZL%1ElR{OHngWp1X7?0BqS0fFQ?=TI&9pli6 zGh4*3L^St`C@#zuEmpEvqtP|Bp^H}!f&t!-phfX`UP(V;G zR~?Yh?1J{dXHG~`-_!61(e093&R*7W8jBmZdxprg`}2(a@A^-cA(k-!J6> zzm7uz59;9xQp8opX$>vC{>%*zPTSbLB4|0PDdcrRPO2kH-e8|7b3idd>nsHm8B~QS zEkfFmUvNtv-me5L-V>zAZnqEe$U}fj2+9T^PK_^=M{yqOU7mOCofJ``MlUP%jnz-bN#FRub8tAN75Q+o2 zx^DqA^EqzOAPN~WLjY_j0~}^A)nRMqdw7(yU|Wyb=tew+m=QO>37HVDQ3zUOE+h*8m>Fq+Y7 zfl~mQYViBsWR#D`_cn6o|F&?gU$b_tI>-UMY(H=ANtYVlNfs6sm@=_{*{S;_eYLyB z9)d(ccJPwWH=kTF!Yfyh9qwckAe6x*fwcsIXd$<4=Z-+utBspjLjis{$r=I zWe~wx0UQ&$kdSC7^Wmgj?wE14L_v`_Z;_zFCBfA79q9*}e08*!O~C0hEjx4ob=8A# zJubP#7rewa*^kP@si4C$dke>B+9M_~u8JaJ8qgXJ%c%NV`j%B?wB4J1`4x zBD4>!vQ)v%{q`q)zfF^>pqUvC9nEttklE#RBop~H-kJ2Cpq0GdSM^(Fb&F@&(n-JY z?6i1V%JP^a^obiB2A*CE!qzA_4gkdYFjjq|nK7i$Mt|l54jm9iZ{64{yp~OR*8C4; zT1WAC`<}DY20!@BrPq}B;?vgmpB}L#jM^*2RuAQV%49SYt1?SB@4RhG7Z8_X=2mz@ z+d}fj$yI?{yI-Ac^^C1zJbzZtv^VndQ}JHYy+RhMJEU&vg;rR&NQWi;l)iF{g?T~} zQ~G5K2=D~OQVe8w`DLBWd>kER2Af^Baf#@$pM)0kWY(V?avZbIYb*BJd9A}PWbwyG z7m#Ak#5l#$GP#cF8?Z`&?~5qaoO--=LUka3cZhL0BF&VRSt`@UNY5V+5&!xYIANZG zi~{}XdG(#seZ+DNlTBPh{s+fviJK*<7_Ydkn?-$(>~NhTu8<1bfPpOQd8=>PgP9*afgx2RiT+=RGD4PkeIWx`L1v*o17 zAoKuUto5=uDBsAeQbk40$B)hU8b8_tgcGZC9|Gg`2}#Tri~@m_kSwlxoxS-m2ACV4 zh=@8a2T_WprR>L2Ig8+|%F1KJJcbl>s7(CCFr?CS3f;EAP>Ue*=g*(zW62>R^iYMx z9wr}@voC;pk3f>LX9Km5pPy(A2an3LL`akydrkg_^LyB*ojGjvpc9N$B4Xg~Dh8S- z;Ftl$ljOsEDFAw@ku_FLYjk;Q94TKZ@#`+ONDB(8Ku|ELJzF*Fko{aXd6xkJ3rMQ~ zj9($J*QyY_C8-#ytE%eIpv5iy8j#W776nCg`2ZA7lku7?p6!Gtc>e!%1^D908NCh5p#i7b1T}#{dcy0?i;IdaCs``96%Xq-yX|PfE6MTle zyLVTaGhVAw<8J@l*=YAAgl!-N?YS0MC9Iw{yTx@K4v=AYpb$7qbiIGth%x&eH1>$_ zA+rJ05x%-72TFGtFl#fn=3*tRINbbW84GJGz2$wP6`Q7fxf1LVV zou&7L%Q>whO-G{ma(!2VWcH4G(V>+(W~yy_Ii`O<6Ryr)_+E7TU5L3HzlxjQfVbnt z1V$~QGpOU~#YEerqun@RPoEzm!acv$<#-FI06g5?y`_vY+QuL_3saMWSk5{|=Z7vU z25#kB67a+ppyl(^;3RTSe3HYni^&rn7=P15$-y-Q=?T9^aqC8SO(}n8mvpG@wZ}Ii zyUjRUcU(h5Q=9%#8aMFAXe!7rO71r4+X(lw$ z^b#CnM5zdo#2l1Rc~$o^Vj~6>^()-nclC)n+LyeXTGc zFP(^?{eOhhE?+;X0>+lSPTWmhQ~!@dnocqi;4Q(b>@{zbf8NfPQ?8MytB%F1ET8%f zL7E>v4wEzuMM!&!#n%x4xD69`BsT|6Ocx>1Dl|=$ggR} zcK6o#cD=#6GaQb<$vsp^k(etb&%((U+%%)$52BeYxgUMfsP+yj|?PyLrf8Jdw~bQ;(7D%TVr1bFItmD>U# zzwOrLn>P!|blL`)ai~MAbQ6E0@*lIO>PC&(cIT-$|oGWHnA=0>w{ zN=q*@erd|asEV(3*i!e)m8dl>J~CV*QQ-{*()yNedOM^~G~RYlaI9U_`lL3%!+rL| znJ}O&I#UTI&%fRtY?ZHk_kfbF=y9ManCoep_U!4fIVLMt^X+9FefH2_)y=i*{Vapg z7KEsW1Ebb7fS~iX*qQ@PM{};=TQ%SL1DXR9 zbLdgn-!>CU;*s=4#SXh>z4GW8v{9l)Z*IwINIhLd#3bft2QV=P?S+{#KQ=I%B5U=F z6^7qjP=t}JrPWo<&IGWfk1}4^N*NVQUh4|GoUP681WeqgfI^&SS(ovv^d~-zd;NrP$9FZcJ4{uc)`-0(7> zV(e))rq+j$WIfrJpa1xo=@klTX$|H{k&@8h;1~o3HH7>@fx%HQ-o-S`s5|A+p6#A$ z;iE-v2hPj~Cfq(x52rf5mcpa@3CJQhN+BS!cI$fZGQ~Q#>AgKNX+;P^4YF!9H;JEU ztPO7dkP8&}+(RE!1OSheb7Wdkdg<5IfHsMMNastdQ8DWgU?I@tWIc=gHGtbU7I+h-WplLPHhjS}h70f>5s<>{Wm{7AUM?_%Y zs&P;fC;*m<_QG55qoShxjM)H20A(*^JV$Atva2icM9pWSE^e1yS!|ri-2m&n zOH8f>qpl|QnS^2O&@ZBNZ6UX3+Wi8OS6X245TJITP}-3o_w+Ag9hM|@atwmQh*3i=BVy3kebwFYG^Ya8v zRs)9U)xY1I->3LPGw+4KiBB8Dxrd8Zy$TAtFF3Hb3?#!$N3wA4#M>PU)J77o3wAzI`)Xoyz%KbvxRun{bj2Hs{{2ki zn)!k{8I=R;2h2PH7O@1IU#JN?v#T@^=+(|=4zglTOtxVqt83dpA*K}lhB=8W4atd^ zNN$yKY82m`t&>D%s0h{#fWOi>ZN6Qmql!iRGl=_-793iM+D5lRFd{osxg)?7WhT2! zeM7;jL&uFVOHv-+idI4kvbBeOu?MCg|5migS3v&m7^t{`&8vP@O$6JAAZapZ44S|j zt;}J;5m;mpg_4K#@+fw-fSyii!|Q-Z(dzW;9w5MN**P;F|CI6CPn4j3ZC@M*o^ocd zqNXO4aQV4!FzK^{#NQkma>%pqS^LsM>4-CV8d16W-8$^ss;ra0;Q>}!W{-IDCD-CO^O}Y3T2-Tzgev;VS%z__@I^b{ zI_ps%fH)8>DO@T?AXpQt3Bkq*qO1DdFX*zDX;EDhCEH7s?8FrE%hFGmK(-2*3+V&9 zXEEVc?+`%tZ~IOh^so+`!M8K5Ip5#ke+fs$Q^zNm>+)jbX%&_MGXVOw_p2?D9}_0! zb}SC&jwB1mJE9v+sI*RmIzr^`h7lQG&OR_qKmk7>X|~yNtuMaYhe6pF4HoWOw{EHM;nb^a`E$DaOO+rN7E8H8Z`^ z6ir`g8{6C9?39rhGkM^!lGKxwCToBzY4MgHURkLT!o}KP+nnR|bVaAs>pxZq30!-| zyTfT8WH{twK*#9x_0h$dPiL)m!(#^0ATpwbX99tyZ&&5kYweMUAkAYYIC5~NSgMEa z0HA&X%HLrGhmbzg4~#H|1Z59piXP24~6eC&6$aGqMHaxS-xq zep$>Mv)(w2d9ax!0uxin(Jjwz1;COZ?MG&;QHZGmk08Mk!C@GP5i2e*sbj#)3_|py zcJib@W=)823*%tf0Whoei}1{2lql;MPweXc)efK6g+Txo%_!RwkRC}8ZutUwl=xqQ z{mS0MkHiv3ROCQvzIE?EZ3FJH4x-s6fK_tx^6`M_$>5c>TQtBxr@s3N)qStS_MG8X z@EJuVx!GV905+l^gX`Ek^~~I%#;Kc;2~gX)SrK z@}6wP*=Mb8$NhaS)F@E^JI%JfI0)pFl**VM*$!L<43ar?=!_d`0$?o*-v@?!SVorK zJZT7y$?k(_^Jb1fEQOMFp$&RUIIa2iW=(m*s}cYU<4L?yQhG$5ijhuJW%ZS-R{hka zdx57%r2n8b0NX_Y?+oaccbP<{CQ^Tlihm-~K(yEe%JGbvJpI3)^}V~!Bv1gZjWocy zD0>N4gU3rQ$Z$(q6l_>#@bxSjmvOVS`Zm)oP7pi;FP>m|e*{k;O?BEo#@+aVU0^hQ293KI2AXb`i(LkT}XOx;ubG(mBn!orjEx>zaJi~Y5f*4v} zB_%*fg!2ucP~X~ndGSWT$CB#ojs!MeJrooUpvFN@#32%6-HVzb95r5QOuBsUW+6N< z4bcia?6H!iX$Qf!@pXyq<#*%3R?0&-3cVniYX*cm+v6k1)YkJ|cD>ZhJyP5gr(iUA z>i@X?`$=@es$>v&WBGG+EeKWWaL?yN^T-ixBj)Fz-O4m9p~63%CF`pSu_hr1Rfe*-0=7hj}t#)Q*Z@05A9$2x#6AYd@I(5FaO?A4n22Sb#-L&XE*}W4527 z|0_H!+TLjb7FRAdz@h+RU-dlGsLUvHC6NvvIvH@{DoDUj*!@6!EcuLJcKqF&wFpWK#{rEvH&xLA3< zD3F3E@hqjk%)QZgr{K@Fm&Y2MTG!P)RtyS5FN>p-e-Ozod=^?*Mvlsa5Dvsi8<{D^m%at@G!|2!n7g zL2l{c@{t@u2AN3xrJ=!V9N-We(cAF1)V3#6>(Oe63=;6XCl1>YlJ$kKcC^R+=g z?tf+i2%iiCsRT%&x+H`gnT^ExBV!g&I77`53(5k&RxL(++w6Y4y-x%~NmW6A1?cbv znP&ogO2A{X3W7B0`g~=tZ+o_{D8UOgv;7JVGk9+bCBmjVZ1eekObQD5yWP-B-6_$z z1Ei@SnKf3qZ>HqBA0tHNnGA|hA*o_M*=yT?+bZ^2yfxqEVjL%8-b^&U*f{~*q~EUY z3q(&d0D1`cT@7>?67yNmPo$FpEt1>oe=q~IeK^z7^2zt-1T8jd%a~-hozHIb(-g%? zt*)v0uJgM46d`l6ES_Le=CW=yQBy@)++6y7jl6GM4({YoBFIIg*#%uR)ODxuY&$d$ zPmvYh#E2THjf`qxMhAg8kfJSNJ)Vy47f~MY?e45EH_o3nOdqMO(j8NgPFcQtfYDSe z&gfXg0g>cL%ROdQx<8n%>oWmE(tuDA&B6)js=+x1+w>N6kP9dRxadCF*Rky=zDSlpdLZK_xx?`ZzO*qe3k~5J*yjw#4E4vs zEnsbl{9qlMcm&i51QG|f(Jb1m8-*i<0I-SFYVnY_5Xi%Xwlok;lL${K-gW|!w}QLF zJ8yk`^(DIMSo{`^K`tz)BNlGdyHL4N=$5&oeDn;gSf^9h~PybfL#Np z4}V5RV`5`tWs~TRzctGoMp;PamD9F8g=;+U;b1O>Cs!|SDXiv#XJ2-^jSrW?_2NL? z#91yBtR$KMEg_P&1Qf5Hi`nRVAl@g2duRtkc5z|l)l2*d5la%cew=2d*jQgSWF0{4 zWUT?VcSI7p;lP1b?P$1`cdbXx#-{b?uC6Yh+#0J)9XsrHM;j9dbcBTE`??;2b6+q& z0E(a~)#wNY6+HbJcAduT7p$qWP%EAjdxEVvf=@1%}h*Yig|H?uHtm-`Z?J0UQr}$bUvQbtCLHHFQAx;3yy+OVt#S5m9mkxQHFm zZuQsMuLwCNg27BodSNmx>ph?OAK%jIihed~+QdQP^BM7tcJ=Dr4fHMjU*Y@{+-Lej z?ToA;oL%(dCQ#JRkpf=uZ5{ba-bd)UG3FG9Hf9JCPX2nak9ZVhNR&8*1gM&ii|Z&lGMB?x=cLR>Z@8o$9 z_x#R3n+f7$L6q?!JQ9rr?kAsbq)Nt9e4PDdguQC`9oZ{ zrL~PQN>R^Cd?$zJUw_5(xEs1|!}vn%AV=}X|Fql}g;n{lV-TFmtzUNYKP~s;iRHcm zf{|9;5!dkl^wl?mufF;zJcilzxSpT2z4i%2=WgSGR2R)B`?aPRW;(2x>A>EdfBG546-U&;S z9v$mO%#Z!`CgL}fM|Op7R@_6sW&#jQrCBDckV%(q^Nr}*uR2pzER?G^DK!xx=G))T{_no5l%)%~F%ey+l3@>|r_qD^@-WcAaasKN_ zT#+EBj)U6uuOCJcQ2FZpzZRYR^9Nl$@PYpOYbY}Rz3k%Ge=ob3yb3SszyB)!h@0{E zzxaPYgz~@nOqjLnmdBc+CQAB~um1gk?OIMi&Or|K&Aje^Jwrt1@VrqzcQkj;pWpfS zm*eju)<(a0p*cg(yY|1G`2XLd_`mRYl9NSIwI8*=j?@(FT6GS!$Y1Bh^*Cm`yIzJx z3N{m8ecj5An^b@OaXh=u5vrTzmf0J}-9Co>ygPF9@5}rr1a0G>zFoh4?Oz%GP?LiB zv0@eRBa%E1yy!P8y+_bn5dG_?#MTHWYbpHI3Or5wjf4>Vx=)ESFQ zYKAox|K~E7e_lL|dt~D4m4C;=Lrt*gkB!zna^RM|>O+C{@Rsbq-t(l(f4m1Q#`-_} zwvy^WHy=eMnOO=%8v|cIC0iHZF5qvJ0-?1@B&v-co7G-xf4f{=mF?J3&b2#Q-qoE- zDNE+H(g)t!$2t7mPpcZL5~(z3MRq4@MsU83A1W8)h(9Y_-0M7MKa>#@(fDzXqFuhP zjBrIf)supwZNc(aMAOYy{=WZO$|SAYOz=nVibp5nd;8}+1K+)SciP_GK5l#q%)?N# zr?mC;^$mj5CypJAa7==v?9V1nK<5w+Gtzhcm>62f9ap?^*mzDJu_S%>Ye z6Jv+ZOI9+#W3o{2e6{-t*#P-TWSW|A8Td(j@TL_o zDa8mu2v<|A+7aMsF*g$dtK)_#78Ypf&;LsP8L&TjqML~G$jp({g=@NVdMar3fn@bI zIPg6lSu#}w!jR&tu$&TW7B&#Te4S10Q&>eNia_=NkA{W@kW(CRhC#ch5Ava?G>V_a z;3kh1$h06d&lsM7*IUqAn%}2UbE3B18E1QSWYQ}6>LG58&-!z!Q%YA)uGIyd3Wuk+ z^N;6vD4i|N`Cs3URQBK5uFW`!)|YTefy9(LX#R~UI!iQ-e2RaNxoZ>S_IZ#(6KVzq zk&R%yi8~42juIg|L30U=-znyv{W|=>$x83BO55#5p#<}3!w%;rMph?3D~`aNpy|iC zB4?hgyZG+(ZC;4gPFR?kSC9E^>PQ_dJ9xYh-pU8M8m1k;%|1xl)DW+Ee)%x zU-e16xe{e{DR%02yUO>DB_sFmY#(>eZZ7X+O-^&(!fLQS?CPxMEE11YB62W4^Iu%z`+GfT$%SI8Qz}cLCB%X@m_{G=z7#1(JqLt`LaJ{8d&1AD!m)<&!xff;IG zl4lnE{JYBnI$>G-+eT#JPSA)sKbXpQSwF#u+zG+_Nq2;sQR^qQ2`Ea9COzrY%a@MnS1(7uz8u&nbUUXBwiD!CO? z3K!zXiDo1EASfjdMn;B_EyCbA4mi!k5@7~-(FACMl-Z;1lBru@%ub_e z6(Ww``n=iwjc{IwvXq$kfqZ1j{Q$`cMra#hALln+3*}`T)Vz#))x#ZsKDx0N+&n?N zF&Y3V%3%rLTA4i)BmIO1_GQ?csNk3g=356NKPb(q7G zE?pC;pA22-U$~mHV5IVbf$BkYii<>)b@pwax&69{AQ~YSzKYGN`wO)aH1_~xLYokG#K>wce7H@-iMh0V|qbs2e1W&D#XP<=MJ0wQ!045xE0J*A7 zkh6N<_7@BW7pab{sRc}HN(!tv*^UZs4P!!qY|Da>3JH=&p4-RBL?3J1x-ExOv3$B@ zU_h4)KvuY31i+4y*nm3--dD3{yEfovqJ+Lt05=DmQ$k5|v%dooLaUMf3-5_oq8Ze$ zzJ;zGN?Hmp znD+PXamt_XSP{L8(>us8b-P^JcBWJluRSe!Jl?Ec+QzB$Y8$SH#HvM^mVRGh!n};H zT}0x=+rI;lV*e zd@>s*>_kL9cw(Tj2kueS#a0JLhK58RZxo@!Umpe(PY-TvxWTRq=hML@m`X)>8j2`& zBUDdLO)aBf`%PW4=LwqgYYK-wqMd3#zWTa)5B1NrgSC;%VgI#^Lbs3R=jdl)@q-7W zUc6Wd^X1gEG`HYjM(G>#uBaWNQd8+MxKIJ?b?>=K`WP4K6K{L=MlC;(wQ=ic&y=f( zCgb9}#Ny0J*-b%BT{n&`Gs`J<8!9(`m&>G2bM4Do)sJ4wp6VEPY<8acrSzcm5K~ao zcHSteyon3lCv+s@B_uC@`{0_(yYcEzmrY@&vHPyr8!4oPPm2|>vAao7T!)-n4UGk- z?B^fe?lGAbDEitqyl?ZbY31FqZxYs@-(0I`%juHt!Jxz|&N-oF?QmtmU=1ZA@BT_% zZgKBNS>ZfD_=wYKXlZ$r8FPq;Y;yTM%M8nb z?x7(sP!lHje%YTnv@zEI(gJ|f-ngD!@(`daRB@>oW+P{-=VDCsq)RhAYdAhWYy~O1 z3N-+Aae&2DYwHqZ>RUCUe0;Q>ot@&>#@R5sLzY@#V9prAnGGKqDT#@RsUV0W=kT!Z zg@)e6(WPFssuv6+6qj!ihpxaVRr~DO<9pKg<~UCCFt|An@oT3ZI;vXIeMR-uDR+EB zn6xu1W)>X2kFx0M=~Y?9alAuZST0~txYl)B2l+^Rx9mT8?3lK$?ppX1;uJ;Z=d&dz zCkqJ+Z?u-gCS@K@A^33LH&5RC8ovXg4%q{yCgr|v4<2mf=jXpG?&n?7UgRRviB%?# zAG5;Qjs;F_#gHAbX52(|CW~nh^5Q`*qq?u$WK~{P){T#s;tJCFO=FP#+o0P;MbJn# zjNJGI4yL$ws@PD7{BQ5nmFcf15>fMYzlwEJicf@^E&t|kofpS7Pamo`lt;F<#(LwW=&b(jL&MB?Yz8eFc3tuZryDUkLBZ?1$?5zBr>l#Vf${& zkkYi{{YQ_yVC}_@VGKi|&Cu`^gE)nXmY$8x7o{p5|7KB9QR3zDGFiZHL-&+}cF|3# zOU?1IvBj;ethxfs=p3-i%KgccEh3_#{We!(e(c*Uc6l=tnNPw_8)6R)p5ooJN!#7u zT$Yh3;$fH;SYKb`b^G>E@v(*aH>qEjNyYzU5d!VAGF?EBkMAvt z6SdQ)m*X=)SfaJN0*!^RvaqwA*H5orzznj1^LrhAR%Uu=sY+A2 zbhIP2IYM(x6)CatKjv#2%wytJw^AZ3jx)X=-)YdubKl%)cRKFcy}JZ?pt$== zL`;k)=6CMeDXOcfmEZ;%UA%Y)lLF5X?chtuH#$1XRbFd1-p+!uYGa-Sc9LwCu;D@u zTrCjdgJ#)>F=n*0U<;&!yLRnz4G-VOqa3<@0|N^yt2dgxWfWy)WiENA(u#^+Xl^L; z8$Y8eU>rGQVrqI9A;%bA+Kes#5T25{S?Ap3U zMts7;*f0yh3L}bN(HonPR_9Ta%X}W#FFG?j%e{C3<@a4^=!}t)j-5DBhA4m|xO&Hq zsFi$}%nG_&3~_`nvfx_~(9!u|eN8|BW32}>7(gt0_CwowKlG?Kp5`|voYlahyDNDP z9(*D`56;2}cgeUz!q(1?#Qv7nR%2B0Fz2NTsCWx1bP_e-G27p#iKm0-oja?n&p!C- zKuwe9203Bo;gL^apugR4iQx-)YG9v(Bs)tiyYPjzFsAZA3_Gy8g!*Y2EVK_j+qvJW z^K#>1D>xo+IL+&WuA~>G?jW>WrB&=28X9RIxz-GS7QsRcQUp?5!6tjrl)zoZ?fG-g z*n|WVoa<1Dt300{1_#S=#;o6Z;1=Xr-r`CEutdCD3|`+KMe6-!A@T9NqixyiA$Wj8 zVL5VS%%T89h@98fa(@VUhkWl2C7aMAr3K)ARE-PDc`}Xa@w(N)p8H@^+ zTJSTuxJ5uIozCF4tp4MlD;xUcNkejoh~4wJ8Lvx^W!!6Q8m;0I6W1bX6oX)w!EG@$ z9X@h(ql@B^NnKMl?FP>uaeRjwGG1Tlrg}7qg%%sm^w&ekiHW~e6bQI?h#d%g@x#O@ z;_$7L{9>!pJ~MLu40Cv_P^#v$D)a5fsF@h~WASl9sbwX1a~y*;th;~ktMn{Z_f(rR zIY=%Jq_D&Uup3;WqFBl?t@g?@HQm&W9_`$AM{FqE7i9w1z=y|w6rLP4j*2I>6Pe~)t`VqEk`5I^FLg$&9XVwYGYNEt z;o>Wt^(wYR&C{nn^70OPR+p%&s|&$_Y-Q5ftLM98;&sUJFKI_N-@NB>&w261cp&Z&+6QpzYpMzs%vOWfx<7Tu3kf- z2gh~urJviwhfEmdIJby#`3j5#*S$Eg1w)tdom0u{)~(|ToPs}utOp0c8HdGR5|qM- zn73kWJ@-U+xzW3zG z*_7$XAFsUb-rZhw2A?Z~nkAAS1j^T~E zUvN#Tg&S96V`CSD1L5(HMf^$!MASG|>#&_T&5Rc?_WbaXBRh_s9@^L-;u33Z$;Zb> zt|8ZoVaWT!U+IX5h}hjyGMo?lscG;=LQKn4A(e+Zo8Ti~2W0C_b2BsaHFte{JUl&DAOs6Rs~BhZ{FS?f zg+(1yyJ`_=KjqoiK8y~M^TMp+m zeyG}RBfEUDp~#uavh2*hNv`qu11QX3MoOE1L2iF z)UOQPC!Mv^j8`BvtweSKgkXfuwyz!jn-cpGR|ZE$dhujPDF=hS$dr@-h_8By%TKmX z30gsD!?a_Ze>ynLPh$Zc{WotMDr7}0s|A%N=j;WcF5Vp{Q!%M z-?F130mjI&Z{LRI6oZ|~k`x2#_@pF~f*3*y&{~EaytXdIph(`4+_)Tl3vCel9958&8~T*A1qdWe zPw&>(pW=K*Lr1rw*kJ1%bTW6P@awYX0q|Uz9oCSmo<$q#Rt{>=RQM!gN{!6%(5zoyftdKtJDsAuTOUXy3j!2+uT>9J>)F_;lPgr+xCF996?I3MyuKM@I?l2wU$u zaq=LNvDcR-oaozufg3P5ad;Qcelam7)ThgfuhBC#zW``nimnlktG9q|BQ%zv^n|*x z3>DE{2zK^O@r{I;P0vr6NV+Vt;o^5)5l>A|e~a5jcDi^C$nJPDGh-VjZcT-%*dRx*j6M2>1d=g&S%y3GK_y6y=6G@rKkeJ>wC|h zo$Ne*>{u~?P;0>QC{WK{e!5Rs*z0&P4hHw90{p6$9P6lGJC8T;R|$Oe`Mr5(TmK`c_JtgPJ5a33$W0*lrvrvwB9HUu!=kXK{S{uYsx$Naz%huxsds3tX1ivBdPSnHjHRK$$UVQfX*ticw&qJg0RPjMY-7VM4Mm zJw(o29?hW*JUl$1`_8Yyq6K$^AKdV!pA)-%&|Yi^iH0oL$1iooEfbEHC!TzYuro_W zZ@oH+$KT)oc6xgHn|{zH3~9Zn{UYPzy>Ug~mX=bZ>YtpRM$wYjcyW!~v12qt7gb&M zV?brJBafM4p#DjHWq~p=y-;fc>!w!g#Yid7SaJ_o@J`60M&0ggS#~;P^k2N*^8FC1ZhE`TzHaA6GqQ*C- zVP^eR%f_yX5{#+rK-9u>EyIU*_uXpGfPnRYH}FPzzr7a}5V-B*<8xQo7EL>DjxPc$ zDM*efD<4H6bL*BNU~j}T&&Ws)EVH}|3~?F$&AIDH*dQXV;G*J_^eWAgahjn)rIGsT z6{oWs=tIt$W%IH^yoKfnog@dLT0(60K-BV*O$EOD3!Y)ix3}(JhscPlPoV&rr)O}N zLQwKy7Gzp@7B_uDS-BLC-N?#nJ;0FIxVS3Goomt>ykwQnD;yo6O2PZ%d#&9L@|4`}&TXgTpQ3;4ZB7piDA5smThN zCC8w7L}+LBc75q>~bUX1Qo)rR6?tL&v!5O*ObmLcd( zp&)$I)RcL~%d7C*vQY8Zi71KRbTa!*IkYz#A?}{*u|vN`j`LbNI)*JK?jaB zbH&C+R$F^B;aId@9d{zH6IVtplnj*vVO7D30Sq0z%4I4$TcAaPp zK2>`~vnu4skMPK-ICrbusTBrWZJTPdqnPwv410}~SFicZ=6UNf+TI6Du1>T%n_^zQ z+JK&8$KC*Bf`_?9NUOl?17M!NPLh2+9O|)MQ8Y(a0LAYlYNzAQgs8%;IF&U#m*eq(c34Dkv9v^wQ=vNSpD1;%oLahgA z5hGa31wv@?4cJepVfrmmqF&X4;V_y6V1lTSpy48?7zKP|T;aE%nD-;;@MxKwoGiwX zxx0N7DdiJV;4Vv;&f)RvZRz012gj~V9zn$ z+8|@Rd}@%gJ+su7>%1C&$`=fpqk$t2o9-TfLeGp1OmFFEIJ3+C?V#SqHI#t z(ec(yI?BwqM!*m^$@~3;J0}2M!0HMoPS6q8QtUhz1l(~DKOLo|8%)6d6ePdq_X2zN zM2q-N?>qXyN>0J*Gwc%%!7;~*$jX&ClG2t z9hEgTxUU%vqWfu@QX7i74*m_+o60}Mc0UliD~EB?rym( zhJ?9u&UFESO-)^$8qiUgq~j^mn6HS^q^KmQ@n~9*9G6FlEAj|fCMC_P)%EBtu?k3I ze17xeuSaZdGP-Y2vKD?$5Aa0QXkY4$9Mkvj@B9krNjf>!ca1x8FmcX$`|y$Ft4oyl zUeh?7U5h&C_^LhXGSZh{%vgFfZ)=JDI@z`5%w11=I;)f?XVm>VuBG?2YAKwS8=X5D zC5a@%!*w&b9Kebvj|}w+mU0+#r?f%6Ajf$PGhIM&Jm9l%MV!s_9|+E7^-l2bG-w53 zSg{i1JJ#B*qM+Z4K-51K5Tj{;Tl%0fUd78WEQD+CafBc8siLxaFh|;GL}PJr@rdYX zYH-kRiPpeI1Kv|dG&Pw3Z9H*i4D!tMLza=`Uk2UPwrYzI6hhF;F#m(BxfXV|yAOJrgx&0?x;k zn^x^(D0v=a$|mV&Htg|wnnxm0-yx*z*uI^D!XJeoz1L<&U(YZhBX`;69ezEk%bPH1 z#bDDJDsIgQeat%7BC|6O>G9LnqI_6U%zS_KNr406;@kQ8*ETgZp&q-pdGF3jl*4@+ zLK@{LAz@+4n)?LKyo&DJn+*(!oM$-XSYv&Xx~8VAmKHO}7lzh=4c;$az69?jZ+t5~ z;;mQ2+h{*OzxUd07+~KpaPjhG{-*PjnE%}{qPhiMf`jO?Ish@QU}k1UTjrjz8Xuq0 zrAvxzN-z{UL|gKh#eFXW;S^B!bPo^na;a0#KUYT%I6yTcykq}%J8N0?w@Wn~3QD{F1N7sXh#yad&@@C2X) zfcs@J#&PTD6vdzgo8s;c51Uc1TyFu?jP3XaZ#|^MdGoAGfraAC# zb=C=(-g@F^cHvFk_4eMtu&$xD(jzWzxAKV-_rt?gZW*HVdMLiQfUsnXiWqc0bKZQR zG;oRTe<;>#h=$=A_kr9AVR(mRQgERah+XtdOgvY0M^D#kQwg1S@lX85suL@hcS}?t zgFbOJ0G)Mqc6OnU9w}xxF>N{n^M`k$5zhchZ|Xxc$!y*%gS-si#|=xrrUNR)s>gGI zE6hXWGzE+Z0rENEpxXL+SzTSi`%R&8R1TNkiZ10Swr2GmxcKY_B3>#s&Kyn#g1{W57-s+U-;rHc6OLXS&17UICt&^8UZL!?qJ}|2szs> z;l{=zk1QB?*^jUSHav`HE%*FnkRFqrvsh{7ZhufBoaGU^o6OQd_e)~$tA1T-qhnlb zY@_0PP6xXE4*vC5Kk2R+=wtZg_0b&yqZ(#vYyY*uT63Dur77I+8?c(Fx zv9y2h-V%(q)ncMK@^`G*a#ZTT{Yr1HN4;^>_jvFgK^$xC!W$Ae!k{oyVcHaT{~6Rp zfqA3Y7jbNp`|MDILSp(1kc5aAFK**fdVRbAfTGK40>BHYo&kJ-P%=Ds?iNM`(bjE8 z^?-s_9)m)6->yC}9Ru3RHMRCQ8(IXOluH~f14nM$kfa>K%8X-!vU?4SDg0-%)?yTD zLpWV#q~?#gp@vmxw>jHjHRlHK4n4r)y)zHt1=M2w0Ro9)@ER0@wJ~dPR6|jR42CmpjHGjv zTAqY_6kB|ww|>X;PE4ri8Z=`G{r6V#{psn#c=VoV3i2JM+{H^<+u9xsHiD6@7x@3k z`VM%m*Z2JoNr=c!Wo64qNZG3hC9*49MoL6c_DE88A_>`hW|UnavPV%FMP*bH4XOY2 zKHuN>e9!5BUcFi;KJW27_jBLZb=}u}2`3Q&%G7zfL~<%}AY2?kL$kho%&f!;#x*)$ zOxa(Hl#Lty3dO!Csj+|^<6jA8e|JyMD1g{1ln})@-Xh4_m-jaWG&-IE{dMhxa`A)>fi^P*x6o&3^8+t zVYyzlQh|W%Yyrf?9cS;S@e3{cdlLz?S?wHPS6nM$H&FbePnypCptIdainQaREbpoqmGd4>e)f;! z$fwP{vN@q6Bl;;%$+Edjm+Slf-)(AM&LiY&^3?R)+F8V zepprK$WhxCT}!2ECSTVd#xHx%%|F{bI-0?I;OyYNMb@AG3(dy%l9+R``GDl6%fZ0g z{tvDPo_bT-iE-QZ?UNrqh*xx>=bV>(-8XSQ;wZgBVmyGu#rqe?DXkY0JUnE8a}1O% z-KHKWQ5BoUe3>t+s!Dh#z8kFJXY<}Gnj8qHf~U>E+p&BflQxNe&iWo>2u!VQPM;P> z?{oBx8lsd#s_<4D59NggWD(h6E{V)JMk_jIHC?Ju!4Dfr#NgLbU?cbYSB~j+=A0~j8=ix)1) zfyzZH)p7B&?g|SVTPt#8h&v|SYcV(>5TK5hw7n}*n>UXY^ z?qVWc)rAb;2ZwF==<>UP{oX}e3~u7I-Z@AwYWC0?GQ+0xlK zAz_s)^cW@T=H<2DzOl+`z6CF1cmXsXcm(riA zjj+Th@5qYM1DU9nLa{hi#Pcu9k1Q+tQ~kkc+htWNEM7omU|R1ZgDO?h|JS9Y7^kNR zKkjM5yGvB2B@<)}nx31{H9%-x&=yald0wPqC(fWZGc&TuqSq!qYK=~$X0i_>jcOSi zvzWh!ay3RP8W}4uLI~a~N*l+KL%RfZntg^(Z+PPF6c?KL+6aU!RFec7b>`Irf_>d0 z7ZnvHSQd>WE?eG@jw-Q}KcidxcpY&pnwhm68442j0NxxgM4@x&kU-fJTnp<~89Qt1 zK znfPj`qBddmsl}=33NRtbc?eqxf*OR;AvK5=HNa~ziHQdqegpT4o3k91c{=UB2!9pq z`Ctt@ulN1yu^w9>39?HaK$Z~Cdn^(2rQ3}ScZ>%yC1(duuoH(0ihlkn_YpW`6SxIn zAV7|R)z#N3f6{D^MTy3(w#7-y=L1zlPQv#WnBn*rKn>y^YD#6b4}F8=VIV?8UTn%iWD382 z9cF|S;2X6YMKNp8I?x_L7fs7#D$WYhO=ngI)Fi)aA38+Ybbc+CwMdV8!CN7dlSU?Dj zR!a?~2WCD;NsCN}CcnYKa9dy2+m)}#eHR{937eQX-&vb8uz{63J4F!?W&BzC>1Ar; zqQ0kEKh}LY<)$S2s!IjCo$2t>L#pOMvUn0HcBz1wHORM}jX6ko{L0+txv0|=dv?&A z-K|z9-&`eW9E{{diHl-`IW`3gV-Socc3|_;Qm#XBP-3Xw_Tt4h$l`*Eio}2uV)JIw zG~?)qPE6cD0)NE>(rB^q_ZmIWpJ!-bIeMUsSoAQ4$-jxADYyxK4%Y|m;sW)7)WYCcTAdp8(a`9>`A1E@R1Pdo@m z`a9fFrDIIkov4CtFx`2h{h*)Ow;w+;^7CnMKC&xasyWuC?^=QcRp+))oQ&#@jm_iB zNV1tz0}krx@t3%i*s!MbCdh2o<&k@DJSKA_8Yf?pscK%XYZS@`VkE-jAfGW)eAlLg+QH` zMG^dq2tDe8js^g!HK2Dl9kDgkZNn3R-A zw6?qkN<#V;ca_k%!ZUDAZ0aa;v!h&c&jwZNwVS(aH8iZ4Az%&$+=1z6?{)?BP(68n zFEdkP)-UL^zb8v`ue2g9E$t`laa$z11Wg4z8E=Zf$`RjGf$)LJcnFmC4WsMEdwa5~ z=(o^Pe);mnZl9a%iboruO2pUpCr?^%C07`BDk-JD_{vvn`(z49;j{baCEh1)w6U@x zA$arf+}=s-$lrR#rygKa*d(mAr2pDf-mnKb`n&h|A1usePBlyc-C_%l;|^yx zCMG7@?faOav_&DgyYBqQ>%b^zIThFgezK9`Iw-iu@*8VvOy^gFf;aTMhv>9+#i5PrR1lzG=!sMC0E1;ninC7uEu=H3&r1(tfL7tI2p)S?|8R zxkh2)AiL#6vlU5Kc!WNxZCzp;TSfh^rv2mBpG1AX`~4>a^SK8Xziz?-7duyj;tCib zBOp!)`&walGka`4+ArEDJ|jY$Aa_ zY=*21^_WBnLuBjZf$gwL32vR#Von+KvdUn`+`fkws8!F)tMXvEe9Ww)91d%H9kWUb zZf1xWAPZS9gf-#*$cCAjnKaS%PK&7t7Gq3+WVE!j7#M?&6w?e34;vi+={QTzVnL>o z%^lG?8PN8+8ETyF?rya)i1bi@zCRxx-1a)KbD9?{J7kYEYbO$#A>=`wKt>tNBQsM@ zc*9JzvyYAev^B0t;>$tG}IGE5!JSX_xWhXu8S8h0;FDtrG|tIjH5bg9cWjy zElmoStgU(9Le^DWwAOH3@s_T1VBJpNZ2h0Fj4Cig3bU zhT-P>v&Y;XWj)Z33jv5>a9onFsE%nH#f@nyRkNCb;D9@Vx|CLHRRXCG6EaFu)^SEj zxElL88?Ln|2~_lrY@N-GdY$YO{s)6l_{YTd;NcXFA#*J<{H$Fuiy|Bl>Q*x}m*&Ru|bydAZc*^9+;+0fm#WO2ZSItL_I105Did-Pym1;0liRAP)vZ~ zC4D=>7qpQUO!nF}UA4mM{$f;tNj%@tnX=1@VjojJwV^+}84AN(co z@%?d*^t16hPS{24cA|Lz-&-EyA&Dy5=9^#8n0sYW3L8U8Q}#}Tuwi!7zyK4T(gjdn zkW#CJSb?cFs_A)*rsO-N*wko+NHJy8*SyOEGQRz0$j*~8Pqy6HuY?STkQe0@zavG* z#i^%W4QliaP##vPb!@owJvN+g11-CXKsClDMS_Tf<1yO=76g?n^hfr080qM)#s25y zJM4P07GgN<7hkb>&+{>4Fv%PR9f8_P6h00%~UJ1ZEk&ooJQjz&?bF;3a_ZiBd)0=zlC@0of z0>OIrb^Z1&5b^MH-XYG3Y*EH5`v)HM_Dx(pctIg8V#m*|(yk@flYGB38JlSieeyHo zHc8qhPVcYqqvo^68v8ooizC+>)xWE41>PH1#NW1=)YQ~1*4Mz|ukv_LIm1v&_VPrQ zQ!>FIp(_PRmmyH(_>)F0Ri$(9Z!NQ7&R4ZwBYM86;%h$Y z+sT2gguY5T(l?m%Ycb!F2KI&*vOa)oF+F^!F0EZ7S>DpO zhg1-_`1R`n&GnX-Bt)NR0b1CxKa$jRz9!#yLBDK0s$4!1ZAJur?z6TK>q$N0f5OMh zORlMT>Fx6$a%Y|Z?_?yCS>A3)L};8jihpU@TdRb3?&MqSfYyp-)ELY!Jo~mlV~CX# zggyZ=^1DuwI0le)uT%NKPKs(%N77C5p`Gxs0h9J-8KnUKhXYk{pm{YY=%t^=p?T#m z!2JAqD9l6Jy>{>3jdRBuj5A3oA~B2S+gS8Hq43$u(waC=!)*uf{0V5g|8a>4-9X-8kRNk1S!S|ufp<;TLzVA{9hegztD>3_iLGYt>;wqD( z!CEF(3)Lev1E@IEQ24>|h{$YF|D}Vo@B5w-7B(|5a0~^T-d5F5GiLj`oj;#g7j2aE>B0ja`3u7C3RV8c zm8w_DJl9O_^c?+CQ)e*#y73&LKM6=?0PfCQ5M5MU{216Vi}-nT?(wC*g^tliB0eI5 z=1SaUq?ivArhxY|zT5}5B)Whzt0yi_1g!TYvwc^qBWc$8}TW_Z}%T`78Fs znV+zyqt_A7oG?=u=R9}n>+n1K!ebj!0NQ+b@S1**c8`mu#)()EzZ1Q2%8N(ZXC|z5 zuNcg!FMTh^7LigRrY@k;Fq>)sv51-md1n%E#d$@hkgC%wI)R{99 zvK%gG;**q|xVj5U&4U7&>-(T@#W_Z5cuiQf5z4A6KScd!7;5)ZkZ&F0JKA<9kad#2 ziJn|9SmeC)X;K}2%;7IrusO&l&Z{7y7GJ7(+SSzy>iWuWin|ZMY;~-PnSXliAzYS} zd4)m5hf(D&=7}D)&|pL-H@ANx_L@!#Mcx@RENpxf*Wlo{({Y4kO}sR(U0r>O#K_D{0S)gJPog&kHBkHSw#Y3zDqex|ev`@uhUORx z_`tbk`Lq~1mW|JW^4Gpt&qpVDBR)R*LLcymSTa{_qN-m#2Ufe*e-C9)T>9tz4~AK0 zPaLtB&nhmyjzWhJkV;rKFki&NIN9t_kq$;z;JGkV!=dQ8l4PgFq1-=0trtuXMx>wG z3-ItiJg)>0-~b`!A1!+0k%6G0q2dqshO%xo;^d~M-w?3x(Nv$b9--=g)4}xZ+czpP z(|o$+!nl)tz-KoBvL#)LbSl<^hg>gjXf_ppD!zVKQm%}&^g|3GVHVfvl`;QR#SL-) zn_u}%os-TC(qG#udrRzWAJ^qp9$OVw2#X$B43b|3y$P`v`iE)I zCr3`&w(lGjX}rF+>~@QjqvM;q|49>Z2NF&mojauVfImT6O`3pyK<#RTlOuCh@e~Jk zq?CZz=@_zGPj8Gq&KWg;AL8RdU{Ycf4@u~@Uxub zTl@PI%1;Zs->&2c{^E#0PY*AQZdb1VJ`5Fkdzvf>bcPi)Zv=-8vX1D21fGVsM`mnn z+&eV1{^}z&fMS@s5dg+`9SH*UD1;@QwL-8XWuBrUB5I)BIF&AiL&-v#kmnh?#~T$9 z(Sn^v_DS$JKz#lc4>*2YLx?7%@gz&qK=m2Rn3_9Swy)u)ONg@}|B}RLRe~D_ZW#vL z0o50}Fo=F!XqqOlc7V^7-n(~0q$!;MCy`W!zIyFm3kX3CtNG{JS`13yWM}|vz`z=G zilWnrkaS}kLIy}SK|grk(7@845Hf-_r!hq4_I}WO*qyIywO71w)?&n2E`mnc*~h zki(N0;S_{8fkT7f`-vttxVn^9R)zrK1dKr-syHNLZnk2ZM^H)GEy7y48IJ|o9-(o? zdb);QxmdEF$nPMxAV(TZlOTE>Lp>+(t^cAwP|g!I*5OozKm;M2f8a-QLX86`SPi{o=;%0n&$8Ypq40Ey z;ze0#2)WNGR7I2{BB4Z&?mSY8HY<%6$8Q0l>{$MqLv$h%UcO&{mFMBEIJtmGBB|5AZiAjv7xH^GA&(6+f-pXQ63Nb#COsF|3>@1k80D_jE-<_GolM3+OqGTtH4K*YesbvUEb<@MAQ zIhG7yk*4R*x1hjeKInpRxNQ*V5vpXYIV?9)J4Ff|(0pj1N2Y1Zleac~6$M`9vWp)?`^n?ZG{f`<z$*ztfQT4`LK&-B4#xLg<%v7Z zf&kINdY>F;%p(L2qQL|pI5hFWPaRr^hFAz0l8g2jM3p-&8@BoX`YwpZkU&D%H#o?Q zR9+Kp7+Xr;zr4T4xa369mycoD@41D3(j3|uoRuEduGD$C`f_L>rC&oz7!hw9#e#lY z_-%{2N6Dm1xlVJs<%7`iv4YqBSLG)QWStL|EM@(U3O)5aNVq!9MJ4Bkq+?Oo{FF1r z4h<-R{Y1Um6vZgCRPJwbHq5|UoPi%80n z3Td)Jtb&lWPT`sJIUiv}du(*UAq*gT2-#g)aq*#7kh}+=M*w145(&YUm2qj9@cJf{ zW>8c|qvsQvoGS`02nz72j>KrC^*93BJ35+)NzV+k~+Y5LPP*4pr0T{Y*le9HdkM54Vb`9Z1+gJ^~s?3D1 zdsmMkB|)Fzg%R5dp`XZUC1qs^9&a-xkqw|FaPwGNQC{BWIZ6JHUYjnf-y1pIC0Zdi z^&gNtY5X#L8?JLIiZJIq)3=9-E-k>M8m|Qo9A@o&RB;_4&_7?fe)p!bzf#g0<9GH&?#c=;4?AD# ztfQ+dk!FX->rgi{GBHj2D3M>v(a>hvSWfY-s`lLbSc6cjWp86)Tls6J(1;ISe-jj! z+@LB5WiiBzgy4ryP>?AnnXrC995;BxApJB79VfhsirWdLC4r_Oi*IddAqU_Fl_QGF zs%H(p@(cRklFGam%!%lV#|p({5SoUN!Z*KO{517w<5ZK&e;UP~7-i#s7#APA0$P<< zL1Ej<$_g4_)d7^hmnb%?pd@xE^7-U9X${b`o^o~FyltEAtO6`}^4i>LkA2?BnDUeG zwkI^81U-V02Sg795&wwRl>Pe&LWh9DAx2$9@w@|<4rO*LdY$d}=eoGK*g`&UTH!!v zx|0U_ygK8j6CBZbp7GPw_;(IwNy90<1cs<0;p|_76_?8B)6%j|v z(hn#CJ0>?ilY(wk5|l(ayIzXRGbGAxU)~-0>~DVTixb1VVJFc5_P%k5P0NF5ICZ7C zJ&oJ4zkb#b8dip{?HI(~OSBphlI_iou>NAKtE(f}+OF`iQKCN-|9}ELYk0OeSm`11 zf#96f1X~RPA7ag-=|_x{{=ux)#6d zbe7{5PZp~V!>|dzC(Kd8uWKY&d>$54_hMcGko=SvUC3n4qW=rBfEI*EWL$(2+f4Pw zty`kizJ+Lj0%8#YeHb|jiaxxZNYpC;pKb7zfgvRgO5vQ^h};bP4aycuU@0({fGmL= z5@mcRG!dy8HxFD&JvY4iZd)mQ5=>7mGRfWDS+)6{P1u<_r?^}#l2G0R&6TFnYJ<=@ z_H_#9b_Hu&d_PY8hM%XJF`erh(>RmQtcsyt!`SvXGTr${A480WK25Nh@x7+vNRE=* zw{Hqfqy&x7yBai=1Mt-r^(q0EmzABpt*isF?7e&U2)hCT@WER(ONbqp49m1x& z-Y-me3#|#jX%h9&lByq)Y^(<&Cs2!PML~?T$u8glQkQ4-7x(=7_L?4C_E2YnI^Y)Y zQN*r9A?XGZzIGoO(#KXb$PrR8V4_4-2a%nXR1$bN%J*`6C<$;8@>TRN=AJzIsgD zM2o_~#wG|MjS#7MUZ3pk?QKHJREl&8RU-;N9;i=o2RNErLC3*}C3#9C763PXm( z$5_b&BA6$x^coMvUEU0`@EWG>WSNaP@Kk`>LH-^>Fdx{+MDql}ap)z7AatofwEM0G zv_Ce#?1h(3j?S=08*dsP=fY+M!mf@oFICz9Q0f+>5v_Qv(-FhjPJV=d5RyT=NI_ZI z8{tg^y90zHDT6tA<}v~;`XPEtER{i5z>0-~Nbx|Vg;RB*V*>Sp6x(iU$jO6%HZ(te zOo>day|Z&&T!#jVEh1ke#MCwU(nDu8oBhrKHJnQb`%B`2jF1$793Prec8DnTjf@__ zK!#}C#j1_%p+Yl0MnW93mxq!I)oK{pvO%0f#^d(!l_DQMe>3_GK&Ugi2d2f)gRgnf z;Cn0F7d$RBVSkw$K|hU)c~)_f9;W)jM%%=MSQ!N=D&T+=M(N+@im!$EIpfW4eE1Q{ z|D=R~36+8$61N_xvQ-*8Ja)Z3Hi*OuiSCkYK z+yDtRv5qjmZ(?$iXBcHFIwy#ZHfT2T3knvoo}u*K0k;XHn8;X&UI=2?`#0?;s_JN~ z(&QfIpE_a?Vtc$>eT#jEN8|&0*{~gBiL}9ALoXQ)(qI3J*T|@=bp zCuqRQlQQ$RcO-!F#=ZijMwo%5e+H7c_+!}xp^MOMq6;gr-7Z)fi4g-E+X3S|Gjnq^ zY{WjhIUvL~yQlNJ^2!H=?z|tbet(niq@`_bI1}+i{MPy-4C^%tiiYbFZ;TDEFS=K4 zaO!x$l+lsdsC&*%nx{hZJp=0kglZ<%uctU-w!v=ulhRF{v=tI>_!^aGQr+BV_~N?k zZt^YpC~a4cPHL+A2By1VyFanDne zLjlElo~NU9YpLgD!*Mu@?AW0WN1M+V6x?f%W#-I5ff7gzNJ2)-ya0UzVd=+tv(-))3}rLD88I^qJ|M@!tRaEZLFh1oo&r{iX_RYLo^atK zrd%VV;kZ;dztF^?=KEVBRtN=YCO*ay{}LZRi;-BcsNDMX2`e&~QGjWLOB^wXX}+Sz z7>eBn45G5)55$q+43Xm5TE$k$O6&n&jAA5aqY#6rMxAorckS*OL=X+`Ste%QVW4;} zHn1Zsp!O|P4)C5nk59w%=|^&JbmBxYQjh{vWyFvrTg_dhZe(SZ=s;XR3oxz%I-2{? z+;JF?b7@KAMhOczC@WD5NO&j$Fi;v9V1L@D-T(S@sQRWCA2!;^G9KV& z=tW$vLY{}QM8yAx{{u>h`h25D*AuMSi5VwoH04mZPP1`iuo&&zuB5vVOb&imdN>Bz zt!D>+qE_s$FFDGOzSz6U0V3^10eIBFAmihuxAL=?X5Kz-?BtY(LPn@@yacCF8*?mX zis6{NFf&cGcvoG&g_xDeYPs5})t>Mkvw-}1; zi}49b-EyxZ%^TZx)2gF=niy|_0Gu4sVZuy{@Ks{*H`@Pj4`*iep zV&2DDzqGv5o0SE z3%9@hcpJr%?3ce>iBrrGwomJuJ*88WCa!#!Tmp||#ehlXa>|XeLnTgQ%bpQ4vUh7G`jj}A zkE}0>kyeeQ{+~1YSr6=wIc&{A_yEe_mWeU+*mXy-&tZ+lugw{CfEaWs4pf1XbAg!A zP=~4A>e(+b^^};Rv+f!dK2@dAhK_QGpTs)nvwYTKaz=9?zbxC?YQ?^A$;D#2pdml_ z$d-A&AS)DVS(#Z`#E7EUOi(eDoOJrcRN$aCM~Ds9MG^kf;f<&Qp`_G7DmNfn@*o34 z=K%3MnRd@ZIORZ-Kylry$hGbA_tGzOpe8sDEW$ujGn5!$2b0lMXM74tg;6_%!E`5? zWKM)dS)@d)<6~393nIx3CeqEtZe$h7=6Z~j1=~&1Vg|K$clLZ=^TUtZa%a_$7(w@E zs7_DkX2)3(W}RDJZUFb+pFbGRo<%xsZ)YcjPsBq3;m)Rs4{=;agIjt ze>1w}Y%?i6Bgy_RlW~#O7;jd>8j`0p~;fu;j5uCy3@?x+-W?YCzc)F-R63H zM7Wnl=Tm{K7~fgOe}6UKHPfIY%SRSF{S*yIJ6|lUuKmibKGV2uVXfNaSAO35yPjs% zV+(SWIZYagHlE2!=P4pFcV8FdMsl7K|F!|WJ4pmmjXE~iK zp}n>+bTqgw(_~}l-YWk{Sq2A7S%ZT1AGE=m_fM7ov9jVBT(L&v z+^#0V_RvUC^>n4K-oVz~M1=U?e_Ez}#_O({P!-A=HDyo-h>e*QSIaWHyubcA_rqcJ zXP$#OjYUF(2c^r-^j&{^V=X!s z@`^hL%)5oZ*w-uh8(ulFTK6r!(l0V6Oa4jKxdXM`AL6rr@2jpY-V$$CWS{wF8`agp zO$G)Jr*%V`ZT=VoLY>2-Zq-N8#Mklh>*Ye*+rNL!FxFSrnT|#AnUK0p>wKVA{G!@$ z;)G%0l^w}*8`eqjckE)A@w%@*OlKn8<#Suo^d}tkW3}>?dD4Gru0}Eb?+Ne)JE~jB zh%vcRb>)3d^c_uBoKCJS*K%C$Im!-&q%_c&wPiK-l5RpH%H&Kjdu*b*(ElVk=Irhn>eB zBKIDr7rbH1%hGD~A(@RVTIk?G19_RqA8orR{{AFx7L74RsS`YsjpLSL6s%MfcI;u< zewU7YeULbwt7et`f>#~CEy?5JO0;Gl;^bO78)rlR@=>|O-K1CScpr@MGTzSFHgJG4 z(%0_|xT_{5DkOyT+5Xc7sVti(TmJqa759jfI_-5KOEh z|N5yXKgaLSn_c%Fon%k02x~4()LYyXths|_oh?Ok0L95LuNSAQ@dI9d87Sq#I9X$L z&z>#A9~l*{&s+av*p3$KA+pp9p-qLV{CPgyT?)RXSx1$pnt$l$bcu+o~RmdT{`M3~q~( zq1w+*`@eh22p4!@I1+GJk4JJ&+ND5!seJt7$W=?`*;bjV&uE63>&kEBPcS;v!)UtLCHU;FsFIu*5z zns%8UDYVVDpKWx~U&y#=SP^?XXjJa&cRR_?!R- zc0o{u@wz3SdTfM^+4f)-&%uDMjg4RW#IUm^PIWXOHOI+N-4Kzm``=}7T&}wpQh86H zvO7wE!U3yjr&95EGyAH>b=SJ)Ty%`gxAeXqKO+{^#$?FeWmjw~&gQ~iST-$$fk)I` zmx9VEeY*OuIP|u?T?+lu?Rx644VC>F!P#Y>gw#|{1=N%suNQkc{T5?NR{U+6{ zR#t*z)U0N{LYzKP^J-j;YNzp1#gjKnI){%x-}i0poV2y1ORlH^`%aF&!Z;D5W_+G@ z6UXeXJ3qUelAIMODIDy> zn&uywX73cBFlPIBMmTOnO!3#+aC5-z@Ada&Xa$7%m^O>kI!qsBDcprqfKSeacX;1Z z+OW+O!OVN99KxFCU3sX3$^QF&!S_}bQL?(~w7ZSp9eZmb8ki)A`a}7Wxr%(d+|4^i z*$(f;72UK8oQLYWByW1Z?Lx6Img~O1ypPp6Zo=|@xhgBiaWL;Aesvz{DjGX*FB%cb_&bW% z=1vFp&OCC{8fR-cloio@^Y!jeqoeBi_^l}G3j?vtPtgAF7WjgGXv9!e!U2=imxbm>QrxU1FB(Z|4>f$v7BR)7LlwqdcTN?) zH?C0N<&iWsTW7h_`S+tCMT=z6h3jn}j`cg(7CF^O$oPe7$ z47k+YqCtu)N764*jyI36-Pzo0%f&K#?M_u(X0&WfteW}$eMY2>CM;dW_l%ljw;)Vw z?_KXp6|BnpW&Pim$i4XJ_3DC_wZy8_@RD2NnqOn8xk2t3`qfzlS&fwi>pR3B$1O*t zo=rdD_*8D`l~2Pe%xBEjv5ggrBQx60m-in>OH;n=P*aMU<;rr`r$j{(wvW=NdA9e~ zCsR^>gQs4FNzu)vW_PaIYZ+9DSoL>o3sIzH&9l!mvMr#QDfZs{_f_FH+)A?r9Huqz zXQW-^wOmBCS|yJjn;f~LBwD;w!*EO4*SK&hBH!2Q1O2K}Y(~L~!<`ds9iuVV{z%8n zD~Fm2M-~#A=9dap@4i)%=%2Ll-*zCdU zwwcR_yeJ=@NL*H6pn6x3LbG>RBTAad| z!y8~*A~MY^L_=jaBoG`e0li_)x5r4Dn?L(_iUh#fDy8S>$*dLdzmYIL}P)dGa zsKqM|Ua3U0FRn=qug+(PtMA`-ss3XKtFMJXhqvaDaU#kNzQr8<*|Rs|Ia|lzrSwq{wRgVUrWq8 zXC-L3^P{WyK)3DwE?c#=XWm`C7jJduF9=>N(25%<+w5Xgn#^Z$6Fd0tFUM~W0^~aUwY2;HH8IpD~P&q#Dc6U`& zlPT4xSPoCOm+##EHOY{>FgxGv8r{E>-ob(k)zcN#G_)g(1~haV|5MRD9Y4mobivKJ z3%|ZNEa1}KayyKy$#^wW$f*Q=804@mYu_Euh?6yDVqQJ z75ZnKncA<|Z}%{39GB2;HV!((k|n#naPWhIf7k2gyej#g61@$g+ePcN(^sFRuoeAK z;@tX2VI_StSxq)ZMD>vYi*D?Vk4i_ztf!cFe>Ez^Ce7Bo7|H+tU1T4nSJ!aBaK4pa zqh-O$w^@%1;dhNLUgBYC?DE~xxvTdXa;1M4e=hM=xahiM5Hexap!i+2OVJ09n8 z?R2)E+pJz2+7Rt46goaKGyRyIwA*{D&p*Brn2GQW*62e;zvt6=aDzB9&aC8|uxMX* zn4YHg)$%VrI_cOSi%)+s)n#OvzyJe3`a9NK>OZ*Gs%4w))uXRIReqQEUyF|sJip|e z{i?K!g{t=Gg=lB1j>j)f4zHy4&0iF}mTvIJ?i{?D+_Gnp_U*H3dsksc_AuGEj1)Su zw>;>!gdHhT%*<1Yx?}oQko=GLXu6VrI7URtOf=9e2bij>@{Mn*oFSurh0f#8)vX-t zOC2r31k}StIsaJZPNuDjhY~V~BM`A*)O&Emu|*~CVcp01)xo;RH95z^)zPuub&if` zGI09W)G|_Lrs>#%X5Hx%vZ8*^*Qv~$Yn2QNHmlE)=mqniG`mTt-$E*IeI<#megY09- z?PAZ>@GTdpW{IpeY-D4obfINwn&_(UF6zNu?cHyvUqM0=7_ER*u|O_>p``1)cI@- z-^J2D!rD}^lDbSEg->C6djFF*o4!dqWF-WKlS$qWQ~1EaQS{fm+y5@^=ua)70bTi) zEA~Zm@mrUb9@NNv`jTc?=QpytXXyRPp-}g`KBYa~AHR0KUJTK7i7eWY_pgbu0h!Es z3wLCw?2h(C@Mzy$Ezb6ez9#l%I^^F$EH+t@;i%zyVLrBtp?k=!y8l>i{2>J#(>y$J zl?or)hhDkGR;T}SvMPyWs!8)bq~HsS)9q}|JU;4Cb+3AVL)}iU3qJa{hYwTgDNep! zPfk{QtT=jZc*${CoBz%Bf1WSVjPqpNjg2B}2{FSAcU2W`u6Dmj6c7nA`lDLb7EYGb z=Vs8qDv)C(nad`YtkHO9>z`4_aZ*hw#{8$*h|_@d2lWgf0U8Jb71+Nr8a~*Sa0Z|X^ zcJrBrLo1(*75@EgRr;?oQ|+suvre~TaT?!DzEP9mf29@{33ZM*57%5B;u&WmtUr;O z>6OTmc^@14deSw^$L)`mXAq`14_zXPo52#_b#zo!!zF7SYbO(C1B*v7+4R4Q4!;J3 zF!TgODXK`P*}jmyX85qKCxzVFGbX}X>Wn)5KmHvs*M!b#17Krg3pd6;mdN(_DdnoG z7&wRe*S%`YOTVmNLg`5*_d!R#dThJb30t*)Z8{R)11(kVoayH4ha<>~XKx6}5znzA)6?T>cr^0j|?dF6@a zBJHKy5w=wge>_ID2$QBZg=_CPFRM<*v-cez3cBPOL#tX`_vdYI*0E~KlZvl$kM~4Z zlEJuFzmr%V&5d`5T;7|Edv&Wyx@7Ii^D=5SkYUDn;D0^|>ZhD9sM+3>g$2zQ@jP{V z7W$Gph<~34*WQKJuX33>Xr|5&MuADwa??1@W*z)v@E}10L zzf%;Pz2x$q)L(A0WWG3k{*!z44e{F}L%GYcM;g25oO3O7Osdu#T)%E9_@VHa@sHIz zcxyD|6mO_si&2DB&q6cL+$HqGC3a?gOjTvrdBpcC?G8Ij?Y;$z91p=N>Ue$~{XZ5> z?0&r>Qqe$>QC8td&qr4Mp5e-HU1>#&RZqWa70FNh!kHpBg>TrV?fR>7e|VUi0U@57 zOnR8@FIM3{kLX&W42k)#^Fl2rKfJR0cPq}2H)0*FYcFAS5Sya zm+g8T_K%s*0UAbz%h`@1L1rZu1^(JJVG)IbB_jn~%XdXg)mM)+9`vq1(dNr{n|8@t zA$4NeZB_9`gjL>+MhukaBisGJma;iuw3M>>pF=<8hNfQLkQmjE+QM6Y;$ABKEPLI94yS}>Lpen-3xQybyLA_X}1~{_|4vuXfzwY^>AIp~oEj4P0RW9VlF`CA^Fc>bLH{-i;Kzm3VW-lrF(9R=p?D`03dRTD=Fzizuvkh zuP>d^kGn+~FS>ipZtTEZ1GP!V(+8*B_fgKF=Epb`x<8~e5;tWRhlKU|`EOsrMX zaWnPb3noqVAxA@=UX7rEi|X8^-4qU#(fd93oHL7xxcT_<=>5V2q4=X3x%W(M{Zt|f z1ljavQ$Ab$$fMNJ6J5?$Vb;>bQ=n~46Zv0y7!ZOQqfKd?$;)zQnp4Rlji1tQdw9-%Jq#G$FvL!+w}AQdR0MI;exyW`4l=@ z@|JCDz8e^+2ptP=H}`(>{`2j(@g3?J*{?3V$oGldF~80ww}*44V#6=zeVhg|IKx|6 zwXBATS*i>Y4lZp7^f0O;0^}@oY*H9jopWOOBG5D%&gJpQP z#0Iv4lUw&Htql9xo?&saKeOFQ@q9n~sM z8KyZp%pL3PixvL(tMIjf`aq{kcMPz?sa9(&#?B|VEc7@=U3SdQq9K5@^00GM3*4#m zZA@*fe_tYYU9t7HoajWuP8FAnS}yJFubg}Hq=u^MMbCLhmG8U8BzXMQUEPtDVzdltMl$e%GANyu+epOGaG zRQXib_L`b?Sn}{5dLhHwo~)jgJw~kv)w#dpTB1%Y@iMv zdYmghUFV^d_u#}Cts$9`5eqQ}hmv7dJsC+uh5W!jOC`DKjG_pF~_iwx>KJ&tZp%%;Gm8fCv zn=&MUP|Ak+Nr{fVfS;(Y!VtFn&m)daPpB(JKsa-I<~b>L2iNsZ$GaE2I_DI(WR+1i z^S!^`%9nXR1ST0u7vC9yx+`OLvHk2FYh)_>3v8Ry05^KJ9F)>w^XpDgGv|2&vIj`-N7~jIR~w0 z&gFD^UCZLQi3t18TheYapA;R<2ZY5M=Bb0gM))MZB>ymxOw)#1aDT_eiX(jz&m z$&cP163El3OPrmlxT;QY8G&Z_4DO!1y2LHCyGz>4>2?~CpXmGJbyKqF8I@|y9TXJx zOA3^TTdu1uG-K)Vd2Sy1WNw+#LN$3zR>GoHGtBxOzU@%8XXvYEeFooI1grblE1hiK z3D$3vDWAI%?G*)pdnm|q*f<7PH!9Lk>tiNyYkp`9fLP~ak%ShTf2X*;6E;qp-&dZ} z8<-E=l_Pmm#tL_YuNd2XnC;w>lh$S1#@z4BN;MX>%m`{D~RHP;wTq#NPw$Eqedh@U(zn4E7n9AS*STj`F3T)qDo z)9i?Vr6_%-OJ6GMs7WmA((CB(x|6BBEQ%4*`7T+<#1kL9s&o#NxcI4)leXecVLGsd zJRdpT{91myon)m)X|Hak&>@4DhlrS10$&xT$<3@AlB8XDUU49H5Z)j%Xnpx$t6?Kt z^rc`vM0rX|Tw5&JCw?Yxjmh$K%we5sR;TgBgWJVF3%{H*Sk*1*K6M9UZ_RU!_J4cT z9vBdBGF!0hs$Klu1{ z)e|jy+6Itj#3yYr?;b`SUs|dk8y^#s4%k30ilZzy%J&rK+t~P|q&xvV=U?luE}ND- z{VhZ{3ATrrmrJOgF#QV7_}Z|$>C9n zZWB$J7fwYdgP?)_N?hA{v@#EKGmYn5S7XpmUBnWnvQRU#>v=V$U`5xHMcDuKGKCfuOVlH=E!^7fsG`s z^)NRA_LB3(a}NikANhraKa6~8e!oWJT0ZQwME2}4LG!Xc1lflcg>0Fg`bNNu6;eVG zg9?YIgV37!uv@zmqHB;O3wm`Or_I6UD#Jrap+qu2@(;JeVJ6`E72p=jLyM3Bl zG1+9cf8gM`BO{-GZ@l0gtSaGBaKMFX=P^;OCA%{loQjwQ@<#3FYK31c+1dL2;-k7j ze!_pv6T`xcVk@C5x~ZI^eC}Pec>Nax?S9C&WnkE>-B0L|{g~oYQ;VS?dR)2bP`$Fm z-om%a@{B{}V##$fU%oiheMlLuJ8OC?clfza?lD7F&Ox^O5iH{B(`WCWJ9}rw=gkxG z*_UNLH`Bg^SO#BH$=?3g#zk)(eP~y zN`_>W>46`HEDNEv@NJ66^;ggzh0j3+XQKSQ<1j(vY4<~nPRuYJao#qmusUBcim^4~ z_vfXKqrGxy292!8h@sAW@6#`H_QPt<<;4svuB6dSq}`7exuTP)-U4>N;Hppr?^~@{ z!h%jaPGD&HblRp_TdrGewS3SV8AH@ueD)SGQyJb+JlcdT46TRT2iC$NIKN+sQIxK* zybe@Rf%<;{7c>YvvfS#$4#7L`Fd?}Qy29;mb8>R#rmjj1V{T3%n(;NO^jamq;4hrf ze7?_X-t^fte$JKuP@}H=`+Lt_n&v@cYwL8#_;S%%@eXt;Av}cJK>Ahjy4(|I*p^+; zX-4chH0I~122(zI@C*01Je_EHFcyQMim^_IowtE$#7N?!k|F0tj-S_D-iIgDGt2e+ z+hxA@nCUtIxu(mpx45K1OkCjChE{z5pA@_VL8A=pd9?eZ{D0aiLZ7y4JaH6$#m+~g zjzbVlh#gGQPrJyQeW-^BQeSoMnxNba;_Q!jqldmQtTWlnd3y+tQJ_I-qt zB3}u{1X5Ve*`Dp*`}R|CIWv5elzbN-v5i)ojH)~LJ_FCG0PT6#eyAUn+X@4&h^tpU z=ZdOl;nRQm-6RE}hZ}<8SK6wHBzCMu(k>MQAZAgYe44U%_qRvA8zmm3b&B6FW8?a%g^`kO!ww%gyqa!&_?mxp}O<0 zyib05M&`Vl%3it(5BcCb6*~PcCH1U7yI36~Gm2;&N=P%64Zd4)zE(R3?L5ZbRd*eb zX3yI={A|t6!_u6Y&lPH}ZjD%XuA1ifvn<`Y>(YI1H{5bs>w6=V?{;Wa>e>f`{Ez2y zzcrFfmhVN)ymly|aG(!NvMzDsk<{h^rC24AGv{@PrKLrCsAn%#5KkerU{079_y4&1 z3aBc#c59C!2B27gh+v>7NC?tp96cZ^x#=l3A_;LE~sq(3>kgDN)avE1k3@PSFZAHMlsvkVmwl99E|4Mpn* zV1Z27xM0kIhL8k;9hckWOT?pi@VXN~J>61zqx;L2^Pv()*&>BNoIQuDq<-PTg}2T% zI2KbMw<-5S584RQBJIZTua#h^!ZbizEFC*PF%Tc|rgLfJCY_8AFvgn8Ub1n}C?!FD zdUPFG3Y~%c_G2ogcv%<11a*juE_0S+#m`-?TS|4H^owFKx1Za7148a4d(L4v6OEnm z8sPWSX7~}A+k!8(>F2kAT#pYHGRDVwA{=MxsADEbqN$rsX&2!?%<}?%-P@twv zPIfPzmRq&w=$~-5v2h5x9_f2v!}Er_dj+61r6EKa_#DGfAcm^Tru0l9-tj=+pFnkr zkOhMxiZnM4!xZtHf@alEZ7+6i5~;4VTv&2v8ge+OB7*R+-%9ANgI?$I(YFR?2u9LX6!>*{Rc81Cvm z;MF9pb<)YD-Bz~X$L)%ycN0}#>SY5R>m%RnED`f|Iv{7V`%qKH=FMgwiiE?2Ry$uS z`Ac*xZ_4*458n&Xsl3VRkkI0D-!qEOdFZN9QhVk{Ga4!P!peWn4En6%3>}(|5$_DMc$`VzkjrW?=3bk zpB$^EeZEDsZy-;u-FYZ^5Jt%La~2ur4igp5-aHTyTV*Xax*!N(t?j(K9hMozPj%l@^L1% zi}PbGGRi64v@1_=;bM)J2DNPShau!y%O|53<~H3NEMfcF&~@xImR=}$%#|BWzFV{T ze)|P1J71nHl|M^0pIgK=|7iJKK{jzQO6T&n^>hwc!EO$oz7JLIvJ@(S?wN&5tR+EN z*k7`aO9Lww-V}_N(R1=|{e)LT(bS9su?gVUNn+Uf@S+4grE+B@mTInI8sRpb$f28j zI!}4kpcM=rj}{hv8rRvU#x?q6%VuOr-GW=GF}|gBumqUGVn_7{I~}t;R@|Y9Q}eld zCst$Id5Tc{!1SshCmm|X!8)Pm-lOcay$9ld1j>RQbmq?ukSp_!i8~mis2SL6rlv7` z%UHgqZYkB6QKI|L^fkl86T@YW7Z&Wo8piJ*$na-jyxzRV@aKEut2yP)oC0)L)4;|7 zbm5pxA5f;i5_6j*GQ+ch^5b9j^I}FvB=Cx^;x>3)Q&( z{zOZE9&4Jvk@+=S%{y^MP06}bw6^!#=G*lawy)R7bX#nX-R;=)X*ZR!*&<}1p}(V2 zbetCMY&W*IFlRAg^|Ke|m(`oQ6EFG>hF_re%5I!QCTiLNYGoo@1`>9;`n~t9?@NrvV9#fPKMqDUh#k9c-~>KUD!*)-X;~2_Ek1jo2K(UurTXKDHw5gG zu!)4Q@(qlfua)^7MkCY+C%Y7#^sACDEb&uHn7@<1j~}3lO)&HifzQAuDH%s*=skmA zy}`})SR^@fTouxNv@OT$LYOW@cLRNl8T>R$c#ro!Qrav#>5VnzjyRdnf)+g;vfnoN z&xH#wIy_dEjE5Rp)`Q`(nJS19)bjh=6VSF&Da;kRI=}nmSDgL?g~)rjM=#d6zX74z&y=yVZo3J$K+wI%2uKHSAog?A1YciH8oVcls7`# z*W;g?ksSHt28VLf$m@esEQ~|71!|^Q2`ZzF{)4U5la?Z@OOEEZcX*o{)&l)|6EgHL z-%8F<^ufE|e+kBq9=*1~X=~^B9vEdfn?dffMHw2vZ_fma5W*Gw_ZLlIG0y)SJ-_hLXzeNl#bgmS|P{ojnoEicoZ~PAGtqkE&G>7l5;jNz!%=ZfA zL;5rHiPeZvP7p_kPYN>ekB+aWu&fi2)^QGn{r;F8`sipKuuNjzDS0%-^VJ^9+Zt{t zhe~V-9NQ~aygZeH-uyV}fIJqvxb6*~wzv$-B7Bqx?g8wb*qr4I&)`NhAeUPjrAG^* zkMG$7oB<7#84U7#Vm8ao9tR+i$$6Q|j;mR;&^~&WI&&U?3XO-LI_k1%`3T!(>-RXrK`c(=cKq1)`HY8KszRF^gZ@2u@yK)Xr zV0Cz{Y>aml)u4E_zMlHwzqkORmp?O#T6gFJS4=6IH$TO+EndM=FNNDTxP^Pog$mwH ztBili9{tsW($z;}%Fq>?{z`ZyvChou)FuW6Hb@l#r*}&!y1^{ccF6?L7oI zco;}1i%fO|tvra#J{?X3ZX|e>*CzSbI?*%cWp7XAC3mVCIL_O84rm@g@;4}H--e#%g;6*?hx^Io|kP;jcz9cM6W5=pf00wnZ zo^xoCzM-={20M^;`)XOo7M888%>mSll1~16Em>E-x>H zP5taWi83yD;*;uxeE75_1a}wa=r4okUA$ zjw_8*or85w35Zk!S*=#SO}pktzhap<%!hmaLT-j}0^jre+I>dMc}9xBl6kQ>Ui z)c?eHIFPa{2)Nw8SsO&U_|3hOi!jp zJLM&;0c@0ormyqWW-^i$E8l!oO#%PDwDapnzA%4L$o|k#D(aF$NG_ zIij(;1`Lb$@ZnlO1j@*wI*_}Ty!{N>zXST@hwYz{kf`wafoy63-~*|T;M%~Q$onoZ zAfPv=1DEGsAgq&O)2pP)ZF5OBMM7vm==fL4gyni9OnQoUuw_XNqX&wC+@I8Y^C>Iy zg2UfaPZ4z%5ih#TSdm355dAemmG)cv#D*y7*t#_5YH9S1ap!lDkbyF<2Fc|B#qFKM ztv^2!vMwhd5d+Wxg!GL3Y{}*fEYd|GcMbNXdDz+3CEPoI3{dHAh~nXRRPxr(7wYb{ zr_`X{ttU8zqYHlBCii#wkYfK}U8{+J<&19@0VWn7GZX7R`oeC8S4oe`xUDR7-gNEA zED{eDHaVNQ`LsY@|330Q$$>AL{lx&J@DST-KWc|BoOBM%T9l&84y)_C$z9~JG-MPk z?@^?ibv>~!+~q~r{s%Bc+OKUnwN8Ha4sc1sl02df1v()&`(q8iPTJo` zA1fY2K1_gh&XcwOP_(rZJeDUS06m3?S$EJN+O+uM zy*F765uS`G%mS zr5dfwH#LNd6ywz_A+ZH;FO3HlYhYjG$=<&1?*3P%;V(5B-Y=jjPPq|cT{sm07mq~9 zbccZIQR7|cBj2d?$R1@6&rEA0Ko8D*|LbQ0b>!2y&e=iPcn;rz#ShheJKeC#!WnHf zF3Fo884Dx%%HYSrxoZ7#&^#JEES(B>N2NMQkh(`)?g>b_hY?kwJ+H;($+YjgurzG# z;meKYrg&p3=Q84uCi=9ln__Wz=)tg?9ksYknU<|$VUCSD?67txXU~)E=)T`ePqKuA zGQmY3m>#@1&1=v*4#3d8SbkO#e?P`i=BoCbZi!*aJN z>GRJfo#ZuA>6F-*vLCKPv-@SQHjagb_A+(w*wY%l0}7u8%C_wg_+uik!^PmTzJeXx zb-mK-T-lC0k0d3`uUe zFY0~t`hB@`_3PepMi~VNez(z&^`{8_ee;D?N@L~g72(K#S{)4JGcr3Cd5uo@xLdXv z#WA>udUd|z*SyMVVdPF(>$~ew7LI_8jm3Eb2PCY<7FW#Nce$+p{X%-A2K!REW?D(b zGm_iK338h3e1G(Y*5E$Kx>cZ}sghrDP1Z?2gO9KOMLr%+IFG6~6aI5cQz;%yb2a&p zursh6@#b!KUl^WW8udsypcHWb`U+yI7lCmg=WoB!YPol!!qEejmgd6U9|Urg^`f@*M+!mWd_DS6&GgFAC4j;DTtK4?cF7?Uyf=s+Me6s7v4l zpj=FjzuDY^3XTTLy4?7Z@}wA9j9ky>PSP;qDd{UpdXsk+gIi!0wFHU7LNS1|D%ehH zqw$v)km7ZnrusMA9et>)>6GP{GGeGII>N5~!%%jmu*xrwd3~TSAhE>_5w7gZmjv|# zF@TfT3QAM<6RTEHvpR0FB~xM;&qEvoP?UO@)hDPr<0dD$?X`BZo<*%J(J{T>OXf9P zrSy>(2ZyQ|4t~zt*ZN%N|g4{&8nrJ#H*L=ayez7wZ&# z1aiB5-j?H{p5$`mt~U@De99EKQDD1|&^k z5QK5o5W3BPrlI8NU?YTStnAix*l|H`;IO(&MGnwkz_ zQ&}VIegU@9%;mdn@|5Gy909}}dcbP9{#6kYS>f!jXTd@jS5s)_W|%hQ;cK{OnSLJL ze>L#5BgtiepkgycGlf42h&$a%_HXRN&D`@HcneEtF{JsWd%lyThM512%B*0MI3CW% zRL!{E8S-|dLq842BRJycaG)`ch`uClZh~!cB`ebBdcC?ZZ+UOb{F{7CoZSX&aKQ@` zh*?|Ey!#hEcZp>?AlQrdjIo136Adns-Y+&fV69C!+V$R6>(Cm_lM@63r*_-Y-Q*q& za(v&wN}v8HyTU#`z;in5<<;+B7|ojXPV3$?p8gZ)*b4nreCrzHX?vIc@&RY==~db} zL(??@g$H6p7flSs;{P#Uy0+O(5{kTU!~P||qu$yqutzD3a6d-*D8;rq1WPyH;xOnB|jf!VK31;Bkdr$xK5^LxBKku?8dV3H?{_V^$!h)`{5w@tAkpnF?x@kS{l0MJexY{zut;uVjqNnTl4f?*~q) zQ78eS1@nCVGNVJ()@%MhYi}-Stu4ySR{ZvsvvRUBT#fwKrAnSbcdy^xhE5e74}d_s z!nQ_y`AH~C`k(T>QFyv}ooPi-6ftx_`!(N?;vNfx&jKz*&OQEG87Te8Rh>tkeuLxr z&338PD*rqJPaQlykHONB)OWCEsDrzVhORC(KHT{%a0UkYBAU@T1m-wh=HECG4h7eB z3!NSRM7X%0*lmtaf+Zv`F$#;u$W}G!*3)3txrQhZcl(7UXQL~-Ffl$7_^kyrlGc^dX9nLr^Ia6 zDnxr=Djj1th*=-TNW8EFAQk*Ebjaj40j0zSl?QOzOa_{2go@$Gub1WpzbW4;s5er{ z(_sq6eK;m_!C%WT5iLKjprA5P$ycNm>B_3;ibuIy(u3U$aTv~;qhQg+y~p(4ke@r~ z8aY&G&6IqooLup%G+^){2LZWa-Ob{KcHL}WVaEMAyCFtnBg>DcR+{rC-trDDu5<}X z+Q&dj)h7oK@Wi&kot25VaI+P9oZ{u;0|^^-$g+u2Ho z=c`17D|gtg`}_1(?_nEvkI+sxmxvF|$C)?Da5a7E`Pnv;TfI&q++HxHdVzE(U#+r} zQ0+RSOT*w}GjU5ed{_|~mKc*bl=Elz;|Oa)8T=|-9(zH^jB%T?Ocd7Rk)Gc9*ApJB z4LzK0VucGMYEtHBx8$0TOCTrQnob)1li*LYv_So&2YKm5@^P`Tl))gI<(RlQf*KNp z53PYHx(b6E%_dTA^BM3SC5{%m;gCxj2W+vGxv}4-&qjhk$%DA1YA}q4Wg7vv5>Z&6 zy>Ouso!c>_nc_Z)^z?K`SU3&A4T6M9GBt0$E@s)5qY9Tc$XUOksq+sC>c6RX=D{Eg z@I(9q@Q??;>bNx}_~pUUn*3GZ>r|uS$t$0B@M#8Rd%BGthx_{wsT5J3v}Bk?7cce* z=5_lhfh3U9-F+n)i|^nZ(}c!q3K$+4cW%1Xid0sRD`=^~GKA9&o2Bintno0-yIsxG zMT4!DITok+#9(K@66sD+D*O5RMw7}K=MZVMCfZAmDp)jo64RGuw%=X zC=ff)??8W0W&-#UcZwLwSku2VbRIbH;L)R@v~mHy%w>c;e?Pw%thWF3@#7&Wsl1B5 za91Z7j#O?E!Y^z@v#@>l?qoQvTq9>312+`R@rX9T4W(^sb$6T_=b)d^+E6iHD0fzP=DD5rsskshjf` z#d_t*Nz1ceYdw6G&9u%GU60!9JX==he{xf(giBQ6W%U)FHSMRxrCs(79zU?Q#BSr+ zjKw~q1B%7N4GLQ>ns)Y=>bGdib9_;M*&ZdB6<$|(kGHtMO83S~Lw)}dkJFO(EW+JK z6C~h{nv33#qb3hGFRXfyZDg-d;^f+nr{kE1TtoM6-aw_~CixV=(|R7UVChYtoL+7L zymlNA{`&E#j)|9qL4WY%kW?eJF%o1UeM#N7Z@7BfWif5&t!l@P)*ainU9NhJvL>an z`YSO+!geu&`@!AO;OhBNaGPMadTeu?Y?$j3&Mdd2;6^%&f#I_GT}_GV|6p`lkN1py zKk>!rmq^1^E?ps?-nIAeSLnOfKcQUNQApl@Hc9w)meDBxa4R(d zUI6;kh`+G=)925FKr;Q>t(ss3Cre-Q{Fy2oj|D6{+R%JsXWx0ave)2KW?uQam6Sio z|F!AWa!CvVHcSpFx|wAKLW=+m^FnRlUQ=k5^OIim`gau)qF@zEqP`d9Z%n6g>v_m1 zP9T{F%Y__UEwhm--0N_|@g!O!HcYEcLlZ{o6MdC>JimX}CayU?_Kj)9d$fTL0bo1u zb?3fxLwyce=L|xGdi{DIKL9P**iA^k!7`tMdW#z0arz&w17LEH7MTn;$0HRZR&OJ-y8yjy#KYqL(^M+QFl{{bto^w1f`JCp38svr=1oo$J?WWP(G?f>3Y2>|Xly3F)reM&cM29R^MWHyOGl4>l$z z!R~knW9!VhrUe4EErL1TJS6|#>~}F!Gdis!lXezYyiKxV4(S! z#9t3jVgpbL-v$C;Ar1vrU)aC?YN!{yiESjSmf+CTVz!=XSA3|Nw z-j^zF{^+UP!85}q$wy4v#S@K+i?CiS3Qdv)l3#3wkc;*R1{c2jlR&r_TH+XFqPY((!#I-Ktb}w#RU;JYiEW=P{AH*WrIF7E*axNx{09 zL3yvx%pd&40qUnyMcE zf|TBw!Ot?E&w^{SdgEQVJ%nr+2a5mca_%zhnGCfI9Q}c_vi`XR=fKLXvFJ?fBsV<% zVPEQ!xG~+|y^HUVUH{)B%_{HK{)`HiepC2npfR#O@5~NCy=#wK#5M_Lwna>8j0TdJB0)SO1wYk16Jtrfz+dajkrA!`FuZ-8)vphd+ zxJwZpx^C!!{V)i0q@LoXJ18j_K=4cS6LRskx&+xIurtj4j=|d%%%=qXR!ImR6UQ{; zoTml{5PXg_lu=PG48qv&S67z-@7~-Y9FNko0fZ`e>sAi%Gkx8?N>!2Yq+K86stv)I_tmg2x2emid!l>5Hj_@No*>{h@PmoGwwym#-eze}W*QhF?Z%^)kmT4z z-~fz6iNzZBDZNImFo;*s2;}XD-Ifxo><}K#e{kp?G8JY^cEEQxkyqg2#ftQkXFDh78*GH{C)E^68YB;;dpJ zo3AtbQc|32c*X%mT}4g^Y0MryYAzV<=!h!95ye8zkzGh+ z=yv$ON}lM$XmG-bi_1K)rbdOh-tFLA?HgLU9v+XXWLycmy<4GI#4vIr_#k0Yq2Z~1 z+HmJ#N!ux-<&hb5-SnT^J{UJf1}uot8ott!c|0c`oLN<&yS74Cl_q1kH(5R@W!k&Z z++ZY%9}IuCc$ZZbTB!EybL5M&nS-)Z*Vz?kM-*r6U9ZWcZ&R{XH`gw;;f1I(BATW~3MQ(A*Orj75=k@Dy3-Ij(E6R%sVRrw4#qo-gB!CGb=<1ci-r$W zHC<_c%lyD)z5kp&@96KfsaL1?`YZ>0S2|hJE`M7;HQMidl4f#Gh-pMaIYiBF>cbtG zVR_Yr7w7r1^_LN<2J7~{9W>)-|Dy?a7ECF5gStIaggZVz>BH9~OX#RTtXKr}6JTdY zax_YgKRU0EiHkS&tWNcxx~l}-f^bezTDOBgz3|>Lvg;nef$i1V_uqKF+_JQG~GQ z2!>bwwF$G<2|5p<>`Mv1i^o7`%RsRaCgY^`AD2HnWS|t8Q%u^J?+{`Gq1@;ex#r@L zBC!f3B$@47UEL(^mN~*s?`0ZKH5#SL)}odcn0DuD%-Qw1-}yAZl3n2MK=Xe=ThRjC z6^+0Ho`e#XITef5K6@= zF{uvh+oU2ooK;W|TB**lsEc{hG)+ZV>9sUkSy4Uue8X=1AWkDeQ0*FlB5o#^od8_J zS*-E9x-Hcvx~Oyve9kPUKNG0 zC%fob0wI7(Kw#^@u3cRmZ}5x2g(}Y&2BVqG77YV;`TEAZt6n*4Dt%rbQ!qomZ8QC~ zr=aMs0aLzA=vPZ+kj$1HJ1B#%3;Z3^j1jDy&WU35YyVysj=j0zV`S0z?Ke5UHiDo1 zJ(d!~oxYLh=i)>XrXz-YFY@`Uci7Y)+2MBXdCOrQo>E3^95zDoRbYLhUbx&JZxVz|fb0f#DklndD@;fsqg_X&+Z@sd)t~TYl?{ zLeXh~sV}yChD%DtEn55y-;v?H?e~ltd5s%e8%JfAWR~6CFSm{CC~33K&$gYsQJn4A zJ}Ywc@qcjvB1)I$XqU&gueRTu>@@GR{?6Q)yvX3MWo2r3Ks475vwtp)3h77~z4&6;x!}Kf^J=DBd z57~OW;ZD4nuW(?vnlJOhxum=nzhC-&6I{vzsht@Ke{8i4+R|QV%AMWNIru9vKAieC z(hIMb0IDHYdBm4<9?ciw!5`q}z6MWtIX&q%hi~TzSFh9rD^Y|y?a?thArWYSPb=NG z^El}ks<+iX#LRKyhP!j-Dc9&63m*Jj?N;FO>;n+ypmpU)Bv+X$64r}h|3K!o+LQl@ zA!sHPtG3-i(=s`AnPTC;ByNRU8SXl+c>a~}X$UL`A`tF8m^jXuc`okUtJmaupgbo9 zH^DV{rKEH*jv)TF$Zu$yuuxZMB=ui#5vhBNeSqO+s7p5QrM3lxC`T6+~gJuGq z0jjL9e}|LCYyVCdDEH2tJAJxmWb?pQq$??V7qlIl*;(!DUh*KTi3|STxnSpGZ&!nz z?MOlg$)N>7#ixqCgv`l7+f%T+@c!ugC6F|F?bl7jWEkTxi~Cc*Gu%?&S^6;{41>#y z;nq1QEoF)VFtXW7$g!x%D7ePpf!r#3^h7rXsI`AuJC>E%7mM!S|Dn%GuxkZhAP?X+ zBi=nahNwxNw>GkP($7r4{M;p*Z0fqR+;hTi}9Na`kADrE+%iWw|D1ZOb#vv|u4#Emy>T&hpLELrv9f ziHv@>dsD$G5GefGzE-OIv=6q^rT`FVNY)Fq`z88us(lw#&!UqnlIvqc&EyIv#rDZ5 zdvT5#)S&ynHrrXOJb5p?u4Gdv1mV0zTbttLLz4x@JG<5AtE_ug)#fZKO1I z?ccYLkbKC%6xRHtutg6ZkKH$*25TeT0#5QrTcnTPC7BIe#IrYemvT`4Wnv2%!8)<% zq?jP4S}nA_r!eTuz$q;R2#s9mrJ=2TElV`L`8t78rvMRztaQ>?d6QWcTptX3Zkrkb zNb+lJ84!F>b~0=6YLo2NO5@;#-@m?mQ82Kt6eajK0oySVXp~uX>?#u!PE&F-bF}MX zAz(Qqk^EK@d4ixDSdTb`3iTV~-JPsl-2PPE?kcH)Jt89M8qC0Wo+apGS4XeKkpl-} zH9}NwBEU&GPbQQW7pv-=v(sc4XXR!J@a?$#`ME025%~ged|&O@;rXlx+=0mj$z?E= z{RY^|%dQ!?fVT}mL^`sRjiYqHLPH!Xh8`12=)cYnZz2};>)v}5&_#plcknPFKx zje}u5OeK-?X3c4_a?7)q34}v-h!DeW{1P)vyXOCV*t`QB6-kv|GUE!z7v>rR28yWW zkM7?m`~%D)CvpqzWnUagLL~#hO7pC;auWtc6??v8{!t+oyv#f1Jb?~q2=z%m>2S?; z(EU>|`4ir)gq3$+WCDL%M--xcHQ9BY-*j>J;!+3cQ84yDEFz)~wv9kJ!6ASMnV|yg zJ$-!tda+x7j0t;=$oTMEfJgnX6L^i77Rx*FSAv}R;L)R1^3nV;++;@R-ei<^1?CkR z)Z^8H3zwMqchc_6Azz3b8mb2Lvq)dE8uA$$pVQ`hJIiVQ@1FA-hp*N+bFF;+ah)|+ z!i%7(>`HA6c-c63@v}B9`5==?;>KRHw#L@*lRAw;fwsl*8;zEWXkM8wJ{j#0nz7Yu zI$S=L*WzmFwMSdj8`Tqm8bUoml5#Py{j}rhlP9VU4jCjqgh|?erY$n}Gc?Y6by**5 zh6;rJj|3J+aZ8%6wm*?Fonxw^zU1ckFs=G~W}miuVoz;l)yVcmn?1^bnSy%KG!yxV zFx9qPr%#%6e6|V^mbO{V8#lZ>>9)9HE5X5QEAinvK-+I7yUUsy88WpnzpY>nih_vA zx%=fmB=>x=%C;Eq{z|Ip(ncq=V8u#$5`0~w-f z-?H$)9+@@B)C16jwG_H!BU@Kb+l~OgG1V0QqjARq^m%eON&fu!@oy$h8EwRl-cR&1 z&s0C(iQ$gu>IcAy@k}(10CCL+oECevU?HjA#BFrkA*x${Wi6~9&E``>EG!{uBM0)#0M;laxLqNBPB#v-@@ce^#+Ii$jZvU0n z){)PPm9R?u-8SnoJtoHWAHl!imi(}`(cCY=30B(zU*}$pSa5xwf2GV!yJ`l0K%Rf{Ulk#jUSRWAR1$Cx|jrz`DheaNu zATEdu*)>3nPOn^v*~ut=(9ExaFkumP6@Ajz_8`-d0U>EZaos6+XG9LX8*j3r&m;D! z^g2eZapHoPAt zepzMZ6q}TH_szzzpTOhQ4a3u8IYsVR1lBO4>SdT59^nX+x*Yi7CnII2z^J}aRt
yJ* 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 T?%m{DNJ_|@N&a7RN@xNA$YqU| diff --git a/examples/signify-react-ts/index.html b/examples/signify-react-ts/index.html deleted file mode 100644 index 6c2e23dc..00000000 --- a/examples/signify-react-ts/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - Vite + React + TS - - -

- - - - diff --git a/examples/signify-react-ts/package.json b/examples/signify-react-ts/package.json deleted file mode 100644 index c2419b5f..00000000 --- a/examples/signify-react-ts/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "signify-react-ts", - "private": true, - "version": "0.0.0", - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" - }, - "dependencies": { - "@emotion/react": "^11.11.0", - "@emotion/styled": "^11.11.0", - "@mui/icons-material": "^5.11.16", - "@mui/material": "^5.13.3", - "puppeteer": "^20.4.0", - "puppeteer-extra": "^3.3.6", - "puppeteer-extra-plugin-stealth": "^2.11.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "signify-ts": "file:../../" - }, - "devDependencies": { - "@types/react": "^18.0.28", - "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "^4.0.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "vite": "^4.3.2", - "vite-plugin-wasm": "^3.2.2" - } -} diff --git a/examples/signify-react-ts/public/vite.svg b/examples/signify-react-ts/public/vite.svg deleted file mode 100644 index e7b8dfb1..00000000 --- a/examples/signify-react-ts/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/signify-react-ts/src/App.css b/examples/signify-react-ts/src/App.css deleted file mode 100644 index b8f30383..00000000 --- a/examples/signify-react-ts/src/App.css +++ /dev/null @@ -1,57 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} - -button, input { - background-color: #61dafb; - color: black; - border: none; - padding: 0.5em 1em; - margin: 1em; - font-size: 1.2em; - cursor: pointer; - border-radius: 5px; - box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.2); -} -.input { - width: 250px; -} \ No newline at end of file diff --git a/examples/signify-react-ts/src/App.tsx b/examples/signify-react-ts/src/App.tsx deleted file mode 100644 index 4f73b0d9..00000000 --- a/examples/signify-react-ts/src/App.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { useEffect } from 'react' -import './App.css' -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import {SignifyClient, ready} from "signify-ts"; -import MainComponent from './MainComponent'; - -function App() { - - useEffect(() => { - ready().then(() => { - console.log("signify client is ready") - }) - }, []) - - - - return ( - <> - - - ) -} - -export default App diff --git a/examples/signify-react-ts/src/MainComponent.tsx b/examples/signify-react-ts/src/MainComponent.tsx deleted file mode 100644 index 41699230..00000000 --- a/examples/signify-react-ts/src/MainComponent.tsx +++ /dev/null @@ -1,807 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, Identifier} from 'signify-ts'; -import { SetStateAction, useEffect, useState } from 'react'; -import { - AppBar, - Paper, - Toolbar, - DialogTitle, - DialogContent, - Modal, - DialogActions, - IconButton, - Typography, - Button, - Dialog, - List, - ListItem, - ListItemText, - Drawer, - TextField, - Autocomplete, - Card, - CardContent, - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, - Fab, - Divider, Grid, Stack, Box, - FormControl, Select, InputLabel, MenuItem -} from '@mui/material'; -import { Circle, Delete, Menu } from '@mui/icons-material'; -import AddIcon from '@mui/icons-material/Add'; -import { TestsComponent } from './TestsComponent'; - - - -const tableObject:any = { - v: { - title: "Version String", - description: "", - notes: "" - }, - i: { - title: "Identifier Prefix (AID)", - description: "", - notes: "" - }, - s: { - title: "Sequence Number", - description: "", - notes: "" - }, - et: { - title: "Message Type", - description: "", - notes: "" - }, - te: { - title: "Last received Event Message Type in a Key State Notice", - description: "", - notes: "" - }, - d: { - title: "Event SAID", - description: "", - notes: "" - }, - p: { - title: "Prior Event SAID", - description: "", - notes: "" - }, - kt: { - title: "Keys Signing Threshold", - description: "", - notes: "" - }, - k: { - title: "List of Signing Keys (ordered key set)", - description: "", - notes: "" - }, - nt: { - title: "Next Keys Signing Threshold", - description: "", - notes: "" - }, - n: { - title: "List of Next Key Digests (ordered key digest set)", - description: "", - notes: "" - }, - bt: { - title: "Backer Threshold", - description: "", - notes: "" - }, - b: { - title: "List of Backers (ordered backer set of AIDs)", - description: "", - notes: "" - }, - br: { - title: "List of Backers to Remove (ordered backer set of AIDs)", - description: "", - notes: "" - }, - ba: { - title: "List of Backers to Add (ordered backer set of AIDs)", - description: "", - notes: "" - }, - c: { - title: "List of Configuration Traits/Modes", - description: "", - notes: "" - }, - a: { - title: "List of Anchors (seals)", - description: "", - notes: "" - }, - di: { - title: "Delegator Identifier Prefix (AID)", - description: "", - notes: "" - }, - rd: { - title: "Merkle Tree Root Digest (SAID)", - description: "", - notes: "" - }, - ee: { - title: "Last Establishment Event Map", - description: "", - notes: "" - }, - vn: { - title: "Version Number ('major.minor')", - description: "", - notes: "" - }, - dt: { - title: "Datetime of the SAID", - description: "", - notes: "" - }, - f: { - title: "Number of first seen ordinal", - description: "", - notes: "" - } -}; - -const MainComponent = () => { - const [selectedComponent, setSelectedComponent] = useState(null); - const [client, setClient] = useState(null); - const [open, setOpen] = useState(false); - const [drawerOpen, setDrawerOpen] = useState(false); // Open drawer by default - const [url, setUrl] = useState(''); - const [passcode, setPasscode] = useState(''); - const [status, setStatus] = useState('Not Connected'); - - const toggleDrawer = (open:boolean) => (event:any) => { - if (event.type === 'keydown' && (event.key === 'Tab' || event.key === 'Shift')) { - return; - } - console.log('menu') - setDrawerOpen(open); - }; - - const handleClickOpen = () => { - setOpen(true); - }; - - const handleClose = () => { - setOpen(false); - }; - - const renderComponent = (componentName: SetStateAction) => { - setSelectedComponent(componentName); - }; - - const connectToAgent = async (client: SignifyClient) => { - try { - await client.connect() - const controller = await client.state(); - console.log(JSON.stringify(controller.controller, null, 2)) - - } catch (e) { - console.log('controller not found') - await client.boot(); - await client.connect() - const controller = await client.state(); - console.log(JSON.stringify(controller, null, 2)) - } - } - return ( -
- - - - - - - Signify Client - - - - - - -
- - {['Identifiers', 'Credentials', 'Client', 'Tests'].map((text) => ( - renderComponent(text)}> - - - ))} - -
-
- - - Connect - - - ( - - )} - sx={{ width: 300 }} - value={url} - fullWidth - onChange={(_event, newValue) => { - setUrl(newValue!); - }} - - /> - - - setPasscode(e.target.value)} - helperText="Passcode must be at least 21 characters" - /> - - - - - - - - - - - - - - - - - - - - - - {selectedComponent === 'Identifiers' && } - - {selectedComponent === 'Credentials' && } - {selectedComponent === 'Client' && } - {selectedComponent === 'Tests' && } -
- ); -}; - -({ client }: { client:Identifier}) => { - const [identifiers, setIdentifiers] = useState([]) - //async useeffect - const getIdentifiers = async () => { - const list_identifiers = await client.list() - setIdentifiers(list_identifiers) - console.log(list_identifiers) - } - useEffect(() => { - - getIdentifiers() - }, []) - - const handleClick = async (aid: string) => { - // Your asynchronous function logic here - await client.rotate(aid, {}) - await getIdentifiers() - }; - - //render the identifiers - if (!identifiers) return
Loading...
- // const data = JSON.stringify(identifiers, null, 2) - - - return <> - - - - - - Name - Action - Prefix - Salty sxlt - Salty pidx - Salty kidx - Salty stem - Salty tier - Salty dcode - Salty icodes - Salty ncodes - Transferable - - - - {identifiers.map((item, index) => ( - - {item.name} - - - - {item.prefix.slice(0, 10)}...{item.prefix.slice(item.prefix.length - 10, item.prefix.length)} - {item.salty.sxlt.slice(0, 10)}.... - {item.salty.pidx} - {item.salty.kidx} - {item.salty.stem} - {item.salty.tier} - {item.salty.dcode} - {item.salty.icodes.join(', ')} - {item.salty.ncodes.join(', ')} - {item.salty.transferable.toString()} - - ))} - -
-
- { - const length = identifiers.length.toString() - await client.create(`aid${length}`) - const list_identifiers = await client.list() - setIdentifiers(list_identifiers) - }} - > - - - -
- - - - -}; -(identifierType:any, data:any) => { - switch (identifierType) { - case 'randy': - return ( - <> - PRXS: - {data.prxs.map((prx:string, index:string) => {prx})} - NXTS: - {data.nxts.map((nxt:string, index:string) => {nxt})} - - ); - case 'salty': - return ( - <> - SXLT: {data.sxlt} - PIDX: {data.pidx} - KIDX: {data.kidx} - Stem: {data.stem} - Tier: {data.tier} - DCode: {data.dcode} - ICodes: - {data.icodes.map((icode:string, index:string) => {icode})} - NCodes: - {data.ncodes.map((ncode:string, index:string) => {ncode})} - Transferable: {data.transferable ? 'Yes' : 'No'} - - ); - default: - return null; - } -}; - -const IdentifierTable = ({ client }:{client:Identifier}) => { - const [open, setOpen] = useState(false); - const [currentIdentifier, setCurrentIdentifier] = useState({}); - const [identifiers, setIdentifiers] = useState([]) - - const [openCreate, setOpenCreate] = useState(false); - const [type, setType] = useState('salty'); - const [name, setName] = useState(''); - const [dynamicFields, setDynamicFields] = useState([]); - const [dynamicFieldsValues, setDynamicFieldsValues] = useState([]); - const [selectedField, setSelectedField] = useState(''); - //async useeffect - const getIdentifiers = async () => { - const list_identifiers = await client.list() - setIdentifiers(list_identifiers) - console.log(list_identifiers) - } - useEffect(() => { - - getIdentifiers() - }, []) - const handleOpen = (identifier:any) => { - setCurrentIdentifier(identifier); - setOpen(true); - }; - - const handleClickRotate = async (aid: string) => { - // Your asynchronous function logic here - await client.rotate(aid, {}) - await getIdentifiers() - }; - - const handleClose = () => { - setOpen(false); - }; - - const body = ( - -

Identifier Details

-

Name: {currentIdentifier.name}

-

Prefix: {currentIdentifier.prefix}

-

Type: {Object.keys(currentIdentifier)[2]}

- - {/* { getTypeDetails( - Object.keys(currentIdentifier)[2],currentIdentifier[Object.keys(currentIdentifier)[2]] - )} */} - -
{JSON.stringify(currentIdentifier[Object.keys(currentIdentifier)[2]], null, 2)}
- -
- ); - - const handleOpenCreate = () => { - setOpenCreate(true); - }; - - const handleCloseCreate = () => { - setOpenCreate(false); - }; - - const handleComplete = async () => { - console.log('Type:', type); - console.log('Name:', name); - console.log('Dynamic Fields:', dynamicFields); - console.log('Dynamic Fields Values:', dynamicFieldsValues); - - let fields:any = { - algo: type, - } - dynamicFields.forEach((field, index) => { - if (field == 'count' || field =='ncount' ){ - fields[field] = parseInt(dynamicFieldsValues[index]); - } - else if (field == 'transferable'){ - fields[field] = dynamicFieldsValues[index] == 'true' ? true : false; - } - else if (field == 'icodes' || field == 'ncodes' || field == 'prxs' || field == 'nxts'|| field == 'cuts' || field == 'adds'){ - fields[field] = dynamicFieldsValues[index].split(','); - } - else { - fields[field] = dynamicFieldsValues[index]; - } - }); - console.log('name:', name); - - console.log('Fields:', fields); - - //create identifier - client.create(name, fields) - const list_identifiers = await client.list() - setIdentifiers(list_identifiers) - handleClose(); - }; - - const handleTypeChange = (event:any) => { - setType(event.target.value); - }; - - const handleFieldChange = (event:any) => { - const prevFields:any[] = [...dynamicFields]; - //add field to array - prevFields.push(event.target.value); - setSelectedField(event.target.value); - setDynamicFields(prevFields); - - const prevFieldsValues:any[] = [...dynamicFieldsValues]; - //add field to array - prevFieldsValues.push(''); - setDynamicFieldsValues(prevFieldsValues); - - - }; - - const handleFieldValueChange = (index:number, event:any) => { - const prevFieldsValues:any[] = [...dynamicFieldsValues]; - //add field to array - prevFieldsValues[index] = event.target.value; - setDynamicFieldsValues(prevFieldsValues); - } - - - - const handleNameChange = (event:any) => { - setName(event.target.value); - }; - - const renderDynamicFields = () => { - return dynamicFields.map((field, index) => ( - - handleFieldValueChange(index, event)} - // Add any additional props or logic based on field name if needed - /> -
- { - const prevFields = [...dynamicFields]; - prevFields.splice(index, 1); - setDynamicFields(prevFields); - const prevFieldsValues = [...dynamicFieldsValues]; - prevFieldsValues.splice(index, 1); - setDynamicFieldsValues(prevFieldsValues); - }} - > - - - -
)); - }; - - return ( - <> - - - - - Name - Prefix - Type - - - - {identifiers.map((identifier:any) => ( - handleOpen(identifier)} - style={{ cursor: 'pointer' }} - > - - {identifier.name} - - {identifier.prefix} - {Object.keys(identifier)[2]} - - ))} - -
-
- - {body} - - - - - - - - - Field - - - {/* Add more buttons to add other fields as needed */} - {renderDynamicFields()} - - - - { - // const length = identifiers.length.toString() - // await client.create(`aid${length}`, {}) - // const list_identifiers = await client.list() - // setIdentifiers(list_identifiers) - // }} - onClick={handleOpenCreate} - > - - - - ); - } - - - //make it component - const CredentialsComponent = () =>
Credentials Component
; - const AidComponent = ({ data, text }:{data:any, text:string}) => { - - return ( - - - {text} - - - - {Object.entries(data).map(([key, value]) => - typeof value === 'string' ? ( - - - {tableObject[key].title} {value} - - - ) : null - )} - - - ) - } - const ClientComponent = ({ client }:{client:SignifyClient|null}) => { - //write an async function to get the client in the client component - const [controller, setController] = useState(null) - const [agent, setAgent] = useState(null) - useEffect(() => { - const getController = async () => { - if (client !== null) { - const controller = await client.state(); - setAgent(controller.agent) - setController(controller.controller.state) - } - } - getController(); - } - , [client]) - return ( - agent !== null ? - <> - - - - - - - - - - :
Loading client data...
- ); - - }; - - - export default MainComponent; diff --git a/examples/signify-react-ts/src/Signify.tsx b/examples/signify-react-ts/src/Signify.tsx deleted file mode 100644 index 1186ce47..00000000 --- a/examples/signify-react-ts/src/Signify.tsx +++ /dev/null @@ -1,206 +0,0 @@ -import { useState, useEffect, useRef } from 'react' -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, ready, Algos } from "signify-ts"; -import { SignifyDemo } from './SignifyDemo'; - -const KERIA_URL = "http://localhost:3901" - -function generateRandomKey() { - const characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - const length = 21; - let result = ""; - for (let i = 0; i < length; i++) { - result += characters.charAt(Math.floor(Math.random() * characters.length)); - } - return result; -} - -export function Signify() { - const [pre, setPre] = useState("") - const [key, setKey] = useState(generateRandomKey()) - - useEffect(() => { - ready().then(() => { - console.log("signify client is ready") - }) - }, []) - - const inputRef = useRef(null) - - useEffect(() => { - if (inputRef.current) { - // inputRef.current.style.width = "auto" - // inputRef.current.style.width = `${inputRef.current.scrollWidth}px` - } - }, [key]) - - return ( - <> -
- {/* show kel*/} -
- - setKey(e.target.value)} ref={inputRef} className="button" /> -
-

- Client AID is {pre} -

- {/* show kel*/} - { - const client = new SignifyClient(KERIA_URL, key) - setPre(client.controller.pre) - try { - await client.state() - } - catch (e) { - console.log(e) - await client.boot() - } - const res = await client.state() - const resp = JSON.stringify(res, null, 2) - return resp - }} /> - - { - const client = new SignifyClient(KERIA_URL, key) - console.log('error connecting') - console.log('booting up') - await client.boot() - await client.connect() - console.log('booted and connected up') - setPre(client.controller.pre) - // const resp = await client.state() - // return JSON.stringify(resp, null, 2) - } - } /> - { - try { - const client = new SignifyClient(KERIA_URL, key) - setPre(client.controller.pre) - try { - await client.connect() - } - catch (e) { - console.log('error connecting', e) - console.log('booting up') - await client.boot() - await client.connect() - console.log('booted and connected up') - } - const identifiers = client.identifiers() - const resp = await identifiers.list() - return JSON.stringify(resp, null, 2) - } - catch (e) { - console.log(e) - return 'Error getting identifiers' - } - }} /> - { - try { - const client = new SignifyClient(KERIA_URL, key) - setPre(client.controller.pre) - try { - await client.connect() - } - catch (e) { - console.log('error connecting', e) - console.log('booting up') - await client.boot() - await client.connect() - console.log('booted and connected up') - } - const identifiers = client.identifiers() - const resp = await identifiers.create('aid_' + generateRandomKey().slice(1, 3)) - return JSON.stringify(resp, null, 2) - } - catch (e) { - console.log(e) - return 'Error creating identifiers' - } - }} /> - { - try { - const client = new SignifyClient(KERIA_URL, key) - setPre(client.controller.pre) - try { - await client.connect() - } - catch (e) { - console.log('error connecting', e) - console.log('booting up') - await client.boot() - await client.connect() - console.log('booted and connected up') - } - const identifiers = client.identifiers() - const resp = await identifiers.create('aid_' + generateRandomKey().slice(1, 3), {algo: Algos.randy}) - return JSON.stringify(resp, null, 2) - } - catch (e) { - console.log(e) - return 'Error creating identifiers' - } - }} /> - { - try { - const client = new SignifyClient(KERIA_URL, key) - setPre(client.controller.pre) - try { - await client.connect() - } - catch (e) { - console.log('error connecting', e) - console.log('booting up') - await client.boot() - await client.connect() - console.log('booted and connected up') - } - const identifiers = client.identifiers() - const aids = await identifiers.list() - const resp = await identifiers.rotate(aids[0]["name"], {}) - return JSON.stringify(resp, null, 2) - } - catch (e) { - console.log(e) - return 'Error creating identifiers' - } - }} /> - { - try { - const client = new SignifyClient(KERIA_URL, key) - setPre(client.controller.pre) - try { - await client.connect() - } - catch (e) { - console.log('error connecting', e) - console.log('booting up') - await client.boot() - await client.connect() - console.log('booted and connected up') - } - const identifiers = client.identifiers() - const aids = await identifiers.list() - const resp = await identifiers.get(aids[0]["name"]) - return JSON.stringify(resp, null, 2) - } - catch (e) { - console.log(e) - return 'Error creating identifiers' - } - }} /> -
- - ) -} - - diff --git a/examples/signify-react-ts/src/SignifyDemo.tsx b/examples/signify-react-ts/src/SignifyDemo.tsx deleted file mode 100644 index 2286c3d9..00000000 --- a/examples/signify-react-ts/src/SignifyDemo.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { useState, useEffect } from 'react'; - -export function SignifyDemo(args:{ text:string, onClick:any }) { - const [response, setResponse] = useState(''); - const text = args.text; - const onClick = args.onClick; - - useEffect(() => { - // Additional initialization or setup code can be added here - }, []); - - const handleClick = async () => { - try { - const result = await onClick(); - setResponse(result); - } catch (error) { - console.log(error); - setResponse('Error executing function'); - } - }; - - return ( -
- -
- Status: {response} -
-
- ); -} diff --git a/examples/signify-react-ts/src/TestsComponent.tsx b/examples/signify-react-ts/src/TestsComponent.tsx deleted file mode 100644 index 12e16b23..00000000 --- a/examples/signify-react-ts/src/TestsComponent.tsx +++ /dev/null @@ -1,28 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, ready, Serder } from "signify-ts"; -import { Salty } from "./test_components/Salty"; -import { Randy } from "./test_components/Randy"; -import { Delegation } from "./test_components/Delegation"; -import { Witnesses } from "./test_components/Witnesses"; -import { Multisig } from "./test_components/Multisig"; -import { Credentials } from "./test_components/Credentials"; -import { Challenges } from "./test_components/Challenges"; -import { Rotation } from "./test_components/Rotation"; -export function TestsComponent() { - - return ( - <> - < Rotation /> - < Challenges /> - < Credentials /> - < Salty /> - < Randy /> - < Witnesses /> - < Delegation /> - < Multisig /> - - ) -} - - diff --git a/examples/signify-react-ts/src/assets/react.svg b/examples/signify-react-ts/src/assets/react.svg deleted file mode 100644 index 6c87de9b..00000000 --- a/examples/signify-react-ts/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/signify-react-ts/src/index.css b/examples/signify-react-ts/src/index.css deleted file mode 100644 index 2c3fac68..00000000 --- a/examples/signify-react-ts/src/index.css +++ /dev/null @@ -1,69 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/examples/signify-react-ts/src/main.tsx b/examples/signify-react-ts/src/main.tsx deleted file mode 100644 index 91c03f3f..00000000 --- a/examples/signify-react-ts/src/main.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App.tsx' -import './index.css' - -ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - - - , -) diff --git a/examples/signify-react-ts/src/test_components/Challenges.tsx b/examples/signify-react-ts/src/test_components/Challenges.tsx deleted file mode 100644 index 579953d6..00000000 --- a/examples/signify-react-ts/src/test_components/Challenges.tsx +++ /dev/null @@ -1,112 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, ready, Serder, Diger, MtrDex, CredentialTypes } from "signify-ts"; -import { strict as assert } from "assert"; -import { useState, useEffect } from 'react'; - -export function Challenges() { - const [testResult, setTestResult] = useState(''); - useEffect(() => { - ready().then(() => { - console.log("signify client is ready") - }) - }, []) - - return ( - <> -
- {testResult} -
- - ) -} - - diff --git a/examples/signify-react-ts/src/test_components/Credentials.tsx b/examples/signify-react-ts/src/test_components/Credentials.tsx deleted file mode 100644 index 15bfce97..00000000 --- a/examples/signify-react-ts/src/test_components/Credentials.tsx +++ /dev/null @@ -1,196 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, ready, Serder, Diger, MtrDex, CredentialTypes } from "signify-ts"; -import { useState, useEffect } from 'react'; - - -export function Credentials() { - const [testResult, setTestResult] = useState(''); - useEffect(() => { - ready().then(() => { - console.log("signify client is ready") - }) - }, []) - - return ( - <> -
- {testResult} -
- - ) -} - - diff --git a/examples/signify-react-ts/src/test_components/Delegation.tsx b/examples/signify-react-ts/src/test_components/Delegation.tsx deleted file mode 100644 index 22b0124b..00000000 --- a/examples/signify-react-ts/src/test_components/Delegation.tsx +++ /dev/null @@ -1,74 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, ready, Serder, Diger, MtrDex } from "signify-ts"; -import {strict as assert} from "assert"; -import { useState, useEffect } from 'react'; - - -export function Delegation() { - const [testResult, setTestResult] = useState(''); - useEffect(() => { - ready().then(() => { - console.log("signify client is ready") - }) - }, []) - - return ( - <> -
- {testResult} -
- - ) -} - - diff --git a/examples/signify-react-ts/src/test_components/Multisig.tsx b/examples/signify-react-ts/src/test_components/Multisig.tsx deleted file mode 100644 index 9777e812..00000000 --- a/examples/signify-react-ts/src/test_components/Multisig.tsx +++ /dev/null @@ -1,136 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, ready, Serder, Diger, MtrDex, Algos } from "signify-ts"; -import {strict as assert} from "assert"; -import { useState, useEffect } from 'react'; - - -export function Multisig() { - const [testResult, setTestResult] = useState(''); - useEffect(() => { - ready().then(() => { - console.log("signify client is ready") - }) - }, []) - - return ( - <> -
- {testResult} -
- - ) -} - - diff --git a/examples/signify-react-ts/src/test_components/Randy.tsx b/examples/signify-react-ts/src/test_components/Randy.tsx deleted file mode 100644 index e17ee4ab..00000000 --- a/examples/signify-react-ts/src/test_components/Randy.tsx +++ /dev/null @@ -1,90 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, ready, Serder, Diger, MtrDex, Algos } from "signify-ts"; -import {strict as assert} from "assert"; -import { useState, useEffect } from 'react'; - -export function Randy() { - const [testResult, setTestResult] = useState(''); - useEffect(() => { - ready().then(() => { - console.log("signify client is ready") - }) - }, []) - - return ( - <> -
- {testResult} -
- - ) -} diff --git a/examples/signify-react-ts/src/test_components/Rotation.tsx b/examples/signify-react-ts/src/test_components/Rotation.tsx deleted file mode 100644 index 09df7d5e..00000000 --- a/examples/signify-react-ts/src/test_components/Rotation.tsx +++ /dev/null @@ -1,56 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, ready, Serder, Diger, MtrDex } from "signify-ts"; -import {strict as assert} from "assert"; -import { useState, useEffect } from 'react'; - - -export function Rotation() { - const [testResult, setTestResult] = useState(''); - useEffect(() => { - ready().then(() => { - console.log("signify client is ready") - }) - }, []) - - return ( - <> -
- {testResult} -
- - ) -} - - diff --git a/examples/signify-react-ts/src/test_components/Salty.tsx b/examples/signify-react-ts/src/test_components/Salty.tsx deleted file mode 100644 index 7ddea739..00000000 --- a/examples/signify-react-ts/src/test_components/Salty.tsx +++ /dev/null @@ -1,129 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, ready, Serder, Tier } from "signify-ts"; -import {strict as assert} from "assert"; -import { useState } from 'react'; - -export function Salty() { - const [testResult, setTestResult] = useState(''); - - return ( - <> -
- {testResult} -
- - ) -} - - diff --git a/examples/signify-react-ts/src/test_components/Witnesses.tsx b/examples/signify-react-ts/src/test_components/Witnesses.tsx deleted file mode 100644 index 49197b13..00000000 --- a/examples/signify-react-ts/src/test_components/Witnesses.tsx +++ /dev/null @@ -1,76 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { SignifyClient, ready, Serder } from "signify-ts"; -import {strict as assert} from "assert"; -import { useState } from 'react'; - -export function Witnesses() { - const [testResult, setTestResult] = useState(''); - - return ( - <> -
- {testResult} -
- - ) -} - - diff --git a/examples/signify-react-ts/src/vite-env.d.ts b/examples/signify-react-ts/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2..00000000 --- a/examples/signify-react-ts/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/examples/signify-react-ts/tests/integrations.js b/examples/signify-react-ts/tests/integrations.js deleted file mode 100644 index a695235d..00000000 --- a/examples/signify-react-ts/tests/integrations.js +++ /dev/null @@ -1,92 +0,0 @@ -import puppeteer from 'puppeteer-extra'; -import StealthPlugin from 'puppeteer-extra-plugin-stealth'; - -(async () => { - puppeteer.use(StealthPlugin()); - const browser = await puppeteer.launch({ - headless: false, - // headless: 'new', - devtools: true, - }); - const page = await browser.newPage(); - - - - // await page.goto('http://localhost:5173'); - // const button = await page.$x("//button[contains(., 'Agent State')]"); - // await button[0].click(); - - // await page.screenshot({ path: 'stealth.png', fullPage: true }) - - // const p = await page.$x("//p[contains(., 'Client')]"); - // const text = await page.evaluate(el => el.textContent, p[0]); - // console.log(text) - - //open modal - - await page.goto('http://localhost:5173'); - await page.setCacheEnabled(false); - - //open modal - await page.click('.css-9b1tbl-MuiButtonBase-root-MuiButton-root') - //fill beginning of url - await page.type('input[id=combo-box-demo]', 'https:', { delay: 100 }) - //enter key on the same input - await page.click('.MuiAutocomplete-listbox > li') - //fill passcode - await page.type('.css-1t8l2tu-MuiInputBase-input-MuiOutlinedInput-input', '0123456789abcdefghijk', { delay: 10 }); - - // click on the connect butto - const searchResultSelector = '.css-sghohy-MuiButtonBase-root-MuiButton-root'; - await page.click(searchResultSelector); - - // page.on('console', msg => console.log('PAGE LOG:', msg.text())); - //STATUS: CONNECTED - const inner_html = await page.evaluate(() => document.querySelector('button:disabled').innerHTML); - //closte button - await page.waitForTimeout(1000) - await page.screenshot({ path: 'connecting.png', fullPage: true }) - - const Closebutton = await page.$x("//button[contains(., 'Close')]"); - await Closebutton[0].click(); - //getting the menu button - const bb = await page.$x("//button[@aria-label='menu']") - await page.waitForTimeout(1000) - //clicking the menu button - await bb[0].click(); - //get client route - const clientRoute = await page.$x("//li[contains(., 'Client')]"); - await page.waitForTimeout(1000) - await clientRoute[0].click(); - - console.log('going to identifiers') - await page.waitForTimeout(2000) //wait for 5 seconds before closing - //getting the menu button - await page.screenshot({ path: 'client.png', fullPage: true }) - - const bb1 = await page.$x("//button[@aria-label='menu']") - //clicking the menu button - await bb1[0].click(); - await page.waitForTimeout(1000) - //get identifiers route - const IdentifiersRoute = await page.$x("//li[contains(., 'Ident')]"); - //click identifiers route - await IdentifiersRoute[0].click(); - await page.waitForTimeout(1000) - //create new identifier - const add = await page.$x("//button[@aria-label='add']") - await add[0].click(); - await page.waitForTimeout(2000) - - - //rotate first identifier - const rotates = await page.$x("//button[contains(., 'Rotate')]"); - await rotates[1].click(); - await page.waitForTimeout(5000) - await page.screenshot({ path: 'identifier.png', fullPage: true }) - - //close button - await browser.close(); - console.log(inner_html) - -})(); \ No newline at end of file diff --git a/examples/signify-react-ts/tsconfig.json b/examples/signify-react-ts/tsconfig.json deleted file mode 100644 index 8e8e4c07..00000000 --- a/examples/signify-react-ts/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "paths": { - "signify-ts": ["../../src"] - } - }, - "include": ["src"] -} diff --git a/examples/signify-react-ts/vite.config.ts b/examples/signify-react-ts/vite.config.ts deleted file mode 100644 index d65adb3c..00000000 --- a/examples/signify-react-ts/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react'; -import wasm from 'vite-plugin-wasm'; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react(), wasm()], -}); From 9a237eaf4e983a41301a91bf02bdea676953a459 Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 7 Dec 2023 17:30:10 +0100 Subject: [PATCH 135/186] update package-lock after removal of signify-react-ts --- package-lock.json | 2276 ++++----------------------------------------- 1 file changed, 178 insertions(+), 2098 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f2fadca..c750249c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,6 +65,7 @@ }, "examples/signify-react-ts": { "version": "0.0.0", + "extraneous": true, "dependencies": { "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", @@ -87,686 +88,6 @@ "vite-plugin-wasm": "^3.2.2" } }, - "examples/signify-react-ts/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "examples/signify-react-ts/node_modules/@puppeteer/browsers": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", - "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", - "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.3.0", - "tar-fs": "3.0.4", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=16.3.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "examples/signify-react-ts/node_modules/@vitejs/plugin-react": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.1.tgz", - "integrity": "sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.2", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "@types/babel__core": "^7.20.3", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0" - } - }, - "examples/signify-react-ts/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "examples/signify-react-ts/node_modules/chromium-bidi": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", - "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", - "dependencies": { - "mitt": "3.0.0" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "examples/signify-react-ts/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true, - "peer": true - }, - "examples/signify-react-ts/node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "examples/signify-react-ts/node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "examples/signify-react-ts/node_modules/devtools-protocol": { - "version": "0.0.1147663", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", - "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==" - }, - "examples/signify-react-ts/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "examples/signify-react-ts/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "examples/signify-react-ts/node_modules/puppeteer": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.9.0.tgz", - "integrity": "sha512-kAglT4VZ9fWEGg3oLc4/de+JcONuEJhlh3J6f5R1TLkrY/EHHIHxWXDOzXvaxQCtedmyVXBwg8M+P8YCO/wZjw==", - "hasInstallScript": true, - "dependencies": { - "@puppeteer/browsers": "1.4.6", - "cosmiconfig": "8.2.0", - "puppeteer-core": "20.9.0" - }, - "engines": { - "node": ">=16.3.0" - } - }, - "examples/signify-react-ts/node_modules/puppeteer-core": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", - "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", - "dependencies": { - "@puppeteer/browsers": "1.4.6", - "chromium-bidi": "0.4.16", - "cross-fetch": "4.0.0", - "debug": "4.3.4", - "devtools-protocol": "0.0.1147663", - "ws": "8.13.0" - }, - "engines": { - "node": ">=16.3.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "examples/signify-react-ts/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "examples/signify-react-ts/node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dependencies": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - } - }, - "examples/signify-react-ts/node_modules/tar-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "examples/signify-react-ts/node_modules/terser": { - "version": "5.24.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", - "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "examples/signify-react-ts/node_modules/vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", - "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "examples/signify-react-ts/node_modules/vite-plugin-wasm": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.2.2.tgz", - "integrity": "sha512-cdbBUNR850AEoMd5nvLmnyeq63CSfoP1ctD/L2vLk/5+wsgAPlAVAzUK5nGKWO/jtehNlrSSHLteN+gFQw7VOA==", - "dev": true, - "peerDependencies": { - "vite": "^2 || ^3 || ^4" - } - }, - "examples/signify-react-ts/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "examples/signify-react-ts/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -793,6 +114,7 @@ "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, "dependencies": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" @@ -805,6 +127,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -816,6 +139,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -829,6 +153,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -837,6 +162,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -845,6 +171,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -978,6 +305,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, "dependencies": { "@babel/types": "^7.22.15" }, @@ -1041,6 +369,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -1049,6 +378,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -1080,6 +410,7 @@ "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.4.2", @@ -1093,6 +424,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -1104,6 +436,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -1117,6 +450,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -1125,6 +459,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -1133,6 +468,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -1329,36 +665,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", - "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", - "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/runtime": { "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", @@ -1409,6 +715,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -1455,152 +762,6 @@ "node": ">=10.0.0" } }, - "node_modules/@emotion/babel-plugin": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", - "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/serialize": "^1.1.2", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.2.0" - } - }, - "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/@emotion/babel-plugin/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", - "dependencies": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "stylis": "4.2.0" - } - }, - "node_modules/@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", - "dependencies": { - "@emotion/memoize": "^0.8.1" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" - }, - "node_modules/@emotion/react": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", - "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "hoist-non-react-statics": "^3.3.1" - }, - "peerDependencies": { - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/serialize": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", - "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", - "dependencies": { - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/unitless": "^0.8.1", - "@emotion/utils": "^1.2.1", - "csstype": "^3.0.2" - } - }, - "node_modules/@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" - }, - "node_modules/@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" - }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" - }, "node_modules/@esbuild/android-arm": { "version": "0.19.5", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", @@ -2041,52 +1202,18 @@ "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", - "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", - "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", - "dependencies": { - "@floating-ui/utils": "^0.1.3" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", - "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", - "dependencies": { - "@floating-ui/core": "^1.4.2", - "@floating-ui/utils": "^0.1.3" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz", - "integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==", - "dependencies": { - "@floating-ui/dom": "^1.5.1" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@floating-ui/utils": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", - "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + "node_modules/@eslint/js": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", + "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", @@ -2701,18 +1828,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -2758,251 +1873,6 @@ "node": "^14.13 || >=16.0" } }, - "node_modules/@mui/base": { - "version": "5.0.0-beta.23", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.23.tgz", - "integrity": "sha512-9L8SQUGAWtd/Qi7Qem26+oSSgpY7f2iQTuvcz/rsGpyZjSomMMO6lwYeQSA0CpWM7+aN7eGoSY/WV6wxJiIxXw==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@floating-ui/react-dom": "^2.0.2", - "@mui/types": "^7.2.8", - "@mui/utils": "^5.14.17", - "@popperjs/core": "^2.11.8", - "clsx": "^2.0.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.17", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.17.tgz", - "integrity": "sha512-eE0uxrpJAEL2ZXkeGLKg8HQDafsiXY+6eNpP4lcv3yIjFfGbU6Hj9/P7Adt8jpU+6JIhmxvILGj2r27pX+zdrQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - } - }, - "node_modules/@mui/icons-material": { - "version": "5.14.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.16.tgz", - "integrity": "sha512-wmOgslMEGvbHZjFLru8uH5E+pif/ciXAvKNw16q6joK6EWVWU5rDYWFknDaZhCvz8ZE/K8ZnJQ+lMG6GgHzXbg==", - "dependencies": { - "@babel/runtime": "^7.23.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@mui/material": "^5.0.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/material": { - "version": "5.14.17", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.17.tgz", - "integrity": "sha512-+y0VeOLWfEA4Z98We/UH6KCo8+f2HLZDK45FY+sJf8kSojLy3VntadKtC/u0itqnXXb1Pr4wKB2tSIBW02zY4Q==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/base": "5.0.0-beta.23", - "@mui/core-downloads-tracker": "^5.14.17", - "@mui/system": "^5.14.17", - "@mui/types": "^7.2.8", - "@mui/utils": "^5.14.17", - "@types/react-transition-group": "^4.4.8", - "clsx": "^2.0.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1", - "react-is": "^18.2.0", - "react-transition-group": "^4.4.5" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/private-theming": { - "version": "5.14.17", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.17.tgz", - "integrity": "sha512-u4zxsCm9xmQrlhVPug+Ccrtsjv7o2+rehvrgHoh0siSguvVgVQq5O3Hh10+tp/KWQo2JR4/nCEwquSXgITS1+g==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/utils": "^5.14.17", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/styled-engine": { - "version": "5.14.17", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.17.tgz", - "integrity": "sha512-AqpVjBEA7wnBvKPW168bNlqB6EN7HxTjLOY7oi275AzD/b1C7V0wqELy6NWoJb2yya5sRf7ENf4iNi3+T5cOgw==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@emotion/react": "^11.4.1", - "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - } - } - }, - "node_modules/@mui/system": { - "version": "5.14.17", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.17.tgz", - "integrity": "sha512-Ccz3XlbCqka6DnbHfpL3o3TfOeWQPR+ewvNAgm8gnS9M0yVMmzzmY6z0w/C1eebb+7ZP7IoLUj9vojg/GBaTPg==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/private-theming": "^5.14.17", - "@mui/styled-engine": "^5.14.17", - "@mui/types": "^7.2.8", - "@mui/utils": "^5.14.17", - "clsx": "^2.0.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/types": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.8.tgz", - "integrity": "sha512-9u0ji+xspl96WPqvrYJF/iO+1tQ1L5GTaDOeG3vCR893yy7VcWwRNiVMmPdPNpMDqx0WV1wtEW9OMwK9acWJzQ==", - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/utils": { - "version": "5.14.17", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.17.tgz", - "integrity": "sha512-yxnWgSS4J6DMFPw2Dof85yBkG02VTbEiqsikymMsnZnXDurtVGTIhlNuV24GTmFTuJMzEyTTU9UF+O7zaL8LEQ==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@types/prop-types": "^15.7.9", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@noble/hashes": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", @@ -3055,20 +1925,11 @@ "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", "dev": true }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, "node_modules/@puppeteer/browsers": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", - "devOptional": true, + "dev": true, "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -3098,7 +1959,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "devOptional": true, + "dev": true, "engines": { "node": ">=10" } @@ -3107,7 +1968,7 @@ "version": "17.7.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "devOptional": true, + "dev": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -3197,11 +2058,6 @@ "size-limit": "5.0.5" } }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" - }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -3276,14 +2132,6 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, "node_modules/@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", @@ -3370,21 +2218,19 @@ "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", "dev": true }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" - }, "node_modules/@types/node": { "version": "18.17.15", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==", - "devOptional": true + "dev": true }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/@types/prompt-sync": { "version": "4.2.3", @@ -3392,43 +2238,6 @@ "integrity": "sha512-Ox77gCSx0YyeakGt/qfOZUSFNSSi+sh3ABoGOiCwiO2KODx492BJnUm9oIXS+AHJtqp12iM4RduY6viTJ9bYwA==", "dev": true }, - "node_modules/@types/prop-types": { - "version": "15.7.10", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz", - "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==" - }, - "node_modules/@types/react": { - "version": "18.2.37", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz", - "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.15", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.15.tgz", - "integrity": "sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.9.tgz", - "integrity": "sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz", - "integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==" - }, "node_modules/@types/semver": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", @@ -3469,6 +2278,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, "optional": true, "dependencies": { "@types/node": "*" @@ -3989,7 +2799,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "devOptional": true, + "dev": true, "dependencies": { "debug": "4" }, @@ -4050,6 +2860,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -4128,6 +2939,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4200,17 +3012,6 @@ "node": ">=0.10.0" } }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/async-each": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", @@ -4236,11 +3037,6 @@ "node": ">= 4.5.0" } }, - "node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -4371,6 +3167,9 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "optional": true, + "peer": true, "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -4385,6 +3184,9 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "optional": true, + "peer": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -4438,7 +3240,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base": { "version": "0.11.2", @@ -4489,14 +3292,6 @@ } ] }, - "node_modules/basic-ftp": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", - "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -4546,7 +3341,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "devOptional": true, + "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -4557,7 +3352,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -4605,6 +3400,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4781,6 +3577,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, "engines": { "node": "*" } @@ -4884,6 +3681,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -4993,7 +3791,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "devOptional": true + "dev": true }, "node_modules/chrome-trace-event": { "version": "1.0.3", @@ -5008,7 +3806,7 @@ "version": "0.4.7", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", - "devOptional": true, + "dev": true, "dependencies": { "mitt": "3.0.0" }, @@ -5154,6 +3952,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -5167,6 +3966,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -5181,6 +3981,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -5191,12 +3992,14 @@ "node_modules/cliui/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5209,40 +4012,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", - "dependencies": { - "for-own": "^0.1.3", - "is-plain-object": "^2.0.1", - "kind-of": "^3.0.2", - "lazy-cache": "^1.0.3", - "shallow-clone": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", - "engines": { - "node": ">=6" - } - }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -5276,6 +4045,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -5283,7 +4053,8 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/colord": { "version": "2.9.3", @@ -5327,7 +4098,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", @@ -5443,7 +4215,7 @@ "version": "8.1.3", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", - "devOptional": true, + "dev": true, "dependencies": { "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -5461,13 +4233,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "devOptional": true + "dev": true }, "node_modules/cosmiconfig/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "devOptional": true, + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -5818,29 +4590,17 @@ "node": ">=8.0.0" } }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, "node_modules/cyclist": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", "dev": true }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", - "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", - "engines": { - "node": ">= 14" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -5891,6 +4651,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5917,24 +4678,11 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "engines": { - "node": ">= 14" + "node": ">=0.10.0" } }, "node_modules/des.js": { @@ -5960,7 +4708,7 @@ "version": "0.0.1107588", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", - "devOptional": true + "dev": true }, "node_modules/diff": { "version": "4.0.2", @@ -6021,15 +4769,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -6205,7 +4944,8 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/emojis-list": { "version": "3.0.0", @@ -6220,6 +4960,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "dependencies": { "once": "^1.4.0" } @@ -6312,6 +5053,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -6357,6 +5099,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -6370,6 +5113,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -6377,34 +5121,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint": { "version": "8.53.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", @@ -6472,27 +5188,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", - "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", - "dev": true, - "peerDependencies": { - "eslint": ">=7" - } - }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -6703,6 +5398,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -6766,6 +5462,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7043,6 +5740,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -7062,6 +5760,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -7078,11 +5777,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -7133,6 +5827,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, "dependencies": { "pend": "~1.2.0" } @@ -7303,11 +5998,6 @@ "semver": "bin/semver" } }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -7406,17 +6096,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", - "dependencies": { - "for-in": "^1.0.1" - }, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7495,20 +6175,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "devOptional": true - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } + "dev": true }, "node_modules/fs-write-stream-atomic": { "version": "1.0.10", @@ -7561,7 +6228,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -7580,7 +6248,8 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -7595,6 +6264,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -7635,20 +6305,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-uri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", - "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -7662,6 +6318,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7721,7 +6378,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -7748,6 +6406,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -7897,48 +6556,12 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -7949,7 +6572,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "devOptional": true, + "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -8017,6 +6640,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8032,6 +6656,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "engines": { "node": ">=4" } @@ -8074,6 +6699,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8088,11 +6714,6 @@ "resolved": "examples/integration-scripts", "link": true }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, "node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -8108,7 +6729,8 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -8125,12 +6747,14 @@ "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -8189,6 +6813,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -8236,6 +6861,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "dependencies": { "isobject": "^3.0.1" }, @@ -8283,6 +6909,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9678,7 +8305,8 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "3.14.1", @@ -9767,7 +8395,8 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -9799,14 +8428,6 @@ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -9853,14 +8474,6 @@ "webpack-sources": "^1.1.0" } }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -9908,7 +8521,8 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "node_modules/linkify-it": { "version": "3.0.3", @@ -10014,17 +8628,6 @@ "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", "dev": true }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -10258,30 +8861,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/merge-deep": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", - "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", - "dependencies": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge-deep/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -10374,6 +8953,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10414,7 +8994,8 @@ "node_modules/mitt": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true }, "node_modules/mixin-deep": { "version": "1.3.2", @@ -10429,34 +9010,6 @@ "node": ">=0.10.0" } }, - "node_modules/mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", - "dependencies": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-object/node_modules/for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-object/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -10472,7 +9025,8 @@ "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true }, "node_modules/move-concurrently": { "version": "1.0.1", @@ -10512,7 +9066,8 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/nan": { "version": "2.17.0", @@ -10573,18 +9128,11 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -10747,14 +9295,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -10904,6 +9444,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -11020,60 +9561,6 @@ "node": ">=6" } }, - "node_modules/pac-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-resolver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", - "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", - "dependencies": { - "degenerator": "^5.0.0", - "ip": "^1.1.8", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -11131,6 +9618,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -11155,6 +9643,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -11197,6 +9686,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -11213,12 +9703,14 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "engines": { "node": ">=8" } @@ -11241,7 +9733,8 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -11880,6 +10373,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -11917,93 +10411,30 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/proxy-agent": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", - "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.0", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">= 14" + "node": ">=6" } }, - "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" + "node": ">= 6" } }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true }, "node_modules/prr": { "version": "1.0.1", @@ -12035,6 +10466,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -12074,7 +10506,7 @@ "version": "19.11.1", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", - "devOptional": true, + "dev": true, "hasInstallScript": true, "dependencies": { "@puppeteer/browsers": "0.5.0", @@ -12089,7 +10521,7 @@ "version": "19.11.1", "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", - "devOptional": true, + "dev": true, "dependencies": { "@puppeteer/browsers": "0.5.0", "chromium-bidi": "0.4.7", @@ -12119,7 +10551,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "devOptional": true, + "dev": true, "dependencies": { "node-fetch": "2.6.7" } @@ -12128,7 +10560,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "devOptional": true, + "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -12144,183 +10576,6 @@ } } }, - "node_modules/puppeteer-extra": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/puppeteer-extra/-/puppeteer-extra-3.3.6.tgz", - "integrity": "sha512-rsLBE/6mMxAjlLd06LuGacrukP2bqbzKCLzV1vrhHFavqQE/taQ2UXv3H5P0Ls7nsrASa+6x3bDbXHpqMwq+7A==", - "dependencies": { - "@types/debug": "^4.1.0", - "debug": "^4.1.1", - "deepmerge": "^4.2.2" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "@types/puppeteer": "*", - "puppeteer": "*", - "puppeteer-core": "*" - }, - "peerDependenciesMeta": { - "@types/puppeteer": { - "optional": true - }, - "puppeteer": { - "optional": true - }, - "puppeteer-core": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin/-/puppeteer-extra-plugin-3.2.3.tgz", - "integrity": "sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==", - "dependencies": { - "@types/debug": "^4.1.0", - "debug": "^4.1.1", - "merge-deep": "^3.0.1" - }, - "engines": { - "node": ">=9.11.2" - }, - "peerDependencies": { - "playwright-extra": "*", - "puppeteer-extra": "*" - }, - "peerDependenciesMeta": { - "playwright-extra": { - "optional": true - }, - "puppeteer-extra": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin-stealth": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.11.2.tgz", - "integrity": "sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==", - "dependencies": { - "debug": "^4.1.1", - "puppeteer-extra-plugin": "^3.2.3", - "puppeteer-extra-plugin-user-preferences": "^2.4.1" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "playwright-extra": "*", - "puppeteer-extra": "*" - }, - "peerDependenciesMeta": { - "playwright-extra": { - "optional": true - }, - "puppeteer-extra": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin-user-data-dir": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.1.tgz", - "integrity": "sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==", - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^10.0.0", - "puppeteer-extra-plugin": "^3.2.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "playwright-extra": "*", - "puppeteer-extra": "*" - }, - "peerDependenciesMeta": { - "playwright-extra": { - "optional": true - }, - "puppeteer-extra": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/puppeteer-extra-plugin-user-preferences": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.1.tgz", - "integrity": "sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==", - "dependencies": { - "debug": "^4.1.1", - "deepmerge": "^4.2.2", - "puppeteer-extra-plugin": "^3.2.3", - "puppeteer-extra-plugin-user-data-dir": "^2.4.1" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "playwright-extra": "*", - "puppeteer-extra": "*" - }, - "peerDependenciesMeta": { - "playwright-extra": { - "optional": true - }, - "puppeteer-extra": { - "optional": true - } - } - }, "node_modules/pure-rand": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", @@ -12381,11 +10636,6 @@ } ] }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -12405,57 +10655,11 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, "node_modules/readable-stream": { "version": "3.6.2", @@ -12529,6 +10733,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -12546,6 +10751,7 @@ "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -12635,22 +10841,6 @@ "inherits": "^2.0.1" } }, - "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -12716,14 +10906,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -12847,47 +11029,6 @@ "sha.js": "bin.js" } }, - "node_modules/shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", - "dependencies": { - "is-extendable": "^0.1.1", - "kind-of": "^2.0.1", - "lazy-cache": "^0.2.3", - "mixin-object": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", - "dependencies": { - "is-buffer": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone/node_modules/lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -12941,10 +11082,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/signify-react-ts": { - "resolved": "examples/signify-react-ts", - "link": true - }, "node_modules/signify-ts": { "resolved": "", "link": true @@ -13005,15 +11142,6 @@ "node": ">=8" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -13225,48 +11353,6 @@ "urix": "^0.1.0" } }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "socks": "^2.7.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -13277,7 +11363,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -13570,15 +11656,6 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, - "node_modules/streamx": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.4.tgz", - "integrity": "sha512-uSXKl88bibiUCQ1eMpItRljCzDENcDx18rsfDmV79r0e/ThfrAwxG4Y2FarQZ2G4/21xcOKmFFd1Hue+ZIDwHw==", - "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -13604,6 +11681,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13617,6 +11695,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13695,11 +11774,6 @@ "postcss": "^8.2.15" } }, - "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13716,6 +11790,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -13766,7 +11841,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "devOptional": true, + "dev": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -13778,7 +11853,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "devOptional": true, + "dev": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -13873,7 +11948,8 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/through2": { "version": "2.0.5", @@ -13954,6 +12030,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, "engines": { "node": ">=4" } @@ -14021,7 +12098,8 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, "node_modules/ts-api-utils": { "version": "1.0.3", @@ -14180,7 +12258,8 @@ "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, "node_modules/tty-browserify": { "version": "0.0.0", @@ -14284,7 +12363,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "devOptional": true, + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14303,6 +12382,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -14312,6 +12392,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -14379,14 +12460,6 @@ "imurmurhash": "^0.1.4" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -14930,7 +13003,8 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true }, "node_modules/webpack": { "version": "4.47.0", @@ -15278,6 +13352,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -15310,7 +13385,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -15329,6 +13405,7 @@ "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, "engines": { "node": ">=10.0.0" }, @@ -15376,6 +13453,7 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, "engines": { "node": ">= 6" } @@ -15402,6 +13480,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "engines": { "node": ">=12" } @@ -15419,6 +13498,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" From d977137c1935007b6230cd6f934533179607e5a3 Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 7 Dec 2023 11:09:28 +0100 Subject: [PATCH 136/186] use waitOperation utility function in multisig test --- examples/integration-scripts/multisig.test.ts | 158 +++++++++--------- 1 file changed, 75 insertions(+), 83 deletions(-) diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index 857dc57f..60f49539 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -5,6 +5,7 @@ import signify, { IssueCredentialResult, } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; +import { waitOperation } from './utils/test-util'; const { url, bootUrl, vleiServerUrl } = resolveEnvironment(); const WITNESS_AIDS = [ @@ -44,44 +45,44 @@ test('multisig', async function run() { ]); let op1 = await client1.oobis().resolve(oobi2.oobis[0], 'member2'); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); op1 = await client1.oobis().resolve(oobi3.oobis[0], 'member3'); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); op1 = await client1.oobis().resolve(SCHEMA_OOBI, 'schema'); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); op1 = await client1.oobis().resolve(oobi4.oobis[0], 'holder'); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); console.log('Member1 resolved 4 OOBIs'); let op2 = await client2.oobis().resolve(oobi1.oobis[0], 'member1'); - op2 = await waitForOp(client2, op2); + op2 = await waitOperation(client2, op2); op2 = await client2.oobis().resolve(oobi3.oobis[0], 'member3'); - op2 = await waitForOp(client2, op2); + op2 = await waitOperation(client2, op2); op2 = await client2.oobis().resolve(SCHEMA_OOBI, 'schema'); - op2 = await waitForOp(client2, op2); + op2 = await waitOperation(client2, op2); op2 = await client2.oobis().resolve(oobi4.oobis[0], 'holder'); - op2 = await waitForOp(client2, op2); + op2 = await waitOperation(client2, op2); console.log('Member2 resolved 4 OOBIs'); let op3 = await client3.oobis().resolve(oobi1.oobis[0], 'member1'); - op3 = await waitForOp(client3, op3); + op3 = await waitOperation(client3, op3); op3 = await client3.oobis().resolve(oobi2.oobis[0], 'member2'); - op3 = await waitForOp(client3, op3); + op3 = await waitOperation(client3, op3); op3 = await client3.oobis().resolve(SCHEMA_OOBI, 'schema'); - op3 = await waitForOp(client3, op3); + op3 = await waitOperation(client3, op3); op3 = await client3.oobis().resolve(oobi4.oobis[0], 'holder'); - op3 = await waitForOp(client3, op3); + op3 = await waitOperation(client3, op3); console.log('Member3 resolved 4 OOBIs'); let op4 = await client4.oobis().resolve(oobi1.oobis[0], 'member1'); - op4 = await waitForOp(client4, op4); + op4 = await waitOperation(client4, op4); op4 = await client4.oobis().resolve(oobi2.oobis[0], 'member2'); - op4 = await waitForOp(client4, op4); + op4 = await waitOperation(client4, op4); op4 = await client4.oobis().resolve(oobi3.oobis[0], 'member3'); - op4 = await waitForOp(client4, op4); + op4 = await waitOperation(client4, op4); op4 = await client4.oobis().resolve(SCHEMA_OOBI, 'schema'); - op4 = await waitForOp(client4, op4); + op4 = await waitOperation(client4, op4); console.log('Holder resolved 4 OOBIs'); @@ -98,7 +99,7 @@ test('multisig', async function run() { console.log('Member3 responded challenge with signed words'); op1 = await client1.challenges().verify('member1', aid2.prefix, words); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); console.log('Member1 verified challenge response from member2'); let exnwords = new Serder(op1.response.exn); op1 = await client1 @@ -107,7 +108,7 @@ test('multisig', async function run() { console.log('Member1 marked challenge response as accepted'); op1 = await client1.challenges().verify('member1', aid3.prefix, words); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); console.log('Member1 verified challenge response from member3'); exnwords = new Serder(op1.response.exn); op1 = await client1 @@ -132,7 +133,7 @@ test('multisig', async function run() { let serder = icpResult1.serder; let sigs = icpResult1.sigs; - let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + let sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); let ims = signify.d(signify.messagize(serder, sigers)); let atc = ims.substring(serder.size); @@ -178,7 +179,7 @@ test('multisig', async function run() { op2 = await icpResult2.op(); serder = icpResult2.serder; sigs = icpResult2.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(serder, sigers)); atc = ims.substring(serder.size); @@ -222,7 +223,7 @@ test('multisig', async function run() { op3 = await icpResult3.op(); serder = icpResult3.serder; sigs = icpResult3.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(serder, sigers)); atc = ims.substring(serder.size); @@ -247,9 +248,9 @@ test('multisig', async function run() { console.log('Member3 joined, multisig waiting for others...'); // Check for completion - op1 = await waitForOp(client1, op1); - op2 = await waitForOp(client2, op2); - op3 = await waitForOp(client3, op3); + op1 = await waitOperation(client1, op1); + op2 = await waitOperation(client2, op2); + op3 = await waitOperation(client3, op3); console.log('Multisig created!'); const identifiers1 = await client1.identifiers().list(); assert.equal(identifiers1.aids.length, 2); @@ -319,12 +320,12 @@ test('multisig', async function run() { 'SealEvent', { i: hab['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, ]; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); let roleims = signify.d( signify.messagize(rpy, sigers, seal, undefined, undefined, false) ); atc = roleims.substring(rpy.size); - let roleembeds: any = { + let roleembeds = { rpy: [rpy, atc], }; recp = [aid2['state'], aid3['state']].map((state) => state['i']); @@ -367,7 +368,7 @@ test('multisig', async function run() { 'SealEvent', { i: hab['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, ]; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); roleims = signify.d( signify.messagize(rpy, sigers, seal, undefined, undefined, false) ); @@ -414,7 +415,7 @@ test('multisig', async function run() { 'SealEvent', { i: hab['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, ]; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); roleims = signify.d( signify.messagize(rpy, sigers, seal, undefined, undefined, false) ); @@ -439,15 +440,15 @@ test('multisig', async function run() { ); // Check for completion - op1 = await waitForOp(client1, op1); - op2 = await waitForOp(client2, op2); - op3 = await waitForOp(client3, op3); + op1 = await waitOperation(client1, op1); + op2 = await waitOperation(client2, op2); + op3 = await waitOperation(client3, op3); console.log(`End role authorization for agent ${eid1}completed!`); // Holder resolve multisig OOBI const oobimultisig = await client1.oobis().get('multisig', 'agent'); op4 = await client4.oobis().resolve(oobimultisig.oobis[0], 'multisig'); - op4 = await waitForOp(client4, op4); + op4 = await waitOperation(client4, op4); console.log(`Holder resolved multisig OOBI`); // MultiSig Interaction @@ -462,7 +463,7 @@ test('multisig', async function run() { op1 = await eventResponse1.op(); serder = eventResponse1.serder; sigs = eventResponse1.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(serder, sigers)); atc = ims.substring(serder.size); @@ -502,7 +503,7 @@ test('multisig', async function run() { op2 = await icpResult2.op(); serder = icpResult2.serder; sigs = icpResult2.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(serder, sigers)); atc = ims.substring(serder.size); @@ -540,7 +541,7 @@ test('multisig', async function run() { op3 = await icpResult3.op(); serder = icpResult3.serder; sigs = icpResult3.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(serder, sigers)); atc = ims.substring(serder.size); @@ -565,55 +566,55 @@ test('multisig', async function run() { console.log('Member3 joins interaction event, waiting for others...'); // Check for completion - op1 = await waitForOp(client1, op1); - op2 = await waitForOp(client2, op2); - op3 = await waitForOp(client3, op3); + op1 = await waitOperation(client1, op1); + op2 = await waitOperation(client2, op2); + op3 = await waitOperation(client3, op3); console.log('Multisig interaction completed!'); // Members agree out of band to rotate keys console.log('Members agree out of band to rotate keys'); icpResult1 = await client1.identifiers().rotate('member1'); op1 = await icpResult1.op(); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); aid1 = await client1.identifiers().get('member1'); console.log('Member1 rotated keys'); icpResult2 = await client2.identifiers().rotate('member2'); op2 = await icpResult2.op(); - op2 = await waitForOp(client2, op2); + op2 = await waitOperation(client2, op2); aid2 = await client2.identifiers().get('member2'); console.log('Member2 rotated keys'); icpResult3 = await client3.identifiers().rotate('member3'); op3 = await icpResult3.op(); - op3 = await waitForOp(client3, op3); + op3 = await waitOperation(client3, op3); aid3 = await client3.identifiers().get('member3'); console.log('Member3 rotated keys'); // Update new key states op1 = await client1.keyStates().query(aid2.prefix, 1); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); const aid2State = op1['response']; op1 = await client1.keyStates().query(aid3.prefix, 1); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); const aid3State = op1['response']; op2 = await client2.keyStates().query(aid3.prefix, 1); - op2 = await waitForOp(client2, op2); + op2 = await waitOperation(client2, op2); op2 = await client2.keyStates().query(aid1.prefix, 1); - op2 = await waitForOp(client2, op2); + op2 = await waitOperation(client2, op2); const aid1State = op2['response']; op3 = await client3.keyStates().query(aid1.prefix, 1); - op3 = await waitForOp(client3, op3); + op3 = await waitOperation(client3, op3); op3 = await client3.keyStates().query(aid2.prefix, 1); - op3 = await waitForOp(client3, op3); + op3 = await waitOperation(client3, op3); op4 = await client4.keyStates().query(aid1.prefix, 1); - op4 = await waitForOp(client4, op4); + op4 = await waitOperation(client4, op4); op4 = await client4.keyStates().query(aid2.prefix, 1); - op4 = await waitForOp(client4, op4); + op4 = await waitOperation(client4, op4); op4 = await client4.keyStates().query(aid3.prefix, 1); - op4 = await waitForOp(client4, op4); + op4 = await waitOperation(client4, op4); rstates = [aid1State, aid2State, aid3State]; states = rstates; @@ -627,7 +628,7 @@ test('multisig', async function run() { op1 = await eventResponse1.op(); serder = eventResponse1.serder; sigs = eventResponse1.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(serder, sigers)); atc = ims.substring(serder.size); @@ -667,7 +668,7 @@ test('multisig', async function run() { op2 = await icpResult2.op(); serder = icpResult2.serder; sigs = icpResult2.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(serder, sigers)); atc = ims.substring(serder.size); @@ -703,7 +704,7 @@ test('multisig', async function run() { op3 = await icpResult3.op(); serder = icpResult3.serder; sigs = icpResult3.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(serder, sigers)); atc = ims.substring(serder.size); @@ -728,9 +729,9 @@ test('multisig', async function run() { console.log('Member3 joins rotation event, waiting for others...'); // Check for completion - op1 = await waitForOp(client1, op1); - op2 = await waitForOp(client2, op2); - op3 = await waitForOp(client3, op3); + op1 = await waitOperation(client1, op1); + op2 = await waitOperation(client2, op2); + op3 = await waitOperation(client3, op3); console.log('Multisig rotation completed!'); hab = await client1.identifiers().get('multisig'); @@ -754,7 +755,7 @@ test('multisig', async function run() { let anc = vcpRes1.serder; sigs = vcpRes1.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(anc, sigers)); atc = ims.substring(anc.size); @@ -797,7 +798,7 @@ test('multisig', async function run() { anc = vcpRes2.serder; sigs = vcpRes2.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(anc, sigers)); atc = ims.substring(anc.size); @@ -840,7 +841,7 @@ test('multisig', async function run() { anc = vcpRes3.serder; sigs = vcpRes3.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(anc, sigers)); atc = ims.substring(anc.size); @@ -863,9 +864,9 @@ test('multisig', async function run() { ); // Done - op1 = await waitForOp(client1, op1); - op2 = await waitForOp(client2, op2); - op3 = await waitForOp(client3, op3); + op1 = await waitOperation(client1, op1); + op2 = await waitOperation(client2, op2); + op3 = await waitOperation(client3, op3); console.log('Multisig create registry completed!'); //Create Credential @@ -935,22 +936,22 @@ test('multisig', async function run() { console.log('Member3 joins credential create event, waiting for others...'); // Check completion - op1 = await waitForOp(client1, op1); - op2 = await waitForOp(client2, op2); - op3 = await waitForOp(client3, op3); + op1 = await waitOperation(client1, op1); + op2 = await waitOperation(client2, op2); + op3 = await waitOperation(client3, op3); console.log('Multisig create credential completed!'); const m = await client1.identifiers().get('multisig'); // Update states op1 = await client1.keyStates().query(m.prefix, 4); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); op2 = await client2.keyStates().query(m.prefix, 4); - op2 = await waitForOp(client2, op2); + op2 = await waitOperation(client2, op2); op3 = await client3.keyStates().query(m.prefix, 4); - op3 = await waitForOp(client3, op3); + op3 = await waitOperation(client3, op3); op4 = await client4.keyStates().query(m.prefix, 4); - op4 = await waitForOp(client4, op4); + op4 = await waitOperation(client4, op4); // IPEX grant message console.log('Starting grant message'); @@ -974,12 +975,12 @@ test('multisig', async function run() { 'SealEvent', { i: m['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, ]; - sigers = gsigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = gsigs.map((sig) => new signify.Siger({ qb64: sig })); let gims = signify.d(signify.messagize(grant, sigers, seal)); atc = gims.substring(grant.size); atc += end; - let gembeds: any = { + let gembeds = { exn: [grant, atc], }; recp = [aid2['state'], aid3['state']].map((state) => state['i']); @@ -1019,7 +1020,7 @@ test('multisig', async function run() { holder, ]); - sigers = gsigs2.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = gsigs2.map((sig) => new signify.Siger({ qb64: sig })); gims = signify.d(signify.messagize(grant2, sigers, seal)); atc = gims.substring(grant2.size); @@ -1063,7 +1064,7 @@ test('multisig', async function run() { holder, ]); - sigers = gsigs3.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = gsigs3.map((sig) => new signify.Siger({ qb64: sig })); gims = signify.d(signify.messagize(grant3, sigers, seal)); atc = gims.substring(grant3.size); @@ -1107,14 +1108,6 @@ test('multisig', async function run() { console.log(`Holder holds ${creds.length} credential`); }, 360000); -async function waitForOp(client: SignifyClient, op: any) { - while (!op['done']) { - op = await client.operations().get(op.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - return op; -} - async function waitForMessage(client: SignifyClient, route: string) { let msgSaid = ''; while (msgSaid == '') { @@ -1151,8 +1144,7 @@ async function createAID(client: SignifyClient, name: string, wits: string[]) { toad: wits.length, wits: wits, }); - let op = await icpResult1.op(); - op = await waitForOp(client, op); + await waitOperation(client, await icpResult1.op()); const aid = await client.identifiers().get(name); await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); console.log(name, 'AID:', aid.prefix); From cedbd38959699c730bc8f541a228e11255de91c9 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Thu, 7 Dec 2023 10:28:33 -0800 Subject: [PATCH 137/186] Moving these scripts to new repo at WebOfTrust/signify-integration --- examples/scripts/client.ts | 127 -------- examples/scripts/create_agent.py | 47 --- examples/scripts/create_multisig_aid.py | 79 ----- examples/scripts/create_person_aid.py | 81 ------ examples/scripts/create_rpys.py | 61 ---- examples/scripts/data/delegator.json | 13 - examples/scripts/data/gleif-sample.json | 13 - examples/scripts/data/multisig-triple.json | 17 -- examples/scripts/delegator.sh | 7 - examples/scripts/env.sh | 5 - examples/scripts/get.py | 27 -- .../keri/cf/demo-witness-oobis-schema.json | 17 -- examples/scripts/list_aids.py | 27 -- examples/scripts/list_notifications.py | 85 ------ examples/scripts/list_notifications.ts | 112 -------- examples/scripts/make_endroles.ts | 58 ---- .../scripts/multisig-create-credential.sh | 3 - .../scripts/multisig-create-credential.ts | 271 ------------------ examples/scripts/multisig-kli.sh | 25 -- examples/scripts/multisig-sigpy.sh | 10 - examples/scripts/multisig-sigts.sh | 8 - examples/scripts/multisig_endrole.py | 93 ------ examples/scripts/package.json | 11 - examples/scripts/stream_escrows.py | 35 --- examples/scripts/tsconfig.json | 9 - 25 files changed, 1241 deletions(-) delete mode 100644 examples/scripts/client.ts delete mode 100644 examples/scripts/create_agent.py delete mode 100644 examples/scripts/create_multisig_aid.py delete mode 100644 examples/scripts/create_person_aid.py delete mode 100644 examples/scripts/create_rpys.py delete mode 100644 examples/scripts/data/delegator.json delete mode 100644 examples/scripts/data/gleif-sample.json delete mode 100644 examples/scripts/data/multisig-triple.json delete mode 100755 examples/scripts/delegator.sh delete mode 100644 examples/scripts/env.sh delete mode 100644 examples/scripts/get.py delete mode 100755 examples/scripts/keri/cf/demo-witness-oobis-schema.json delete mode 100644 examples/scripts/list_aids.py delete mode 100644 examples/scripts/list_notifications.py delete mode 100644 examples/scripts/list_notifications.ts delete mode 100644 examples/scripts/make_endroles.ts delete mode 100755 examples/scripts/multisig-create-credential.sh delete mode 100644 examples/scripts/multisig-create-credential.ts delete mode 100755 examples/scripts/multisig-kli.sh delete mode 100755 examples/scripts/multisig-sigpy.sh delete mode 100755 examples/scripts/multisig-sigts.sh delete mode 100644 examples/scripts/multisig_endrole.py delete mode 100644 examples/scripts/package.json delete mode 100644 examples/scripts/stream_escrows.py delete mode 100644 examples/scripts/tsconfig.json diff --git a/examples/scripts/client.ts b/examples/scripts/client.ts deleted file mode 100644 index 11e8d4c3..00000000 --- a/examples/scripts/client.ts +++ /dev/null @@ -1,127 +0,0 @@ -import signify from 'signify-ts'; - -await connect(); - -async function connect() { - const url = 'http://127.0.0.1:3901'; - const bran = '0123456789abcdefghijk'; - - await signify.ready(); - const client = new signify.SignifyClient(url, bran); - console.log(client.controller.pre); - const [evt, sign] = client.controller?.event ?? []; - const data = { - icp: evt.ked, - sig: sign.qb64, - stem: client.controller?.stem, - pidx: 1, - tier: client.controller?.tier, - }; - - await fetch('http://127.0.0.1:3903/boot', { - method: 'POST', - body: JSON.stringify(data), - headers: { - 'Content-Type': 'application/json', - }, - }); - - await client.connect(); - const d = await client.state(); - console.log('Connected: '); - console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - - const identifiers = client.identifiers(); - const oobis = client.oobis(); - const operations = client.operations(); - const exchanges = client.exchanges(); - - const salt = 'abcdefghijk0123456789'; - const res = await identifiers.create('multisig-ts', { bran: salt }); - let op = await res.op(); - let aid = op['response']; - - await identifiers.addEndRole('multisig-ts', 'agent', d.agent.i); - - console.log('Created AID: ', aid); - - console.log('Resolving delegator...'); - op = await oobis.resolve( - 'http://127.0.0.1:5642/oobi/EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv' + - '_VmF_dJNN6vkf2Ha', - 'delegator' - ); - while (!op['done']) { - op = await operations.get(op['name']); - await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second - } - console.log('done.'); - // let delegator = op['response'] - - console.log('Resolving multisig-kli...'); - op = await oobis.resolve( - 'http://127.0.0.1:5642/oobi/EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ', - 'multisig-kli' - ); - while (!op['done']) { - op = await operations.get(op['name']); - await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second - } - console.log('done.'); - const kli = op['response']; - - console.log('Resolving multisig-sigpy...'); - op = await oobis.resolve( - 'http://127.0.0.1:3902/oobi/EBcIURLpxmVwahksgrsGW6_dUw0zBhyEHYFk17eWrZfk/agent/EERMVxqeHfFo_eIvyzBXaKdT1EyobZdSs1QXuFyYLjmz', - 'multisig-sigpy' - ); - while (!op['done']) { - op = await operations.get(op['name']); - await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second - } - console.log('done.'); - const sigPy = op['response']; - - aid = await identifiers.get('multisig-ts'); - const sigTs = aid['state']; - - const states = [sigPy, kli, sigTs]; - const ires = await identifiers.create('multisig', { - algo: signify.Algos.group, - mhab: aid, - delpre: 'EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7', - toad: 2, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], - isith: ['1/3', '1/3', '1/3'], - nsith: ['1/3', '1/3', '1/3'], - states: states, - rstates: states, - }); - - const serder = ires.serder; - const sigs = ires.sigs; - const sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - - const ims = signify.d(signify.messagize(serder, sigers)); - const atc = ims.substring(serder.size); - const embeds = { - icp: [serder, atc], - }; - - const smids = states.map((state) => state['i']); - const recp = [sigPy, kli].map((state) => state['i']); - - await exchanges.send( - 'multisig-ts', - 'multisig', - aid, - '/multisig/icp', - { gid: serder.pre, smids: smids, rmids: smids }, - embeds, - recp - ); -} diff --git a/examples/scripts/create_agent.py b/examples/scripts/create_agent.py deleted file mode 100644 index 3994a7da..00000000 --- a/examples/scripts/create_agent.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -SIGNIFY -signify.app.clienting module - -Testing clienting with integration tests that require a running KERIA Cloud Agent -""" - -import pytest -import requests -from keri import kering -from keri.core.coring import Tiers - -from signify.app.clienting import SignifyClient - - -def create_agent(): - url = "http://localhost:3901" - bran = b'9876543210abcdefghijk' - tier = Tiers.low - client = SignifyClient(passcode=bran, tier=tier) - print(client.controller) - assert client.controller == "EP5JMOzNfDL8WbpRiyLxrsVg7GF-HcjIOsceqeluauxj" - - evt, siger = client.ctrl.event() - - res = requests.post(url="http://localhost:3903/boot", - json=dict( - icp=evt.ked, - sig=siger.qb64, - stem=client.ctrl.stem, - pidx=1, - tier=client.ctrl.tier)) - - if res.status_code != requests.codes.accepted: - raise kering.AuthNError(f"unable to initialize cloud agent connection, {res.status_code}, {res.text}") - - client.connect(url=url, ) - assert client.agent is not None - print(client.agent.pre) - assert client.agent.pre == "EERMVxqeHfFo_eIvyzBXaKdT1EyobZdSs1QXuFyYLjmz" - assert client.agent.delpre == "EP5JMOzNfDL8WbpRiyLxrsVg7GF-HcjIOsceqeluauxj" - print("Person agent created") - - -if __name__ == "__main__": - create_agent() diff --git a/examples/scripts/create_multisig_aid.py b/examples/scripts/create_multisig_aid.py deleted file mode 100644 index c3b1e0db..00000000 --- a/examples/scripts/create_multisig_aid.py +++ /dev/null @@ -1,79 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -SIGNIFY -signify.app.clienting module - -Testing clienting with integration tests that require a running KERIA Cloud Agent -""" -import json -from time import sleep - -from keri.app.keeping import Algos -from keri.core import eventing, coring -from keri.core.coring import Tiers -from keri.peer import exchanging -from signify.app.clienting import SignifyClient - - -def create_multisig_aid(): - url = "http://localhost:3901" - bran = b'9876543210abcdefghijk' - tier = Tiers.low - - client = SignifyClient(passcode=bran, tier=tier, url=url) - - identifiers = client.identifiers() - operations = client.operations() - states = client.keyStates() - exchanges = client.exchanges() - - aid = identifiers.get("multisig-sigpy") - sigPy = aid["state"] - - kli = states.get("EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ") - sigTs = states.get("ELViLL4JCh-oktYca-pmPLwkmUaeYjyPmCLxELAKZW8V") - - assert len(kli) == 1 - assert len(sigTs) == 1 - - states = rstates = [sigPy, kli[0], sigTs[0]] - for state in states: - print(json.dumps(state, indent=2)) - - icp, isigs, op = identifiers.create("multisig", algo=Algos.group, mhab=aid, - delpre="EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7", - toad=2, - wits=[ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" - ], - isith=["1/3", "1/3", "1/3"], nsith=["1/3", "1/3", "1/3"], - states=states, - rstates=rstates) - - smids = ["EBcIURLpxmVwahksgrsGW6_dUw0zBhyEHYFk17eWrZfk", - "EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ", - "ELViLL4JCh-oktYca-pmPLwkmUaeYjyPmCLxELAKZW8V"] - recp = ["EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ", - "ELViLL4JCh-oktYca-pmPLwkmUaeYjyPmCLxELAKZW8V"] - - embeds = dict( - icp=eventing.messagize(serder=icp, sigers=[coring.Siger(qb64=sig) for sig in isigs]) - ) - - exchanges.send("multisig-sigpy", "multisig", sender=aid, route="/multisig/icp", - payload=dict(gid=icp.pre, smids=smids, rmids=smids), - embeds=embeds, recipients=recp) - - print("waiting on multisig creation...") - while not op["done"]: - op = operations.get(op["name"]) - sleep(1) - gAid = op["response"] - print(f"group multisig created:") - print(json.dumps(gAid, indent=2)) - - -if __name__ == "__main__": - create_multisig_aid() diff --git a/examples/scripts/create_person_aid.py b/examples/scripts/create_person_aid.py deleted file mode 100644 index 3ee70636..00000000 --- a/examples/scripts/create_person_aid.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -SIGNIFY -signify.app.clienting module - -Testing clienting with integration tests that require a running KERIA Cloud Agent -""" -from time import sleep - -from keri.core import coring -from keri.core.coring import Tiers - -from signify.app.clienting import SignifyClient - - -def create_aid(): - url = "http://localhost:3901" - bran = b'9876543210abcdefghijk' - tier = Tiers.low - - client = SignifyClient(passcode=bran, tier=tier, url=url) - - identifiers = client.identifiers() - operations = client.operations() - oobis = client.oobis() - - res = identifiers.list() - assert res["aids"] == [] - - wits = [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" - ] - - _, _, op = identifiers.create("multisig-sigpy", bran="0123456789abcdefghijk", wits=wits, toad="2") - - while not op["done"]: - op = operations.get(op["name"]) - sleep(1) - - icp = coring.Serder(ked=op["response"]) - assert icp.pre == "EBcIURLpxmVwahksgrsGW6_dUw0zBhyEHYFk17eWrZfk" - print(f"Person AID {icp.pre} created") - - identifiers.addEndRole("multisig-sigpy", eid=client.agent.pre) - - print("multisig-sigpy resolving delegator...") - op = oobis.resolve( - oobi="http://127.0.0.1:5642/oobi/EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7/witness/BBilc4-L3tFUnfM_wJr4S4OJ" - "anAv_VmF_dJNN6vkf2Ha", - alias="delegator") - while not op["done"]: - op = operations.get(op["name"]) - sleep(1) - print("... done") - - print("multisig-sigpy resolving multisig-kli...") - op = oobis.resolve( - oobi="http://127.0.0.1:5642/oobi/EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ", - alias="multisig-kli") - while not op["done"]: - op = operations.get(op["name"]) - sleep(1) - print("... done") - - input(f"\nPress any key after multisig-sigts is created? ") - - print("multisig-sigpy resolving multisig-sigts...") - op = oobis.resolve( - oobi="http://127.0.0.1:3902/oobi/ELViLL4JCh-oktYca-pmPLwkmUaeYjyPmCLxELAKZW8V/agent/EEXekkGu9IAzav6pZVJhkLnjt" - "jM5v3AcyA-pdKUcaGei", - alias="multisig-sigts") - while not op["done"]: - op = operations.get(op["name"]) - sleep(1) - print("... done") - - -if __name__ == "__main__": - create_aid() diff --git a/examples/scripts/create_rpys.py b/examples/scripts/create_rpys.py deleted file mode 100644 index 4760509d..00000000 --- a/examples/scripts/create_rpys.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -SIGNIFY -signify.app.clienting module - -Testing clienting with integration tests that require a running KERIA Cloud Agent -""" -import json -from time import sleep - -from keri.app.keeping import Algos -from keri.core.coring import Tiers -from signify.app.clienting import SignifyClient - - -def create_multisig_aid(): - url = "http://localhost:3901" - bran = b'9876543210abcdefghijk' - tier = Tiers.low - - client = SignifyClient(passcode=bran, tier=tier, url=url) - - identifiers = client.identifiers() - operations = client.operations() - states = client.keyStates() - - aid = identifiers.get("multisig-sigpy") - sigPy = aid["state"] - - kli = states.get("EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ") - sigTs = states.get("ELViLL4JCh-oktYca-pmPLwkmUaeYjyPmCLxELAKZW8V") - - assert len(kli) == 1 - assert len(sigTs) == 1 - - states = rstates = [sigPy, kli[0], sigTs[0]] - for state in states: - print(json.dumps(state, indent=2)) - - op = identifiers.create("multisig", algo=Algos.group, mhab=aid, - delpre="EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7", - toad=2, - wits=[ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" - ], - isith=["1/3", "1/3", "1/3"], nsith=["1/3", "1/3", "1/3"], - states=states, - rstates=rstates) - print("waiting on multisig creation...") - while not op["done"]: - op = operations.get(op["name"]) - sleep(1) - gAid = op["response"] - print(f"group multisig created:") - print(json.dumps(gAid, indent=2)) - - -if __name__ == "__main__": - create_multisig_aid() diff --git a/examples/scripts/data/delegator.json b/examples/scripts/data/delegator.json deleted file mode 100644 index ad888229..00000000 --- a/examples/scripts/data/delegator.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "transferable": true, - "wits": [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" - ], - "toad": 2, - "icount": 1, - "ncount": 1, - "isith": "1", - "nsith": "1" -} diff --git a/examples/scripts/data/gleif-sample.json b/examples/scripts/data/gleif-sample.json deleted file mode 100644 index 850aca03..00000000 --- a/examples/scripts/data/gleif-sample.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "transferable": true, - "wits": [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" - ], - "toad": 3, - "icount": 1, - "ncount": 1, - "isith": "1", - "nsith": "1" -} diff --git a/examples/scripts/data/multisig-triple.json b/examples/scripts/data/multisig-triple.json deleted file mode 100644 index 893c6078..00000000 --- a/examples/scripts/data/multisig-triple.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "delpre": "EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7", - "aids": [ - "EBcIURLpxmVwahksgrsGW6_dUw0zBhyEHYFk17eWrZfk", - "EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ", - "ELViLL4JCh-oktYca-pmPLwkmUaeYjyPmCLxELAKZW8V" - ], - "transferable": true, - "wits": [ - "BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha", - "BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM", - "BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX" - ], - "toad": 2, - "isith": ["1/3", "1/3", "1/3"], - "nsith": ["1/3", "1/3", "1/3"] -} diff --git a/examples/scripts/delegator.sh b/examples/scripts/delegator.sh deleted file mode 100755 index 451e1c8b..00000000 --- a/examples/scripts/delegator.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -kli init --name delegator --nopasscode --config-dir ${KERI_SCRIPT_DIR} --config-file demo-witness-oobis-schema --salt 0ACDEyMzQ1Njc4OWdoaWpsaw -kli incept --name delegator --alias delegator --file ${KERI_DEMO_SCRIPT_DIR}/data/delegator.json - -echo "Waiting for delegation request..." -kli delegate confirm --name delegator --alias delegator \ No newline at end of file diff --git a/examples/scripts/env.sh b/examples/scripts/env.sh deleted file mode 100644 index 70b867d6..00000000 --- a/examples/scripts/env.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -demo=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -export KERI_DEMO_SCRIPT_DIR="${demo}" -export KERI_SCRIPT_DIR="${demo}" \ No newline at end of file diff --git a/examples/scripts/get.py b/examples/scripts/get.py deleted file mode 100644 index 17e03e55..00000000 --- a/examples/scripts/get.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -SIGNIFY -signify.app.clienting module - -Testing clienting with integration tests that require a running KERIA Cloud Agent -""" -from pprint import pprint - -from keri.core.coring import Tiers -from signify.app.clienting import SignifyClient - - -def get(): - url = "http://localhost:3901" - bran = b'9876543210abcdefghijk' - tier = Tiers.low - - client = SignifyClient(passcode=bran, tier=tier, url=url) - - identifiers = client.identifiers() - - aid = identifiers.get("multisig") - pprint(aid) - -if __name__ == "__main__": - get() diff --git a/examples/scripts/keri/cf/demo-witness-oobis-schema.json b/examples/scripts/keri/cf/demo-witness-oobis-schema.json deleted file mode 100755 index 413d779a..00000000 --- a/examples/scripts/keri/cf/demo-witness-oobis-schema.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "dt": "2022-01-20T12:57:59.823350+00:00", - "iurls": [ - "http://127.0.0.1:5642/oobi/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha/controller", - "http://127.0.0.1:5644/oobi/BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX/controller", - "http://127.0.0.1:5643/oobi/BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM/controller" - ], - "durls": [ - "http://127.0.0.1:7723/oobi/EBNaNu-M9P5cgrnfl2Fvymy4E_jvxxyjb70PRtiANlJy", - "http://127.0.0.1:7723/oobi/EMhvwOlyEJ9kN4PrwCpr9Jsv7TxPhiYveZ0oP3lJzdEi", - "http://127.0.0.1:7723/oobi/EKA57bKBKxr_kN7iN5i7lMUxpMG-s19dRcmov1iDxz-E", - "http://127.0.0.1:7723/oobi/EEy9PkikFcANV1l7EHukCeXqrzT1hNZjGlUk7wuMO5jw", - "http://127.0.0.1:7723/oobi/ENPXp1vQzRF6JwIuS-mp2U8Uf1MoADoP_GqQ62VsDZWY", - "http://127.0.0.1:7723/oobi/EH6ekLjSr8V32WyFbGe1zXjTzFs9PkTYmupJ9H65O14g", - "http://127.0.0.1:7723/oobi/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao" - ] -} diff --git a/examples/scripts/list_aids.py b/examples/scripts/list_aids.py deleted file mode 100644 index bae4694e..00000000 --- a/examples/scripts/list_aids.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -SIGNIFY -signify.app.clienting module - -Testing clienting with integration tests that require a running KERIA Cloud Agent -""" - -from keri.core.coring import Tiers - -from signify.app.clienting import SignifyClient - - -def list_aids(): - url = "http://localhost:3901" - bran = b'9876543210abcdefghijk' - tier = Tiers.low - client = SignifyClient(passcode=bran, tier=tier, url=url) - - identifiers = client.identifiers() - res = identifiers.list() - for aid in res["aids"]: - print(f"{aid['name']}: {aid['prefix']}") - - -if __name__ == "__main__": - list_aids() diff --git a/examples/scripts/list_notifications.py b/examples/scripts/list_notifications.py deleted file mode 100644 index 2d59db10..00000000 --- a/examples/scripts/list_notifications.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -SIGNIFY -signify.app.clienting module - -Testing clienting with integration tests that require a running KERIA Cloud Agent -""" -import json -from pprint import pprint - -from keri.core import coring -from keri.core.coring import Tiers -from keri.core.eventing import messagize, SealEvent -from keri.peer import exchanging -from signify.app.clienting import SignifyClient - - -def list_notifications(): - url = "http://localhost:3901" - bran = b'9876543210abcdefghijk' - tier = Tiers.low - - client = SignifyClient(passcode=bran, tier=tier, url=url) - identifiers = client.identifiers() - notificatons = client.notifications() - groups = client.groups() - registries = client.registries() - - res = notificatons.list() - - for note in res["notes"]: - body = note['a'] - route = body['r'] - match route.split("/"): - case ["", "multisig", "icp"]: - pass - # print(body) - # print(f"Recv: inception request for multisig AID=BLAH") - case ["", "multisig", "vcp"]: - said = body['d'] - res = groups.get_request(said=said) - msg = next(exn for exn in res if exn['exn']['d'] == said) - - sender = msg['sender'] - group = msg["groupName"] - - exn = msg['exn'] - usage = exn['a']["usage"] - print(f"Credential registry inception request for group AID {group}:") - print(f"\tReceived from: {sender}") - print(f"\tPurpose: \"{usage}\"") - yes = input("Approve [Y|n]? ") - - if yes in ('', 'y', 'Y'): - registryName = input("Enter new local name for registry: ") - embeds = exn['e'] - vcp = embeds['vcp'] - ixn = embeds['ixn'] - serder = coring.Serder(ked=ixn) - ghab = identifiers.get(group) - - keeper = client.manager.get(aid=ghab) - sigs = keeper.sign(ser=serder.raw) - - ims = messagize(serder=serder, sigers=[coring.Siger(qb64=sig) for sig in sigs]) - embeds = dict( - vcp=coring.Serder(ked=vcp).raw, - ixn=ims - ) - - sender = ghab["group"]["mhab"] - keeper = client.manager.get(aid=sender) - exn, end = exchanging.exchange(route="/multisig/vcp", - payload={'gid': ghab["prefix"], 'usage': "test"}, - sender=sender["prefix"], embeds=embeds) - - esigs = keeper.sign(ser=exn.raw) - groups.send_request(group, exn.ked, esigs, end) - - return registries.create_from_events(name=group, hab=ghab, registryName=registryName, vcp=vcp, - ixn=ixn, sigs=sigs) - - -if __name__ == "__main__": - list_notifications() diff --git a/examples/scripts/list_notifications.ts b/examples/scripts/list_notifications.ts deleted file mode 100644 index 3001897e..00000000 --- a/examples/scripts/list_notifications.ts +++ /dev/null @@ -1,112 +0,0 @@ -import signify from 'signify-ts'; -import promptSync from 'prompt-sync'; - -const prmpt = promptSync({ sigint: true }); - -await list_notifications(); - -async function list_notifications() { - const url = 'http://127.0.0.1:3901'; - const bran = '0123456789abcdefghijk'; - - await signify.ready(); - const client = new signify.SignifyClient(url, bran); - await client.connect(); - const d = await client.state(); - console.log('Connected: '); - console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - - const identifiers = client.identifiers(); - const notifications = client.notifications(); - const groups = client.groups(); - const registries = client.registries(); - - const res = await notifications.list(); - const notes = res.notes; - - for (const note of notes) { - const payload = note.a; - const route = payload.r; - - if (route === '/multisig/vcp') { - const res = await groups.getRequest(payload.d); - if (res.length == 0) { - console.log( - 'error extracting exns matching nre for ' + payload.data - ); - } - const msg = res[0]; - - let sender = msg['sender']; - const group = msg['groupName']; - - const exn = msg['exn']; - const usage = exn['a']['usage']; - console.log( - 'Credential registry inception request for group AID :' + group - ); - console.log('\tReceived from: ' + sender); - console.log('\tPurpose: ' + usage); - console.log('\nAuto-creating new registry...'); - const yes = prmpt('Approve [Y|n]? '); - if (yes === 'y' || yes === 'Y' || yes === '') { - try { - const registryName = prmpt( - 'Enter new local name for registry: ' - ); - let embeds = exn['e']; - const vcp = embeds['vcp']; - const ixn = embeds['ixn']; - const serder = new signify.Serder(ixn); - const ghab = await identifiers.get(group); - - let keeper = client.manager!.get(ghab); - const sigs = keeper.sign(signify.b(serder.raw)); - const sigers = sigs.map( - (sig: any) => new signify.Siger({ qb64: sig }) - ); - - const ims = signify.d(signify.messagize(serder, sigers)); - const atc = ims.substring(serder.size); - embeds = { - vcp: [new signify.Serder(vcp), undefined], - ixn: [serder, atc], - }; - - sender = ghab['group']['mhab']; - keeper = client.manager!.get(sender); - const [nexn, end] = signify.exchange( - '/multisig/vcp', - { gid: ghab['prefix'], usage: 'test' }, - sender['prefix'], - undefined, - undefined, - undefined, - undefined, - embeds - ); - - console.log(nexn.pretty()); - const esigs = keeper.sign(signify.b(nexn.raw)); - await groups.sendRequest( - group, - nexn.ked, - esigs, - signify.d(end) - ); - - return await registries.createFromEvents( - ghab, - group, - registryName, - vcp, - ixn, - sigs - ); - } catch (e: any) { - console.log(e); - } - } - } - } -} diff --git a/examples/scripts/make_endroles.ts b/examples/scripts/make_endroles.ts deleted file mode 100644 index 16f48dda..00000000 --- a/examples/scripts/make_endroles.ts +++ /dev/null @@ -1,58 +0,0 @@ -import signify from 'signify-ts'; - -await makeends(); - -async function makeends() { - const url = 'http://127.0.0.1:3901'; - const bran = '0123456789abcdefghijk'; - - await signify.ready(); - const client = new signify.SignifyClient(url, bran); - await client.connect(); - const d = await client.state(); - console.log('Connected: '); - console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - - const identifiers = client.identifiers(); - const escrows = client.escrows(); - - const members = await identifiers.members('multisig'); - const hab = await identifiers.get('multisig'); - const aid = hab['prefix']; - const signing = members['signing']; - - const auths = new Map(); - const stamp = new Date(); - - signing.forEach((end: any) => { - const ends = end['ends']; - const roles = ['agent', 'mailbox']; - roles.forEach((role) => { - if (role in ends) { - Object.keys(ends[role]).forEach((k: any) => { - const key = [aid, role, k].join('.'); - auths.set(key, stamp); - }); - } - }); - }); - - const rpys = await escrows.listReply('/end/role'); - - rpys.forEach((rpy: object) => { - const serder = new signify.Serder(rpy); - const payload = serder.ked['a']; - - const key = Object.values(payload).join('.'); - const then = new Date(Date.parse(serder.ked['dt'])); - if (auths.has(key) && then < stamp) { - identifiers.addEndRole( - 'multisig', - payload['role'], - payload['eid'], - serder.ked['dt'] - ); - auths.set(key, then); // track signed role auths by timestamp signed - } - }); -} diff --git a/examples/scripts/multisig-create-credential.sh b/examples/scripts/multisig-create-credential.sh deleted file mode 100755 index f7ca316f..00000000 --- a/examples/scripts/multisig-create-credential.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -npx --package=signify-ts ts-node --esm multisig-create-credential.ts diff --git a/examples/scripts/multisig-create-credential.ts b/examples/scripts/multisig-create-credential.ts deleted file mode 100644 index 78174123..00000000 --- a/examples/scripts/multisig-create-credential.ts +++ /dev/null @@ -1,271 +0,0 @@ -import signify from 'signify-ts'; - -await connect(); - -async function connect() { - const url = 'http://127.0.0.1:3901'; - const bran = '0123456789abcdefghijk'; - - await signify.ready(); - const client = new signify.SignifyClient(url, bran); - console.log(client.controller.pre); - const [evt, sign] = client.controller?.event ?? []; - const data = { - icp: evt.ked, - sig: sign.qb64, - stem: client.controller?.stem, - pidx: 1, - tier: client.controller?.tier, - }; - - await fetch('http://127.0.0.1:3903/boot', { - method: 'POST', - body: JSON.stringify(data), - headers: { - 'Content-Type': 'application/json', - }, - }); - - await client.connect(); - const d = await client.state(); - console.log('Connected: '); - console.log(' Agent: ', d.agent.i, ' Controller: ', d.controller.state.i); - - const identifiers = client.identifiers(); - const oobis = client.oobis(); - const operations = client.operations(); - const exchanges = client.exchanges(); - - const salt = '0123456789lmnopqrstuv'; - const res = await identifiers.create('agent0', { bran: salt }); - let op = await res.op(); - let aid = op['response']; - - await identifiers.addEndRole('agent0', 'agent', d.agent.i); - - console.log('Created AID: ', aid); - - console.log('Resolving multisig1...'); - op = await oobis.resolve( - 'http://127.0.0.1:5642/oobi/EKYLUMmNPZeEs77Zvclf0bSN5IN-mLfLpx2ySb-HDlk4/witness', - 'multisig1' - ); - while (!op['done']) { - op = await operations.get(op['name']); - await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second - } - console.log('done.'); - const multisig1 = op['response']; - - console.log('Resolving multisig2...'); - op = await oobis.resolve( - 'http://127.0.0.1:5642/oobi/EJccSRTfXYF6wrUVuenAIHzwcx3hJugeiJsEKmndi5q1/witness', - 'multisig2' - ); - while (!op['done']) { - op = await operations.get(op['name']); - await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second - } - console.log('done.'); - const multisig2 = op['response']; - - aid = await identifiers.get('agent0'); - const agent0 = aid['state']; - - const states = [multisig2, multisig1, agent0]; - const ires = await identifiers.create('multisig', { - algo: signify.Algos.group, - mhab: aid, - toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], - isith: ['1/3', '1/3', '1/3'], - nsith: ['1/3', '1/3', '1/3'], - states: states, - rstates: states, - }); - - let serder = ires.serder; - let sigs = ires.sigs; - let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - - let ims = signify.d(signify.messagize(serder, sigers)); - let atc = ims.substring(serder.size); - const embeds = { - icp: [serder, atc], - }; - - const smids = states.map((state) => state['i']); - let recp = [multisig2, multisig1].map((state) => state['i']); - - await exchanges.send( - 'agent0', - 'multisig', - aid, - '/multisig/icp', - { gid: serder.pre, smids: smids, rmids: smids }, - embeds, - recp - ); - - const multisigAID = serder.pre; - console.log('Waiting for multisig AID to be created'); - - op = await ires.op(); - while (!op['done']) { - op = await operations.get(op['name']); - await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second - } - console.log('done.'); - - console.log('Resolving schema...'); - op = await oobis.resolve( - 'http://127.0.0.1:7723/oobi/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', - 'schema' - ); - while (!op['done']) { - op = await operations.get(op['name']); - await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second - } - console.log('done.'); - const schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; - - console.log('Creating registry...'); - const vcpRes1 = await client.registries().create({ - name: 'multisig', - registryName: 'vLEI Registry', - nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', - }); - - let op1 = await vcpRes1.op(); - serder = vcpRes1.regser; - const regk = serder.pre; - const anc = vcpRes1.serder; - sigs = vcpRes1.sigs; - - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); - ims = signify.d(signify.messagize(anc, sigers)); - atc = ims.substring(anc.size); - - const regbeds = { - vcp: [serder, ''], - anc: [anc, atc], - }; - - recp = [ - 'EKYLUMmNPZeEs77Zvclf0bSN5IN-mLfLpx2ySb-HDlk4', - 'EJccSRTfXYF6wrUVuenAIHzwcx3hJugeiJsEKmndi5q1', - ]; - await client - .exchanges() - .send( - 'agent0', - 'multisig', - aid, - '/multisig/vcp', - { gid: multisigAID, usage: 'Issue vLEIs' }, - regbeds, - recp - ); - - while (!op1['done']) { - op1 = await operations.get(op1['name']); - await new Promise((resolve) => setTimeout(resolve, 1000)); // sleep for 1 second - } - console.log('done.'); - - console.log('Creating credential from multisig...'); - // Issue credential - const vcdata = { - LEI: '5493001KJTIIGC8Y1R17', - }; - const holder = 'ELjSFdrTdCebJlmvbFNX9-TLhR2PO0_60al1kQp5_e6k'; - - const TIME = '2023-09-25T16:01:37.000000+00:00'; - const credRes = await client - .credentials() - .issue( - 'multisig', - regk, - schemaSAID, - holder, - vcdata, - undefined, - undefined, - TIME - ); - op1 = await credRes.op(); - - const acdc = new signify.Serder(credRes.acdc); - const iss = credRes.iserder; - const ianc = credRes.anc; - const isigs = credRes.sigs; - - sigers = isigs.map((sig: any) => new signify.Siger({ qb64: sig })); - ims = signify.d(signify.messagize(ianc, sigers)); - atc = ims.substring(anc.size); - - const vcembeds = { - acdc: [acdc, ''], - iss: [iss, ''], - anc: [ianc, atc], - }; - - await client - .exchanges() - .send( - 'agent0', - 'multisig', - aid, - '/multisig/iss', - { gid: multisigAID }, - vcembeds, - recp - ); - - while (!op1['done']) { - op1 = await client.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - - console.log('Creating IPEX grant message to send...'); - - const [grant, gsigs, end] = await client - .ipex() - .grant('multisig', holder, '', acdc, iss, ianc, atc, undefined, TIME); - const m = await client.identifiers().get('multisig'); - - const mstate = m['state']; - const seal = [ - 'SealEvent', - { i: m['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, - ]; - sigers = gsigs.map((sig: any) => new signify.Siger({ qb64: sig })); - - const gims = signify.d( - signify.messagize(grant, sigers, seal, undefined, undefined, true) - ); - atc = gims.substring(grant.size); - atc += end; - - const gembeds: any = { - exn: [grant, atc], - }; - - await client - .exchanges() - .send( - 'agent0', - 'multisig', - aid, - '/multisig/exn', - { gid: multisigAID }, - gembeds, - recp - ); - - console.log('... done!'); -} diff --git a/examples/scripts/multisig-kli.sh b/examples/scripts/multisig-kli.sh deleted file mode 100755 index 54a4ae4b..00000000 --- a/examples/scripts/multisig-kli.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# To run this script you need to run the following command in a separate terminals: -# > kli witness demo -# and from the vLEI repo run: -# > vLEI-server -s ./schema/acdc -c ./samples/acdc/ -o ./samples/oobis/ -# - -# EFBmwh8vdPTofoautCiEjjuA17gSlEnE3xc-xy-fGzWZ -kli init --name multisig-kli --salt 0ACDEyMzQ1Njc4OWxtbm9GhI --nopasscode --config-dir "${KERI_SCRIPT_DIR}" --config-file demo-witness-oobis-schema -kli incept --name multisig-kli --alias multisig-kli --file "${KERI_DEMO_SCRIPT_DIR}"/data/gleif-sample.json -kli ends add --name multisig-kli --alias multisig-kli --role mailbox --eid BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX - -read -n 1 -r -p "Press any key after multisig-sigpy and multisig-sigts have been created:" - -kli oobi resolve --name multisig-kli --oobi-alias delegator --oobi http://127.0.0.1:5642/oobi/EHpD0-CDWOdu5RJ8jHBSUkOqBZ3cXeDVHWNb_Ul89VI7/witness/BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha -kli oobi resolve --name multisig-kli --oobi-alias multisig-sigpy --oobi http://127.0.0.1:3902/oobi/EBcIURLpxmVwahksgrsGW6_dUw0zBhyEHYFk17eWrZfk/agent/EERMVxqeHfFo_eIvyzBXaKdT1EyobZdSs1QXuFyYLjmz -kli oobi resolve --name multisig-kli --oobi-alias multisig-sigts --oobi http://127.0.0.1:3902/oobi/ELViLL4JCh-oktYca-pmPLwkmUaeYjyPmCLxELAKZW8V/agent/EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei - -kli multisig incept --name multisig-kli --alias multisig-kli --group multisig --file ${KERI_DEMO_SCRIPT_DIR}/data/multisig-triple.json - -read -n 1 -r -p "Press any key to create endpoints for multisig AID..." - - -kli ends add --name multisig-kli --alias multisig --role mailbox --eid BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX diff --git a/examples/scripts/multisig-sigpy.sh b/examples/scripts/multisig-sigpy.sh deleted file mode 100755 index bb7f667d..00000000 --- a/examples/scripts/multisig-sigpy.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - - -python "${KERI_SCRIPT_DIR}"/create_agent.py -python "${KERI_SCRIPT_DIR}"/create_person_aid.py -python "${KERI_SCRIPT_DIR}"/create_multisig_aid.py - -read -n 1 -r -p "Press any key to create endpoints for multisig AID..." - -python "${KERI_SCRIPT_DIR}"/multisig_endrole.py diff --git a/examples/scripts/multisig-sigts.sh b/examples/scripts/multisig-sigts.sh deleted file mode 100755 index 4f2e0d7a..00000000 --- a/examples/scripts/multisig-sigts.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - - -npx --package=signify-ts ts-node --esm client.ts - -read -n 1 -r -p "Press any key to create endpoints for multisig AID..." - -npx --package=signify-ts ts-node --esm make_endroles.ts \ No newline at end of file diff --git a/examples/scripts/multisig_endrole.py b/examples/scripts/multisig_endrole.py deleted file mode 100644 index 07045db1..00000000 --- a/examples/scripts/multisig_endrole.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -SIGNIFY -signify.app.clienting module - -Testing clienting with integration tests that require a running KERIA Cloud Agent -""" - -import json -from time import sleep - -from keri.app.keeping import Algos -from keri.core import coring -from keri.core.coring import Tiers -from keri.help import helping -from signify.app.clienting import SignifyClient - -url = "http://localhost:3901" -bran = b'9876543210abcdefghijk' -tier = Tiers.low - -def authorize_endroles(): - client = SignifyClient(passcode=bran, tier=tier, url=url) - identifiers = client.identifiers() - escrows = client.escrows() - endroles = client.endroles() - - members = identifiers.members("multisig") - hab = identifiers.get("multisig") - aid = hab["prefix"] - - auths = {} - stamp = helping.nowUTC() - - for member in members['signing']: - ends = member["ends"] - if not ends: - print("\tNone") - - for role in ("agent", "mailbox"): - if role in ends: - for k, v in ends[role].items(): - auths[(aid, role, k)] = stamp - - rpys = escrows.getEscrowReply(route="/end/role") - for rpy in rpys: - serder = coring.Serder(ked=rpy) - payload = serder.ked['a'] - keys = tuple(payload.values()) - then = helping.fromIso8601(serder.ked["dt"]) - if keys in auths and then < stamp: - identifiers.addEndRole("multisig", role=payload["role"], eid=payload['eid'], stamp=helping.toIso8601(then)) - auths[keys] = then # track signed role auths by timestamp signed - - print("Waiting for approvals from other members...") - authKeys = set(auths.keys()) - while authKeys - endrole_set(endroles, "multisig"): - rpys = escrows.getEscrowReply(route="/end/role") - for rpy in rpys: - serder = coring.Serder(ked=rpy) - payload = serder.ked['a'] - keys = tuple(payload.values()) - if keys in auths: - then = helping.fromIso8601(serder.ked["dt"]) - stamp = auths[keys] - - if stamp == then: - continue - - if then < stamp: - print(f"authing {payload} - {then}") - identifiers.addEndRole("multisig", role=payload["role"], eid=payload['eid'], - stamp=serder.ked["dt"]) - auths[keys] = then # track signed role auths by timestamp signed - - print("All endpoint role authorizations approved") - - -def endrole_set(er, name): - ends = er.list(name=name) - return {(end['cid'], end['role'], end['eid']) for end in ends} - - -def list_endroles(): - client = SignifyClient(passcode=bran, tier=tier, url=url) - - endroles = client.endroles() - print(endrole_set(endroles, "multisig")) - - -if __name__ == "__main__": - authorize_endroles() - # list_endroles() diff --git a/examples/scripts/package.json b/examples/scripts/package.json deleted file mode 100644 index dfd189ff..00000000 --- a/examples/scripts/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "module", - "private": true, - "dependencies": { - "prompt-sync": "^4.2.0", - "signify-ts": "*" - }, - "devDependencies": { - "@types/prompt-sync": "^4.2.2" - } -} diff --git a/examples/scripts/stream_escrows.py b/examples/scripts/stream_escrows.py deleted file mode 100644 index c5a5058c..00000000 --- a/examples/scripts/stream_escrows.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -SIGNIFY -signify.app.clienting module - -Testing clienting with integration tests that require a running KERIA Cloud Agent -""" -import json -from time import sleep - -from keri.app.keeping import Algos -from keri.core.coring import Tiers -from signify.app.clienting import SignifyClient - - -def stream_escrows(): - url = "http://localhost:3901" - bran = b'9876543210abcdefghijk' - tier = Tiers.low - - client = SignifyClient(passcode=bran, tier=tier, url=url) - - endroles = client.endroles() - - - - - escrows = client.escrows() - - for rpy in escrows.getEscrowReplyIter(route="/end/role"): - print(rpy) - - -if __name__ == "__main__": - stream_escrows() diff --git a/examples/scripts/tsconfig.json b/examples/scripts/tsconfig.json deleted file mode 100644 index 6c19b63b..00000000 --- a/examples/scripts/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.node.json", - "compilerOptions": { - "noEmit": true, - "paths": { - "signify-ts": ["../../src"] - } - } -} From 7dac183c379b1382566670459fa77996568769ef Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Thu, 7 Dec 2023 11:06:35 -0800 Subject: [PATCH 138/186] Resolve conflicts. --- package-lock.json | 73 ++++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 38 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index c750249c..ca2b9a07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,6 +55,7 @@ } }, "examples/scripts": { + "extraneous": true, "dependencies": { "prompt-sync": "^4.2.0", "signify-ts": "*" @@ -2232,11 +2233,42 @@ "optional": true, "peer": true }, - "node_modules/@types/prompt-sync": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@types/prompt-sync/-/prompt-sync-4.2.3.tgz", - "integrity": "sha512-Ox77gCSx0YyeakGt/qfOZUSFNSSi+sh3ABoGOiCwiO2KODx492BJnUm9oIXS+AHJtqp12iM4RduY6viTJ9bYwA==", - "dev": true + "node_modules/@types/prop-types": { + "version": "15.7.10", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz", + "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==" + }, + "node_modules/@types/react": { + "version": "18.2.37", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz", + "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.15", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.15.tgz", + "integrity": "sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.9.tgz", + "integrity": "sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz", + "integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==" }, "node_modules/@types/semver": { "version": "7.5.5", @@ -10390,33 +10422,6 @@ "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", "dev": true }, - "node_modules/prompt-sync": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", - "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", - "dependencies": { - "strip-ansi": "^5.0.0" - } - }, - "node_modules/prompt-sync/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/prompt-sync/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -10924,10 +10929,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/scripts": { - "resolved": "examples/scripts", - "link": true - }, "node_modules/seedrandom": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", diff --git a/package.json b/package.json index 9897982a..2572e996 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "build": "npm run build:cjs && npm run build:esm && npm run build:types", "test": "jest test/", "test:integration": "jest examples/integration-scripts/ --runInBand --bail", - "lint": "npx eslint src test examples/integration-scripts examples/scripts", + "lint": "npx eslint src test examples/integration-scripts", "prepare": "npm run build", "generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose", "pretty": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' 'examples/**/*.ts' --write", From a3395cbd4230f72f846523d74d03a80aa55d659c Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Thu, 7 Dec 2023 11:30:54 -0800 Subject: [PATCH 139/186] Re-run npm i... again --- package-lock.json | 37 ------------------------------------- 1 file changed, 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca2b9a07..b031795d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2233,43 +2233,6 @@ "optional": true, "peer": true }, - "node_modules/@types/prop-types": { - "version": "15.7.10", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz", - "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==" - }, - "node_modules/@types/react": { - "version": "18.2.37", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz", - "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.15", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.15.tgz", - "integrity": "sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.9.tgz", - "integrity": "sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz", - "integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==" - }, "node_modules/@types/semver": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", From febfcb0dc212ad7842bd033292cce4eea7eeafe7 Mon Sep 17 00:00:00 2001 From: AlexAndrei98 Date: Sun, 3 Dec 2023 17:45:05 -0500 Subject: [PATCH 140/186] using @nobles/hashes --- package-lock.json | 8 +------- package.json | 2 +- src/keri/core/diger.ts | 12 +++++++----- src/keri/core/prefixer.ts | 7 ++++--- src/keri/core/saider.ts | 5 ++--- src/ready.ts | 10 +--------- test/core/diger.test.ts | 8 ++++---- 7 files changed, 20 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index b031795d..5e548444 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "examples/*" ], "dependencies": { - "blake3": "^2.1.7", + "@noble/hashes": "^1.3.2", "buffer": "^6.0.3", "ecdsa-secp256r1": "^1.3.3", "libsodium-wrappers-sumo": "^0.7.9", @@ -3367,12 +3367,6 @@ "ieee754": "^1.1.13" } }, - "node_modules/blake3": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/blake3/-/blake3-2.1.7.tgz", - "integrity": "sha512-5d+TdKJvju96IyEaGJ0eO6CHbckWi+NBrCezGYM/WsnI3R03aLL2TWfsuZSh1rs0fTv/L3ps/r0vykjYurcIwA==", - "hasInstallScript": true - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", diff --git a/package.json b/package.json index 2572e996..686da766 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "whatwg-fetch": "^3.6.19" }, "dependencies": { - "blake3": "^2.1.7", + "@noble/hashes": "^1.3.2", "buffer": "^6.0.3", "ecdsa-secp256r1": "^1.3.3", "libsodium-wrappers-sumo": "^0.7.9", diff --git a/src/keri/core/diger.ts b/src/keri/core/diger.ts index 6ee17063..8bcbfb22 100644 --- a/src/keri/core/diger.ts +++ b/src/keri/core/diger.ts @@ -1,4 +1,4 @@ -import { createHash } from 'blake3'; +import { blake3 } from '@noble/hashes/blake3'; import { Matter, MatterArgs, MtrDex } from './matter'; @@ -25,8 +25,9 @@ export class Diger extends Matter { } if (code === MtrDex.Blake3_256) { - const hasher = createHash(); - const dig = hasher.update(ser).digest(''); + const dig = Buffer.from( + blake3.create({ dkLen: 32 }).update(ser).digest() + ); super({ raw: dig, code: code }); } else { throw new Error(`Unsupported code = ${code} for digester.`); @@ -74,8 +75,9 @@ export class Diger extends Matter { } blake3_256(ser: Uint8Array, dig: any) { - const hasher = createHash(); - const digest = hasher.update(ser).digest(''); + const digest = Buffer.from( + blake3.create({ dkLen: 32 }).update(ser).digest() + ); return digest.toString() === dig.toString(); } } diff --git a/src/keri/core/prefixer.ts b/src/keri/core/prefixer.ts index 53b7fe55..09b99ccb 100644 --- a/src/keri/core/prefixer.ts +++ b/src/keri/core/prefixer.ts @@ -4,7 +4,7 @@ import { Dict, Ilks } from './core'; import { sizeify } from './serder'; import { Verfer } from './verfer'; -import { createHash } from 'blake3'; +import { blake3 } from '@noble/hashes/blake3'; const Dummy: string = '#'; @@ -148,8 +148,9 @@ export class Prefixer extends Matter { kd['i'] = ''.padStart(Matter.Sizes.get(MtrDex.Blake3_256)!.fs!, Dummy); kd['d'] = ked['i']; const [raw] = sizeify(ked); - const hasher = createHash(); - const dig = hasher.update(raw).digest(''); + const dig = Buffer.from( + blake3.create({ dkLen: 32 }).update(raw).digest() + ); return [dig, MtrDex.Blake3_256]; } diff --git a/src/keri/core/saider.ts b/src/keri/core/saider.ts index af9ee7fc..d2e55d90 100644 --- a/src/keri/core/saider.ts +++ b/src/keri/core/saider.ts @@ -3,7 +3,7 @@ import { deversify, Dict, Serials } from './core'; import { EmptyMaterialError } from './kering'; import { dumps, sizeify } from './serder'; -import { createHash } from 'blake3'; +import { blake3 } from '@noble/hashes/blake3'; const Dummy = '#'; @@ -74,8 +74,7 @@ export class Saider extends Matter { _digest_size: number, _length: number ) { - const hasher = createHash(); - return hasher.update(ser).digest(''); + return Buffer.from(blake3.create({ dkLen: 32 }).update(ser).digest()); } private static _derive( diff --git a/src/ready.ts b/src/ready.ts index 7558c50d..23585f26 100644 --- a/src/ready.ts +++ b/src/ready.ts @@ -1,13 +1,5 @@ import _sodium from 'libsodium-wrappers-sumo'; export const ready: () => Promise = async () => { - try { - const b3 = await import('blake3/browser-async'); - await b3.default( - 'https://cdn.jsdelivr.net/npm/blake3@2.1.7/dist/wasm/web/blake3_js_bg.wasm' - ); - await _sodium.ready; - } catch (e) { - await _sodium.ready; - } + await _sodium.ready; }; diff --git a/test/core/diger.test.ts b/test/core/diger.test.ts index 7e083c12..1d0dfc41 100644 --- a/test/core/diger.test.ts +++ b/test/core/diger.test.ts @@ -1,7 +1,6 @@ import { Matter } from '../../src/keri/core/matter'; - -import { createHash } from 'blake3'; import { strict as assert } from 'assert'; +import { blake3 } from '@noble/hashes/blake3'; import { Diger } from '../../src/keri/core/diger'; import { MtrDex } from '../../src/keri/core/matter'; @@ -14,8 +13,9 @@ describe('Diger', () => { 'abcdefghijklmnopqrstuvwxyz0123456789', 'binary' ); - const hasher = createHash(); - const digest = hasher.update(ser).digest(''); + const digest = Buffer.from( + blake3.create({ dkLen: 32 }).update(ser).digest() + ); let diger = new Diger({ raw: digest }); assert.deepStrictEqual(diger.code, MtrDex.Blake3_256); From 400d561fcf4e9e2826952976e074f30dcd7c535c Mon Sep 17 00:00:00 2001 From: lenkan Date: Sat, 9 Dec 2023 09:56:54 +0100 Subject: [PATCH 141/186] add npm audit, remove vulnerable packages --- .github/workflows/main.yml | 13 + package-lock.json | 7126 +++++------------------------------- package.json | 3 - src/keri/app/tsconfig.json | 100 - 4 files changed, 842 insertions(+), 6400 deletions(-) delete mode 100644 src/keri/app/tsconfig.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7e6341d3..b9803a00 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -73,3 +73,16 @@ jobs: run: docker compose logs if: always() + audit: + name: Find vulnerabilities + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - uses: actions/setup-node@v2 + with: + node-version: '18.12.1' + cache: 'npm' + - name: Run audit + run: npm audit diff --git a/package-lock.json b/package-lock.json index 5e548444..ca324d4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,6 @@ }, "devDependencies": { "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", "@types/jest": "^29.5.8", "@types/libsodium-wrappers-sumo": "^0.7.5", "@types/node": "^18.11.18", @@ -37,11 +36,9 @@ "jsdoc": "^4.0.2", "minami": "^1.2.3", "prettier": "^3.0.3", - "size-limit": "^5.0.4", "ts-jest": "^29.1.1", "ts-mockito": "^2.6.1", "ts-node": "^10.9.1", - "tslib": "^2.3.1", "typedoc": "^0.25.3", "typescript": "^5.2.2", "whatwg-fetch": "^3.6.19" @@ -754,15 +751,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@esbuild/android-arm": { "version": "0.19.5", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", @@ -1920,12 +1908,6 @@ "node": ">= 8" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.23", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", - "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", - "dev": true - }, "node_modules/@puppeteer/browsers": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", @@ -2007,67 +1989,6 @@ "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@size-limit/file": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-5.0.5.tgz", - "integrity": "sha512-lnrQYRmTt0QzV08R9M61q0+EM7Jkcp1qZ/+BG01OOFA0rZtfHt9aKCdvoSEoMrIxK44A9lWHRmyNVnKKDfKbWA==", - "dev": true, - "dependencies": { - "semver": "7.3.5" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - }, - "peerDependencies": { - "size-limit": "5.0.5" - } - }, - "node_modules/@size-limit/preset-small-lib": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@size-limit/preset-small-lib/-/preset-small-lib-5.0.5.tgz", - "integrity": "sha512-BHZwlSEaxHPqOOienQpgoH+ueWYryXiusFpNKRj1Jmyv6/rlOxww1nTCljNhh9+hOKOsahqGbvl43cr8o7NQiQ==", - "dev": true, - "dependencies": { - "@size-limit/file": "5.0.5", - "@size-limit/webpack": "5.0.5" - }, - "peerDependencies": { - "size-limit": "5.0.5" - } - }, - "node_modules/@size-limit/webpack": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@size-limit/webpack/-/webpack-5.0.5.tgz", - "integrity": "sha512-caLXPNj1iRNeBRoycKTLMLRlLTCjIv80VmBTCag5QZMuNNu4g0weoxjnU7Jbf5YneTuXuEhKSjpc95rB4Biq7Q==", - "dev": true, - "dependencies": { - "css-loader": "^5.2.6", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "mkdirp": "^1.0.4", - "nanoid": "^3.1.28", - "optimize-css-assets-webpack-plugin": "^6.0.1", - "pnp-webpack-plugin": "^1.7.0", - "style-loader": "^2.0.0", - "webpack": "^4.44.1", - "webpack-bundle-analyzer": "^4.4.2" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - }, - "peerDependencies": { - "size-limit": "5.0.5" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -2573,193 +2494,6 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, "node_modules/acorn": { "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", @@ -2818,24 +2552,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -2891,12 +2607,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -2912,33 +2622,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -2948,15 +2631,6 @@ "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -2973,65 +2647,6 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", - "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.4", - "util": "^0.10.4" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "optional": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -3238,36 +2853,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -3287,34 +2872,6 @@ } ] }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bip39": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", @@ -3373,18 +2930,6 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3407,85 +2952,6 @@ "node": ">=8" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, "node_modules/browserslist": { "version": "4.21.10", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", @@ -3577,95 +3043,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "node_modules/bytes-iec": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", - "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3684,18 +3061,6 @@ "node": ">=6" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001532", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", @@ -3749,48 +3114,12 @@ "node": ">=10" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, "node_modules/chromium-bidi": { "version": "0.4.7", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", @@ -3818,12 +3147,6 @@ "node": ">=8" } }, - "node_modules/ci-job-number": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ci-job-number/-/ci-job-number-1.2.2.tgz", - "integrity": "sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==", - "dev": true - }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -3839,104 +3162,6 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -4017,19 +3242,6 @@ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4045,12 +3257,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, "node_modules/commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", @@ -4060,12 +3266,6 @@ "node": ">=14" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, "node_modules/complex.js": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", @@ -4078,128 +3278,18 @@ "url": "https://www.patreon.com/infusion" } }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, "node_modules/cosmiconfig": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", @@ -4236,22 +3326,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -4376,321 +3450,64 @@ "node": ">= 8" } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "ms": "2.1.2" }, "engines": { - "node": "*" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14" - }, "peerDependencies": { - "postcss": "^8.0.9" + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" + "node": ">=0.10.0" } }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/cyclist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", - "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" + "engines": { + "node": ">=8" } }, "node_modules/devtools-protocol": { @@ -4717,23 +3534,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -4758,125 +3558,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/duplexify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/ecdsa-secp256r1": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/ecdsa-secp256r1/-/ecdsa-secp256r1-1.3.3.tgz", @@ -4897,27 +3578,6 @@ "integrity": "sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==", "dev": true }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -4936,15 +3596,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -4954,69 +3605,6 @@ "once": "^1.4.0" } }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/enhanced-resolve/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/enhanced-resolve/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/enhanced-resolve/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", @@ -5026,18 +3614,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -5438,15 +4014,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -5456,25 +4023,6 @@ "node": ">=0.10.0" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -5507,143 +4055,6 @@ "node": ">= 0.8.0" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", @@ -5660,71 +4071,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -5821,12 +4167,6 @@ "pend": "~1.2.0" } }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5839,33 +4179,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5878,115 +4191,6 @@ "node": ">=8" } }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -6035,61 +4239,6 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/flush-write-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/flush-write-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fraction.js": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", @@ -6102,118 +4251,12 @@ "url": "https://github.com/sponsors/rawify" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -6258,21 +4301,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -6294,15 +4322,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -6376,21 +4395,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -6412,105 +4416,6 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -6524,39 +4429,12 @@ "node": ">=4" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -6579,18 +4457,6 @@ "node": ">=10.17.0" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -6610,12 +4476,6 @@ } ] }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -6678,12 +4538,6 @@ "node": ">=0.8.19" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -6703,42 +4557,12 @@ "resolved": "examples/integration-scripts", "link": true }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "node_modules/is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", @@ -6751,44 +4575,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6846,18 +4632,6 @@ "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -6870,39 +4644,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -8375,12 +6122,6 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -8426,15 +6167,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/klaw": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", @@ -8453,16 +6185,6 @@ "node": ">=6" } }, - "node_modules/last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "dependencies": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -8498,15 +6220,6 @@ "libsodium-sumo": "^0.7.11" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -8522,33 +6235,10 @@ "uc.micro": "^1.0.1" } }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { "p-locate": "^4.1.0" @@ -8563,30 +6253,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.invokemap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", - "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", - "dev": true - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -8599,24 +6265,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.pullall": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", - "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -8695,27 +6343,6 @@ "tmpl": "1.0.5" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", @@ -8792,64 +6419,12 @@ "safe-buffer": "^5.1.2" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -8865,21 +6440,6 @@ "node": ">= 8" } }, - "node_modules/mico-spinner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mico-spinner/-/mico-spinner-1.4.0.tgz", - "integrity": "sha512-6fuiQX9qRMJACVlCX6pkbV3KnjSbobr10RLB+0CNk2Z+uKPulL7wMKZSoZEiLCOvzTQc0vghjKXKVGpiMIOABw==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.0" - } - }, - "node_modules/mico-spinner/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -8893,25 +6453,6 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -8932,12 +6473,6 @@ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -8950,55 +6485,12 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/mitt": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", "dev": true }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -9017,106 +6509,18 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/move-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -9143,96 +6547,6 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -9248,18 +6562,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -9272,335 +6574,96 @@ "node": ">=8" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "wrappy": "1" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optimize-css-assets-webpack-plugin": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz", - "integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==", - "dev": true, - "dependencies": { - "cssnano": "^5.0.2", - "last-call-webpack-plugin": "^3.0.0", - "postcss": "^8.2.1" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parallel-transform/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/parallel-transform/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/parallel-transform/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "node": ">=6" } }, "node_modules/parent-module": { @@ -9615,19 +6678,6 @@ "node": ">=6" } }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -9646,22 +6696,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "optional": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9743,15 +6777,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -9773,3533 +6798,1062 @@ "node": ">=8" } }, - "node_modules/pnp-webpack-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", - "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "ts-pnp": "^1.1.6" - }, "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "node_modules/promise-polyfill": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", + "dev": true + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 6" } }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=6" } }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "node_modules/puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", "dev": true, + "hasInstallScript": true, "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" } }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "node_modules/puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=14.14.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "node_modules/puppeteer-core/node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node-fetch": "2.6.7" } }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "node_modules/puppeteer-core/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "4.x || >=6.0.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { - "postcss-selector-parser": "^6.0.5" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 6" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", "dev": true, "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "lodash": "^4.17.21" } }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.4" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": "^10 || ^12 || >= 14" + "bin": { + "resolve": "bin/resolve" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { - "icss-utils": "^5.0.0" + "resolve-from": "^5.0.0" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=8" } }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=10" } }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-polyfill": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", - "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", - "dev": true - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", - "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@puppeteer/browsers": "0.5.0", - "cosmiconfig": "8.1.3", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.11.1" - } - }, - "node_modules/puppeteer-core": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", - "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", - "dev": true, - "dependencies": { - "@puppeteer/browsers": "0.5.0", - "chromium-bidi": "0.4.7", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.13.0" - }, - "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/puppeteer-core/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true, - "optional": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shiki": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", - "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", - "dev": true, - "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/signify-ts": { - "resolved": "", - "link": true - }, - "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/size-limit": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-5.0.5.tgz", - "integrity": "sha512-DtblS3Qc1SmtEtAYE6RGmg1UFdIzz2aWhlnzbBc3FYc0XMsTVT0kKB40DMIZ/yU5JztkMetdqB5Q5Pow/iVazg==", - "dev": true, - "dependencies": { - "bytes-iec": "^3.1.1", - "chokidar": "^3.5.2", - "ci-job-number": "^1.2.2", - "globby": "^11.0.4", - "lilconfig": "^2.0.3", - "mico-spinner": "^1.3.0", - "picocolors": "^0.1.0" - }, - "bin": { - "size-limit": "bin.js" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/size-limit/node_modules/picocolors": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.1.0.tgz", - "integrity": "sha512-W+3MFREUEjPt0MnYaR51VkLw8tY8UubrLOqcBmaQocZhM34hQhjg50FQ0c6f0UldPlecieoqUqI6ToM/dNblDw==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-browserify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-browserify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-http/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-http/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-http/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/structured-headers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.5.0.tgz", - "integrity": "sha512-oLnmXSsjhud+LxRJpvokwP8ImEB2wTg8sg30buwfVViKMuluTv3BlOJHUX9VW9pJ2nQOxmx87Z0kB86O4cphag==" - }, - "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", - "dev": true, - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/ts-mockito": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", - "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.5" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-function": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", - "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedoc": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.3.tgz", - "integrity": "sha512-Ow8Bo7uY1Lwy7GTmphRIMEo6IOZ+yYUyrc8n5KXIZg1svpqhZSWgni2ZrDhe+wLosFS8yswowUzljTAV/3jmWw==", - "dev": true, - "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 16" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x" - } - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "type": "patreon", + "url": "https://www.patreon.com/feross" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "consulting", + "url": "https://feross.org/support" } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "queue-microtask": "^1.2.2" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/url": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.2.tgz", - "integrity": "sha512-7yIgNnrST44S7PJ5+jXbdIupfU1nWUdQJBFBeJRclPXiWgCvrSq5Frw8lr/i//n5sqDfzoKmBymMS81l4U/7cg==", - "dev": true, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.11.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/urlsafe-base64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", - "integrity": "sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "dependencies": { - "inherits": "2.0.3" + "engines": { + "node": ">=8" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "node_modules/shiki": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", + "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true + "node_modules/signify-ts": { + "resolved": "", + "link": true }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "dependencies": { - "makeerror": "1.0.12" + "engines": { + "node": ">=8" } }, - "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, - "optional": true, "dependencies": { - "chokidar": "^2.1.8" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, - "optional": true, "dependencies": { - "remove-trailing-separator": "^1.0.1" + "escape-string-regexp": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, - "optional": true, "dependencies": { - "is-extendable": "^0.1.0" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" + "node": ">=10" } }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "optional": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "optional": true, "dependencies": { - "is-extendable": "^0.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, "engines": { - "node": ">= 4.0" + "node": ">=8" } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "node_modules/structured-headers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.5.0.tgz", + "integrity": "sha512-oLnmXSsjhud+LxRJpvokwP8ImEB2wTg8sg30buwfVViKMuluTv3BlOJHUX9VW9pJ2nQOxmx87Z0kB86O4cphag==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "optional": true, "dependencies": { - "binary-extensions": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, - "optional": true, "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, - "optional": true, "dependencies": { - "is-buffer": "^1.1.5" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/watchpack-chokidar2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "optional": true - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "optional": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/watchpack-chokidar2/node_modules/readable-stream": { + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": ">=4" } }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "optional": true, "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "is-number": "^7.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=8.0" } }, - "node_modules/watchpack-chokidar2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, - "node_modules/watchpack-chokidar2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", "dev": true, - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", "dev": true, - "optional": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/webpack": { - "version": "4.47.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", - "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" }, "bin": { - "webpack": "bin/webpack.js" + "ts-jest": "cli.js" }, "engines": { - "node": ">=6.11.5" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { - "webpack-cli": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { "optional": true }, - "webpack-command": { + "esbuild": { "optional": true } } }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", - "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", + "node_modules/ts-jest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "is-plain-object": "^5.0.0", - "lodash.debounce": "^4.0.8", - "lodash.escape": "^4.0.1", - "lodash.flatten": "^4.4.0", - "lodash.invokemap": "^4.6.0", - "lodash.pullall": "^4.2.0", - "lodash.uniqby": "^4.7.0", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=10" } }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/ts-jest/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/ts-mockito": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", + "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "lodash": "^4.17.5" } }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, - "engines": { - "node": ">=8.3.0" + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" }, "peerDependenciesMeta": { - "bufferutil": { + "@swc/core": { "optional": true }, - "utf-8-validate": { + "@swc/wasm": { "optional": true } } }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=0.4.0" + "node": ">= 0.8.0" } }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, + "node_modules/typed-function": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", + "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", "engines": { - "node": ">=4.0.0" + "node": ">= 14" } }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/typedoc": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.3.tgz", + "integrity": "sha512-Ow8Bo7uY1Lwy7GTmphRIMEo6IOZ+yYUyrc8n5KXIZg1svpqhZSWgni2ZrDhe+wLosFS8yswowUzljTAV/3jmWw==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.1" + }, + "bin": { + "typedoc": "bin/typedoc" }, "engines": { - "node": ">=0.10.0" + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x" } }, - "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { + "node_modules/typedoc/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "balanced-match": "^1.0.0" } }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=0.10.0" + "node": ">=14.17" } }, - "node_modules/webpack/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "buffer": "^5.2.1", + "through": "^2.3.8" } }, - "node_modules/webpack/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/webpack/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "punycode": "^2.1.0" } }, - "node_modules/webpack/node_modules/schema-utils": { + "node_modules/urlsafe-base64": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", + "integrity": "sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" }, "engines": { - "node": ">= 4" + "node": ">=10.12.0" } }, - "node_modules/webpack/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" + "makeerror": "1.0.12" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, "node_modules/whatwg-fetch": { "version": "3.6.19", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", @@ -13331,15 +7885,6 @@ "node": ">= 8" } }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "dependencies": { - "errno": "~0.1.7" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -13386,21 +7931,6 @@ "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", "dev": true }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -13412,6 +7942,8 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, + "optional": true, + "peer": true, "engines": { "node": ">= 6" } diff --git a/package.json b/package.json index 686da766..d993802f 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,6 @@ "author": "Phil Feairheller", "devDependencies": { "@mermaid-js/mermaid-cli": "^10.3.0", - "@size-limit/preset-small-lib": "^5.0.4", "@types/jest": "^29.5.8", "@types/libsodium-wrappers-sumo": "^0.7.5", "@types/node": "^18.11.18", @@ -47,11 +46,9 @@ "jsdoc": "^4.0.2", "minami": "^1.2.3", "prettier": "^3.0.3", - "size-limit": "^5.0.4", "ts-jest": "^29.1.1", "ts-mockito": "^2.6.1", "ts-node": "^10.9.1", - "tslib": "^2.3.1", "typedoc": "^0.25.3", "typescript": "^5.2.2", "whatwg-fetch": "^3.6.19" diff --git a/src/keri/app/tsconfig.json b/src/keri/app/tsconfig.json deleted file mode 100644 index e26c0552..00000000 --- a/src/keri/app/tsconfig.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Projects */ - // "incremental": true, /* Enable incremental compilation */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ - // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "resolveJsonModule": true, /* Enable importing .json files */ - // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ - // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ - // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} From 623f479f8811ba965fbc37f9ee1e454e789f11ca Mon Sep 17 00:00:00 2001 From: Nuttawut Kongsuwan Date: Wed, 29 Nov 2023 09:43:17 +0700 Subject: [PATCH 142/186] Create delegation-multisig.ts Signed-off-by: Nuttawut Kongsuwan --- .../delegation-multisig.test.ts | 227 ++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 examples/integration-scripts/delegation-multisig.test.ts diff --git a/examples/integration-scripts/delegation-multisig.test.ts b/examples/integration-scripts/delegation-multisig.test.ts new file mode 100644 index 00000000..b0b1ea2b --- /dev/null +++ b/examples/integration-scripts/delegation-multisig.test.ts @@ -0,0 +1,227 @@ +import { strict as assert } from 'assert'; +import signify from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; + +const { url, bootUrl } = resolveEnvironment(); + +test('delegation-multisig', async () => { + await signify.ready(); + // Boot three clients + const client0 = await bootClient(); + const client1 = await bootClient(); + const client2 = await bootClient(); + + // Create four identifiers, one for each client + let aid0 = await createAID(client0, 'delegator'); + let aid1 = await createAID(client1, 'member1'); + let aid2 = await createAID(client2, 'member2'); + + // Exchange OOBIs + console.log('Resolving OOBIs'); + let oobi0 = await client0.oobis().get('delegator', 'agent'); + let oobi1 = await client1.oobis().get('member1', 'agent'); + let oobi2 = await client2.oobis().get('member2', 'agent'); + + let op1 = await client1.oobis().resolve(oobi0.oobis[0], 'delegator'); + op1 = await waitForOp(client1, op1); + op1 = await client1.oobis().resolve(oobi2.oobis[0], 'member2'); + op1 = await waitForOp(client1, op1); + console.log('Member1 resolved 2 OOBIs'); + + let op2 = await client2.oobis().resolve(oobi0.oobis[0], 'delegator'); + op1 = await waitForOp(client2, op1); + op1 = await client2.oobis().resolve(oobi1.oobis[0], 'member1'); + op1 = await waitForOp(client2, op1); + console.log('Member2 resolved 2 OOBIs'); + + // First member challenge the other members with a random list of words + // List of words should be passed to the other members out of band + // The other members should do the same challenge/response flow, not shown here for brevity + const words = (await client1.challenges().generate(128)).words; + console.log('Member1 generated challenge words:', words); + + await client2.challenges().respond('member2', aid1.prefix, words); + console.log('Member2 responded challenge with signed words'); + + op1 = await client1.challenges().verify('member1', aid2.prefix, words); + op1 = await waitForOp(client1, op1); + console.log('Member1 verified challenge response from member2'); + let exnwords = new signify.Serder(op1.response.exn); + op1 = await client1 + .challenges() + .responded('member1', aid2.prefix, exnwords.ked.d); + console.log('Member1 marked challenge response as accepted'); + + // First member start the creation of a multisig identifier + let rstates = [aid1['state'], aid2['state']]; + let states = rstates; + let icpResult1 = await client1.identifiers().create('multisig', { + algo: signify.Algos.group, + mhab: aid1, + isith: 2, + nsith: 2, + // toad: 3, + // wits: [ + // 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + // 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + // 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + // ], + states: states, + rstates: rstates, + delpre: aid0.prefix, + }); + op1 = await icpResult1.op(); + let serder = icpResult1.serder; + + let sigs = icpResult1.sigs; + let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + let ims = signify.d(signify.messagize(serder, sigers)); + let atc = ims.substring(serder.size); + let embeds = { + icp: [serder, atc], + }; + + let smids = states.map((state) => state['i']); + let recp = [aid2['state']].map((state) => state['i']); + + await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/icp', + { gid: serder.pre, smids: smids, rmids: smids }, + embeds, + recp + ); + console.log('Member1 initiated multisig, waiting for others to join...'); + + // Second member check notifications and join the multisig + let msgSaid = await waitForMessage(client2, '/multisig/icp'); + console.log('Member2 received exchange message to join multisig'); + + let res = await client2.groups().getRequest(msgSaid); + let exn = res[0].exn; + let icp = exn.e.icp; + + let icpResult2 = await client2.identifiers().create('multisig', { + algo: signify.Algos.group, + mhab: aid2, + isith: icp.kt, + nsith: icp.nt, + toad: parseInt(icp.bt), + wits: icp.b, + states: states, + rstates: rstates, + delpre: aid0.prefix, + }); + op2 = await icpResult2.op(); + serder = icpResult2.serder; + sigs = icpResult2.sigs; + sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); + embeds = { + icp: [serder, atc], + }; + + smids = exn.a.smids; + recp = [aid1['state']].map((state) => state['i']); + + await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/icp', + { gid: serder.pre, smids: smids, rmids: smids }, + embeds, + recp + ); + console.log('Member2 joined multisig, waiting for others...'); + + let delegatePrefix = op1.name.split('.')[1]; + assert.equal(op2.name.split('.')[1], delegatePrefix); + console.log("Delegate's prefix:", delegatePrefix); + console.log('Delegate waiting for approval...'); + + // Client 0 approves delegation + const anchor = { + i: delegatePrefix, + s: 0, + d: delegatePrefix, + }; + await client0.identifiers().interact('delegator', anchor); + console.log('Delegator approved delegation'); + + // Check for completion + op1 = await waitForOp(client1, op1); + op2 = await waitForOp(client2, op2); + console.log('Delegated multisig created!'); + + const aid_delegate = await client1.identifiers().get('multisig'); + assert.equal(aid_delegate.prefix, delegatePrefix); +}, 30000); + +async function waitForOp(client: signify.SignifyClient, op: any) { + while (!op['done']) { + op = await client.operations().get(op.name); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + return op; +} + +async function waitForMessage(client: signify.SignifyClient, route: string) { + let msgSaid = ''; + while (msgSaid == '') { + let notifications = await client.notifications().list(); + for (let notif of notifications.notes) { + if (notif.a.r == route) { + msgSaid = notif.a.d; + await client.notifications().mark(notif.i); + } + } + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + return msgSaid; +} + +async function bootClient(): Promise { + let bran = signify.randomPasscode(); + let client = new signify.SignifyClient( + url, + bran, + signify.Tier.low, + bootUrl + ); + await client.boot(); + await client.connect(); + let state = await client.state(); + console.log( + 'Client AID:', + state.controller.state.i, + 'Agent AID: ', + state.agent.i + ); + return client; +} + +async function createAID(client: signify.SignifyClient, name: string) { + let icpResult1 = await client.identifiers().create(name, { + toad: 3, + wits: [ + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + let op = await icpResult1.op(); + op = await waitForOp(client, op); + let aid = await client.identifiers().get(name); + await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); + console.log(name, 'AID:', aid.prefix); + return aid; +} From a8de62f558d69da9d9fb3091b9d88472824a77c4 Mon Sep 17 00:00:00 2001 From: Kent Bull Date: Mon, 11 Dec 2023 16:46:05 -0700 Subject: [PATCH 143/186] Show Python container logs locally By default in non-interactive mode, when not run as an interactive script, Python doesn't flush the log buffer to stdout or stderr. This means you need to set PYTHONUNBUFFERED=1 tp ensure that the output is not buffered, which means it is immediately flushed to stdout or stderr. --- docker-compose.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docker-compose.yaml b/docker-compose.yaml index f9f3ce60..20a7defb 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,6 +1,9 @@ services: vlei-server: image: gleif/vlei + environment: + - PYTHONUNBUFFERED=1 + - PYTHONIOENCODING=UTF-8 command: - vLEI-server - -s @@ -27,6 +30,8 @@ services: environment: - KERI_AGENT_CORS=1 - KERI_URL=http://keria:3902 + - PYTHONUNBUFFERED=1 + - PYTHONIOENCODING=UTF-8 volumes: - ./config/keria.json:/keria/config/keri/cf/keria.json entrypoint: keria @@ -51,6 +56,9 @@ services: witness-demo: image: weboftrust/keri-witness-demo:1.1.0 + environment: + - PYTHONUNBUFFERED=1 + - PYTHONIOENCODING=UTF-8 healthcheck: test: ['CMD', 'curl', '-f', 'http://localhost:5642/oobi'] interval: 2s From f52afafe5f5de1bf7c22e8126f572c6561593e3c Mon Sep 17 00:00:00 2001 From: Nuttawut Kongsuwan Date: Wed, 29 Nov 2023 09:43:17 +0700 Subject: [PATCH 144/186] Create delegation-multisig.ts Signed-off-by: Nuttawut Kongsuwan Signed-off-by: Nuttawut Kongsuwan Signed-off-by: Nuttawut Kongsuwan --- examples/integration-scripts/challenge.test.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/examples/integration-scripts/challenge.test.ts b/examples/integration-scripts/challenge.test.ts index eee7c239..869b1aed 100644 --- a/examples/integration-scripts/challenge.test.ts +++ b/examples/integration-scripts/challenge.test.ts @@ -92,8 +92,9 @@ test('challenge', async () => { // List Client 1 contacts let contacts1 = await client1.contacts().list(); - expect(contacts1[0].alias).toEqual('bob'); - expect(contacts1[0].challenges).toHaveLength(0); + let bobContact = findContact(contacts1, 'bob'); + expect(bobContact.alias).toEqual('bob'); + expect(bobContact.challenges).toHaveLength(0); // Bob responds to Alice challenge await client2.challenges().respond('bob', aid1.i, challenge1_small.words); @@ -119,5 +120,16 @@ test('challenge', async () => { // Check Bob's challenge in conctats contacts1 = await client1.contacts().list(); - expect(contacts1[0].challenges[0].authenticated).toEqual(true); + bobContact = findContact(contacts1, 'bob'); + expect(bobContact.challenges[0].authenticated).toEqual(true); }, 30000); + +function findContact(contactsList: any, name: any) { + let contact: any; + for (const index in contactsList) { + if (contactsList[index].alias == name) { + contact = contactsList[index]; + } + } + return contact; +} From d421454871ddd4e79ef832387b008fd7339607f3 Mon Sep 17 00:00:00 2001 From: Nuttawut Kongsuwan Date: Fri, 15 Dec 2023 09:03:50 +0700 Subject: [PATCH 145/186] update with @lenkan suggestion --- examples/integration-scripts/challenge.test.ts | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/examples/integration-scripts/challenge.test.ts b/examples/integration-scripts/challenge.test.ts index 869b1aed..ef1a4b31 100644 --- a/examples/integration-scripts/challenge.test.ts +++ b/examples/integration-scripts/challenge.test.ts @@ -92,7 +92,9 @@ test('challenge', async () => { // List Client 1 contacts let contacts1 = await client1.contacts().list(); - let bobContact = findContact(contacts1, 'bob'); + let bobContact = contacts1.find( + (contact: { alias: string }) => contact.alias === 'bob' + ); expect(bobContact.alias).toEqual('bob'); expect(bobContact.challenges).toHaveLength(0); @@ -120,16 +122,8 @@ test('challenge', async () => { // Check Bob's challenge in conctats contacts1 = await client1.contacts().list(); - bobContact = findContact(contacts1, 'bob'); + bobContact = contacts1.find( + (contact: { alias: string }) => contact.alias === 'bob' + ); expect(bobContact.challenges[0].authenticated).toEqual(true); }, 30000); - -function findContact(contactsList: any, name: any) { - let contact: any; - for (const index in contactsList) { - if (contactsList[index].alias == name) { - contact = contactsList[index]; - } - } - return contact; -} From eacf6bbd0342b638c52c549d0a9324b188941b83 Mon Sep 17 00:00:00 2001 From: lenkan Date: Sat, 9 Dec 2023 11:11:41 +0100 Subject: [PATCH 146/186] remove endless loops from tests Improves wait/retry function with exponential back-off for faster test run --- .../integration-scripts/challenge.test.ts | 13 +- .../integration-scripts/credentials.test.ts | 175 ++++-------------- .../delegation-multisig.test.ts | 94 ++++------ .../integration-scripts/delegation.test.ts | 7 +- examples/integration-scripts/multisig.test.ts | 78 +++----- examples/integration-scripts/randy.test.ts | 9 +- .../request-present.test.ts | 34 +--- examples/integration-scripts/salty.test.ts | 14 +- .../single-issuer-chained-credential.test.ts | 69 +++---- .../single-issuer-holder.test.ts | 142 +++----------- examples/integration-scripts/utils/retry.ts | 53 ++++++ .../integration-scripts/utils/test-util.ts | 68 ++++--- examples/integration-scripts/witness.test.ts | 34 +--- 13 files changed, 265 insertions(+), 525 deletions(-) create mode 100644 examples/integration-scripts/utils/retry.ts diff --git a/examples/integration-scripts/challenge.test.ts b/examples/integration-scripts/challenge.test.ts index ef1a4b31..99a0f7c3 100644 --- a/examples/integration-scripts/challenge.test.ts +++ b/examples/integration-scripts/challenge.test.ts @@ -55,7 +55,7 @@ test('challenge', async () => { 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ], }); - const { response: aid1 } = await waitOperation<{ i: string }>( + const { response: aid1 } = await waitOperation( client1, await icpResult1.op() ); @@ -72,14 +72,11 @@ test('challenge', async () => { 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ], }); - let op2 = await icpResult2.op(); - while (!op2['done']) { - op2 = await client2.operations().get(op2.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - const aid2 = op2['response']; + const { response: aid2 } = await waitOperation( + client2, + await icpResult2.op() + ); await client2.identifiers().addEndRole('bob', 'agent', client2!.agent!.pre); - console.log("Bob's AID:", aid2.i); // Exchenge OOBIs const oobi1 = await client1.oobis().get('alice', 'agent'); diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index 35a60116..65b521c1 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -1,18 +1,18 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -const { url, bootUrl, vleiServerUrl, witnessIds, witnessUrls } = - resolveEnvironment(); +import { + resolveOobi, + waitForNotifications, + waitOperation, +} from './utils/test-util'; +import { retry } from './utils/retry'; +const { url, bootUrl, vleiServerUrl, witnessIds } = resolveEnvironment(); const boot_url = bootUrl; const WAN_WITNESS_AID = witnessIds[0]; const WIL_WITNESS_AID = witnessIds[1]; const WES_WITNESS_AID = witnessIds[2]; -const WITNESS_OOBIS = [ - `${witnessUrls[0]}/oobi/${WAN_WITNESS_AID}/controller?name=Wan&tag=witness`, - `${witnessUrls[1]}/oobi/${WIL_WITNESS_AID}/controller?name=Wil&tag=witness`, - `${witnessUrls[2]}/oobi/${WES_WITNESS_AID}/controller?name=Wes&tag=witness`, -]; const KLI_WITNESS_DEMO_PREFIXES = [ WAN_WITNESS_AID, @@ -43,40 +43,6 @@ function createTimestamp() { return new Date().toISOString().replace('Z', '000+00:00'); } -// typed interface for Notification -interface Notification { - i: string; - dt: string; - r: boolean; - a: { r: string; d?: string; m?: string }; -} - -// checks for notifications on a route and returns them as an array -async function waitForNotifications( - client: signify.SignifyClient, - route: string -): Promise { - const awaitedNotifications = []; - while (true) { - const notifications = await client.notifications().list(); - for (const note of notifications.notes) { - if (note.a.r === route) { - awaitedNotifications.push(note); - } - } - if (awaitedNotifications.length > 0) break; - - await new Promise((resolve) => setTimeout(resolve, 250)); - } - return awaitedNotifications; -} - -async function resolveWitnesses(client: signify.SignifyClient) { - await Promise.all( - WITNESS_OOBIS.map((oobi) => client.oobis().resolve(oobi)) - ); -} - test('credentials', async () => { await signify.ready(); // Boot three clients one each for issuer, holder, and verifier @@ -117,11 +83,7 @@ test('credentials', async () => { toad: 3, wits: [...KLI_WITNESS_DEMO_PREFIXES], }); - let issOp = await issuerIcpRes.op(); - while (!issOp['done']) { - issOp = await issuerClient.operations().get(issOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } + await waitOperation(issuerClient, await issuerIcpRes.op()); const issAidResp = await issuerClient.identifiers().get(issuerAidName); const issuerAID = issAidResp.prefix; await issuerClient @@ -135,11 +97,7 @@ test('credentials', async () => { toad: 3, wits: [...KLI_WITNESS_DEMO_PREFIXES], }); - let hldOp = await holderIcpRes.op(); - while (!hldOp['done']) { - hldOp = await holderClient.operations().get(hldOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } + await waitOperation(holderClient, await holderIcpRes.op()); const hldAidResp = await holderClient.identifiers().get(holderAidName); const holderAID = hldAidResp.prefix; await holderClient @@ -153,11 +111,7 @@ test('credentials', async () => { toad: 3, wits: [...KLI_WITNESS_DEMO_PREFIXES], }); - let vfyOp = await verifierIcpRes.op(); - while (!vfyOp['done']) { - vfyOp = await verifierClient.operations().get(vfyOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } + await waitOperation(verifierClient, await verifierIcpRes.op()); const vfyAidResp = await verifierClient.identifiers().get(verifierAidName); const verifierAID = vfyAidResp.prefix; await verifierClient @@ -171,21 +125,9 @@ test('credentials', async () => { console.log('Resolving Schema and Agent OOBIs...'); console.log(`Resolving schema OOBIs with ${schemaOobiUrl}`); - issOp = await issuerClient.oobis().resolve(schemaOobiUrl, 'schema'); - while (!issOp['done']) { - issOp = await issuerClient.operations().get(issOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } - hldOp = await holderClient.oobis().resolve(schemaOobiUrl, 'schema'); - while (!hldOp['done']) { - hldOp = await holderClient.operations().get(hldOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } - vfyOp = await verifierClient.oobis().resolve(schemaOobiUrl, 'schema'); - while (!vfyOp['done']) { - vfyOp = await verifierClient.operations().get(vfyOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } + await resolveOobi(issuerClient, schemaOobiUrl, 'schema'); + await resolveOobi(holderClient, schemaOobiUrl, 'schema'); + await resolveOobi(verifierClient, schemaOobiUrl, 'schema'); const issSchema = await issuerClient.schemas().get(schemaSAID); assert.equal(issSchema.$id, schemaSAID); @@ -203,54 +145,18 @@ test('credentials', async () => { .get(verifierAidName, 'agent'); // issuer -> holder, verifier - issOp = await issuerClient - .oobis() - .resolve(hldAgentOOBI.oobis[0], holderAidName); - while (!issOp['done']) { - issOp = await issuerClient.operations().get(issOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } - issOp = await issuerClient - .oobis() - .resolve(vfyAgentOOBI.oobis[0], verifierAidName); - while (!issOp['done']) { - issOp = await issuerClient.operations().get(issOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } + await resolveOobi(issuerClient, hldAgentOOBI.oobis[0], holderAidName); + await resolveOobi(issuerClient, vfyAgentOOBI.oobis[0], verifierAidName); console.log('Issuer resolved 2 OOBIs: [holder, verifier]'); // holder -> issuer, verifier - hldOp = await holderClient - .oobis() - .resolve(issAgentOOBI.oobis[0], issuerAidName); - while (!hldOp['done']) { - hldOp = await holderClient.operations().get(hldOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } - hldOp = await holderClient - .oobis() - .resolve(vfyAgentOOBI.oobis[0], verifierAidName); - while (!hldOp['done']) { - hldOp = await holderClient.operations().get(hldOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } + await resolveOobi(holderClient, issAgentOOBI.oobis[0], issuerAidName); + await resolveOobi(holderClient, vfyAgentOOBI.oobis[0], verifierAidName); console.log('Holder resolved 2 OOBIs: [issuer, verifier]'); // verifier -> issuer, holder - vfyOp = await verifierClient - .oobis() - .resolve(issAgentOOBI.oobis[0], issuerAidName); - while (!vfyOp['done']) { - vfyOp = await verifierClient.operations().get(vfyOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } - vfyOp = await verifierClient - .oobis() - .resolve(hldAgentOOBI.oobis[0], holderAidName); - while (!vfyOp['done']) { - vfyOp = await verifierClient.operations().get(vfyOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } + await resolveOobi(verifierClient, issAgentOOBI.oobis[0], issuerAidName); + await resolveOobi(verifierClient, hldAgentOOBI.oobis[0], holderAidName); console.log('Verifier resolved 2 OOBIs: [issuer, holder]'); // Create registry for issuer @@ -258,11 +164,7 @@ test('credentials', async () => { const regResult = await issuerClient .registries() .create({ name: issuerAidName, registryName: registryName }); - issOp = await regResult.op(); - while (!issOp['done']) { - issOp = await issuerClient.operations().get(issOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } + await waitOperation(issuerClient, await regResult.op()); const registries = await issuerClient.registries().list(issuerAidName); const registry = registries[0]; assert.equal(registries.length, 1); @@ -285,11 +187,7 @@ test('credentials', async () => { recipient: holderAID, data: vcdata, }); - issOp = issResult.op; - while (!issOp['done']) { - issOp = await issuerClient.operations().get(issOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } + await waitOperation(issuerClient, issResult.op); let issCreds = await issuerClient.credentials().list(); assert.equal(issCreds.length, 1); assert.equal(issCreds[0].sad.s, schemaSAID); @@ -339,13 +237,12 @@ test('credentials', async () => { console.log('Holder: IPEX GRANT notification marked'); // list credentials to show new credential received through IPEX GRANT+ADMIT - let holderCreds = await holderClient.credentials().list(); - while (holderCreds.length < 1) { - console.log('Holder: No credentials yet...'); - await new Promise((resolve) => setTimeout(resolve, 250)); - holderCreds = await holderClient.credentials().list(); - } - const hldVleiAcdc: any = holderCreds[0]; + const holderCreds = await retry(async () => { + const result = await holderClient.credentials().list(); + expect(result.length).toBeGreaterThanOrEqual(1); + return result; + }); + const hldVleiAcdc = holderCreds[0]; assert.equal(holderCreds.length, 1); assert.equal(hldVleiAcdc.sad.s, schemaSAID); assert.equal(hldVleiAcdc.sad.i, issuerAID); @@ -387,12 +284,11 @@ test('credentials', async () => { console.log('Verifier: Notification marked for presentation'); // list credentials for verifier - let verifierCreds = await verifierClient.credentials().list(); - while (verifierCreds.length < 1) { - console.log('No credentials yet...'); - await new Promise((resolve) => setTimeout(resolve, 250)); - verifierCreds = await verifierClient.credentials().list(); - } + const verifierCreds = await retry(async () => { + const result = await verifierClient.credentials().list(); + expect(result.length).toBeGreaterThanOrEqual(1); + return result; + }); assert.equal(verifierCreds.length, 1); assert.equal(verifierCreds[0].sad.s, schemaSAID); assert.equal(verifierCreds[0].sad.i, issuerAID); @@ -400,13 +296,10 @@ test('credentials', async () => { console.log('Credential presented and received by verifier'); // Revoke credential - issOp = await issuerClient + const revokeOperation = await issuerClient .credentials() .revoke(issuerAidName, issCreds[0].sad.d); - while (!issOp['done']) { - issOp = await issuerClient.operations().get(issOp.name); - await new Promise((resolve) => setTimeout(resolve, 250)); - } + await waitOperation(issuerClient, revokeOperation); issCreds = await issuerClient.credentials().list(); const issVleiAcdc = issCreds[0]; assert.equal(issCreds.length, 1); diff --git a/examples/integration-scripts/delegation-multisig.test.ts b/examples/integration-scripts/delegation-multisig.test.ts index b0b1ea2b..35042450 100644 --- a/examples/integration-scripts/delegation-multisig.test.ts +++ b/examples/integration-scripts/delegation-multisig.test.ts @@ -1,6 +1,7 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; +import { waitForNotifications, waitOperation } from './utils/test-util'; const { url, bootUrl } = resolveEnvironment(); @@ -12,26 +13,26 @@ test('delegation-multisig', async () => { const client2 = await bootClient(); // Create four identifiers, one for each client - let aid0 = await createAID(client0, 'delegator'); - let aid1 = await createAID(client1, 'member1'); - let aid2 = await createAID(client2, 'member2'); + const aid0 = await createAID(client0, 'delegator'); + const aid1 = await createAID(client1, 'member1'); + const aid2 = await createAID(client2, 'member2'); // Exchange OOBIs console.log('Resolving OOBIs'); - let oobi0 = await client0.oobis().get('delegator', 'agent'); - let oobi1 = await client1.oobis().get('member1', 'agent'); - let oobi2 = await client2.oobis().get('member2', 'agent'); + const oobi0 = await client0.oobis().get('delegator', 'agent'); + const oobi1 = await client1.oobis().get('member1', 'agent'); + const oobi2 = await client2.oobis().get('member2', 'agent'); let op1 = await client1.oobis().resolve(oobi0.oobis[0], 'delegator'); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); op1 = await client1.oobis().resolve(oobi2.oobis[0], 'member2'); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); console.log('Member1 resolved 2 OOBIs'); let op2 = await client2.oobis().resolve(oobi0.oobis[0], 'delegator'); - op1 = await waitForOp(client2, op1); - op1 = await client2.oobis().resolve(oobi1.oobis[0], 'member1'); - op1 = await waitForOp(client2, op1); + op2 = await waitOperation(client2, op2); + op2 = await client2.oobis().resolve(oobi1.oobis[0], 'member1'); + op2 = await waitOperation(client2, op2); console.log('Member2 resolved 2 OOBIs'); // First member challenge the other members with a random list of words @@ -44,18 +45,18 @@ test('delegation-multisig', async () => { console.log('Member2 responded challenge with signed words'); op1 = await client1.challenges().verify('member1', aid2.prefix, words); - op1 = await waitForOp(client1, op1); + op1 = await waitOperation(client1, op1); console.log('Member1 verified challenge response from member2'); - let exnwords = new signify.Serder(op1.response.exn); + const exnwords = new signify.Serder(op1.response.exn); op1 = await client1 .challenges() .responded('member1', aid2.prefix, exnwords.ked.d); console.log('Member1 marked challenge response as accepted'); // First member start the creation of a multisig identifier - let rstates = [aid1['state'], aid2['state']]; - let states = rstates; - let icpResult1 = await client1.identifiers().create('multisig', { + const rstates = [aid1['state'], aid2['state']]; + const states = rstates; + const icpResult1 = await client1.identifiers().create('multisig', { algo: signify.Algos.group, mhab: aid1, isith: 2, @@ -74,7 +75,7 @@ test('delegation-multisig', async () => { let serder = icpResult1.serder; let sigs = icpResult1.sigs; - let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + let sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); let ims = signify.d(signify.messagize(serder, sigers)); let atc = ims.substring(serder.size); let embeds = { @@ -98,14 +99,19 @@ test('delegation-multisig', async () => { console.log('Member1 initiated multisig, waiting for others to join...'); // Second member check notifications and join the multisig - let msgSaid = await waitForMessage(client2, '/multisig/icp'); + const notifications = await waitForNotifications(client2, '/multisig/icp'); + await Promise.all( + notifications.map((note) => client2.notifications().mark(note.i)) + ); + const msgSaid = notifications[notifications.length - 1].a.d; + assert(msgSaid !== undefined); console.log('Member2 received exchange message to join multisig'); - let res = await client2.groups().getRequest(msgSaid); - let exn = res[0].exn; - let icp = exn.e.icp; + const res = await client2.groups().getRequest(msgSaid); + const exn = res[0].exn; + const icp = exn.e.icp; - let icpResult2 = await client2.identifiers().create('multisig', { + const icpResult2 = await client2.identifiers().create('multisig', { algo: signify.Algos.group, mhab: aid2, isith: icp.kt, @@ -119,7 +125,7 @@ test('delegation-multisig', async () => { op2 = await icpResult2.op(); serder = icpResult2.serder; sigs = icpResult2.sigs; - sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); ims = signify.d(signify.messagize(serder, sigers)); atc = ims.substring(serder.size); @@ -143,7 +149,7 @@ test('delegation-multisig', async () => { ); console.log('Member2 joined multisig, waiting for others...'); - let delegatePrefix = op1.name.split('.')[1]; + const delegatePrefix = op1.name.split('.')[1]; assert.equal(op2.name.split('.')[1], delegatePrefix); console.log("Delegate's prefix:", delegatePrefix); console.log('Delegate waiting for approval...'); @@ -158,40 +164,17 @@ test('delegation-multisig', async () => { console.log('Delegator approved delegation'); // Check for completion - op1 = await waitForOp(client1, op1); - op2 = await waitForOp(client2, op2); + op1 = await waitOperation(client1, op1); + op2 = await waitOperation(client2, op2); console.log('Delegated multisig created!'); const aid_delegate = await client1.identifiers().get('multisig'); assert.equal(aid_delegate.prefix, delegatePrefix); }, 30000); -async function waitForOp(client: signify.SignifyClient, op: any) { - while (!op['done']) { - op = await client.operations().get(op.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - return op; -} - -async function waitForMessage(client: signify.SignifyClient, route: string) { - let msgSaid = ''; - while (msgSaid == '') { - let notifications = await client.notifications().list(); - for (let notif of notifications.notes) { - if (notif.a.r == route) { - msgSaid = notif.a.d; - await client.notifications().mark(notif.i); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - return msgSaid; -} - async function bootClient(): Promise { - let bran = signify.randomPasscode(); - let client = new signify.SignifyClient( + const bran = signify.randomPasscode(); + const client = new signify.SignifyClient( url, bran, signify.Tier.low, @@ -199,7 +182,7 @@ async function bootClient(): Promise { ); await client.boot(); await client.connect(); - let state = await client.state(); + const state = await client.state(); console.log( 'Client AID:', state.controller.state.i, @@ -210,7 +193,7 @@ async function bootClient(): Promise { } async function createAID(client: signify.SignifyClient, name: string) { - let icpResult1 = await client.identifiers().create(name, { + const icpResult1 = await client.identifiers().create(name, { toad: 3, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', @@ -218,9 +201,8 @@ async function createAID(client: signify.SignifyClient, name: string) { 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ], }); - let op = await icpResult1.op(); - op = await waitForOp(client, op); - let aid = await client.identifiers().get(name); + await waitOperation(client, await icpResult1.op()); + const aid = await client.identifiers().get(name); await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); console.log(name, 'AID:', aid.prefix); return aid; diff --git a/examples/integration-scripts/delegation.test.ts b/examples/integration-scripts/delegation.test.ts index f626f3fa..7dbc70eb 100644 --- a/examples/integration-scripts/delegation.test.ts +++ b/examples/integration-scripts/delegation.test.ts @@ -50,8 +50,7 @@ test('delegation', async () => { 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ], }); - let op1 = await icpResult1.op(); - await waitOperation(client1, op1); + await waitOperation(client1, await icpResult1.op()); const aid1 = await client1.identifiers().get('delegator'); await client1 .identifiers() @@ -68,7 +67,7 @@ test('delegation', async () => { const icpResult2 = await client2 .identifiers() .create('delegate', { delpre: aid1.prefix }); - let op2 = await icpResult2.op(); + const op2 = await icpResult2.op(); const delegatePrefix = op2.name.split('.')[1]; console.log("Delegate's prefix:", delegatePrefix); console.log('Delegate waiting for approval...'); @@ -79,7 +78,7 @@ test('delegation', async () => { s: 0, d: delegatePrefix, }; - op1 = await client1.identifiers().interact('delegator', anchor); + await client1.identifiers().interact('delegator', anchor); console.log('Delegator approved delegation'); // Client 2 check approval diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index 60f49539..dae67d0f 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -5,9 +5,10 @@ import signify, { IssueCredentialResult, } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -import { waitOperation } from './utils/test-util'; +import { waitForNotifications, waitOperation } from './utils/test-util'; +import { getOrCreateClient } from './utils/test-setup'; -const { url, bootUrl, vleiServerUrl } = resolveEnvironment(); +const { vleiServerUrl } = resolveEnvironment(); const WITNESS_AIDS = [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', @@ -21,10 +22,10 @@ test('multisig', async function run() { await signify.ready(); // Boot Four clients const [client1, client2, client3, client4] = await Promise.all([ - bootClient(), - bootClient(), - bootClient(), - bootClient(), + getOrCreateClient(), + getOrCreateClient(), + getOrCreateClient(), + getOrCreateClient(), ]); // Create four identifiers, one for each client @@ -159,7 +160,7 @@ test('multisig', async function run() { // Second member check notifications and join the multisig - let msgSaid = await waitForMessage(client2, '/multisig/icp'); + let msgSaid = await waitAndMarkNotification(client2, '/multisig/icp'); console.log('Member2 received exchange message to join multisig'); let res = await client2.groups().getRequest(msgSaid); @@ -204,7 +205,7 @@ test('multisig', async function run() { console.log('Member2 joined multisig, waiting for others...'); // Third member check notifications and join the multisig - msgSaid = await waitForMessage(client3, '/multisig/icp'); + msgSaid = await waitAndMarkNotification(client3, '/multisig/icp'); console.log('Member3 received exchange message to join multisig'); res = await client3.groups().getRequest(msgSaid); @@ -345,7 +346,7 @@ test('multisig', async function run() { ); //Member2 check for notifications and join the authorization - msgSaid = await waitForMessage(client2, '/multisig/rpy'); + msgSaid = await waitAndMarkNotification(client2, '/multisig/rpy'); console.log( 'Member2 received exchange message to join the end role authorization' ); @@ -393,7 +394,7 @@ test('multisig', async function run() { ); //Member3 check for notifications and join the authorization - msgSaid = await waitForMessage(client3, '/multisig/rpy'); + msgSaid = await waitAndMarkNotification(client3, '/multisig/rpy'); console.log( 'Member3 received exchange message to join the end role authorization' ); @@ -490,7 +491,7 @@ test('multisig', async function run() { ); // Member2 check for notifications and join the interaction event - msgSaid = await waitForMessage(client2, '/multisig/ixn'); + msgSaid = await waitAndMarkNotification(client2, '/multisig/ixn'); console.log( 'Member2 received exchange message to join the interaction event' ); @@ -528,7 +529,7 @@ test('multisig', async function run() { console.log('Member2 joins interaction event, waiting for others...'); // Member3 check for notifications and join the interaction event - msgSaid = await waitForMessage(client3, '/multisig/ixn'); + msgSaid = await waitAndMarkNotification(client3, '/multisig/ixn'); console.log( 'Member3 received exchange message to join the interaction event' ); @@ -655,7 +656,7 @@ test('multisig', async function run() { ); // Member2 check for notifications and join the rotation event - msgSaid = await waitForMessage(client2, '/multisig/rot'); + msgSaid = await waitAndMarkNotification(client2, '/multisig/rot'); console.log('Member2 received exchange message to join the rotation event'); await new Promise((resolve) => setTimeout(resolve, 5000)); @@ -693,7 +694,7 @@ test('multisig', async function run() { console.log('Member2 joins rotation event, waiting for others...'); // Member3 check for notifications and join the rotation event - msgSaid = await waitForMessage(client3, '/multisig/rot'); + msgSaid = await waitAndMarkNotification(client3, '/multisig/rot'); console.log('Member3 received exchange message to join the rotation event'); res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; @@ -780,7 +781,7 @@ test('multisig', async function run() { console.log('Member1 initiated registry, waiting for others to join...'); // Member2 check for notifications and join the create registry event - msgSaid = await waitForMessage(client2, '/multisig/vcp'); + msgSaid = await waitAndMarkNotification(client2, '/multisig/vcp'); console.log( 'Member2 received exchange message to join the create registry event' ); @@ -822,7 +823,7 @@ test('multisig', async function run() { console.log('Member2 joins registry event, waiting for others...'); // Member3 check for notifications and join the create registry event - msgSaid = await waitForMessage(client3, '/multisig/vcp'); + msgSaid = await waitAndMarkNotification(client3, '/multisig/vcp'); console.log( 'Member3 received exchange message to join the create registry event' ); @@ -894,7 +895,7 @@ test('multisig', async function run() { ); // Member2 check for notifications and join the credential create event - msgSaid = await waitForMessage(client2, '/multisig/iss'); + msgSaid = await waitAndMarkNotification(client2, '/multisig/iss'); console.log( 'Member2 received exchange message to join the credential create event' ); @@ -915,7 +916,7 @@ test('multisig', async function run() { console.log('Member2 joins credential create event, waiting for others...'); // Member3 check for notifications and join the create registry event - msgSaid = await waitForMessage(client3, '/multisig/iss'); + msgSaid = await waitAndMarkNotification(client3, '/multisig/iss'); console.log( 'Member3 received exchange message to join the credential create event' ); @@ -1000,7 +1001,7 @@ test('multisig', async function run() { 'Member1 initiated grant message, waiting for others to join...' ); - msgSaid = await waitForMessage(client2, '/multisig/exn'); + msgSaid = await waitAndMarkNotification(client2, '/multisig/exn'); console.log('Member2 received exchange message to join the grant message'); res = await client2.groups().getRequest(msgSaid); exn = res[0].exn; @@ -1044,7 +1045,7 @@ test('multisig', async function run() { console.log('Member2 joined grant message, waiting for others to join...'); - msgSaid = await waitForMessage(client3, '/multisig/exn'); + msgSaid = await waitAndMarkNotification(client3, '/multisig/exn'); console.log('Member3 received exchange message to join the grant message'); res = await client3.groups().getRequest(msgSaid); exn = res[0].exn; @@ -1088,7 +1089,7 @@ test('multisig', async function run() { console.log('Member3 joined grant message, waiting for others to join...'); - msgSaid = await waitForMessage(client4, '/exn/ipex/grant'); + msgSaid = await waitAndMarkNotification(client4, '/exn/ipex/grant'); console.log('Holder received exchange message with the grant message'); res = await client4.exchanges().get(msgSaid); @@ -1102,41 +1103,22 @@ test('multisig', async function run() { console.log('Holder creates and sends admit message'); - msgSaid = await waitForMessage(client1, '/exn/ipex/admit'); + msgSaid = await waitAndMarkNotification(client1, '/exn/ipex/admit'); console.log('Member1 received exchange message with the admit response'); const creds = await client4.credentials().list(); console.log(`Holder holds ${creds.length} credential`); }, 360000); -async function waitForMessage(client: SignifyClient, route: string) { - let msgSaid = ''; - while (msgSaid == '') { - const notifications = await client.notifications().list(); - for (const notif of notifications.notes) { - if (notif.a.r == route) { - msgSaid = notif.a.d; - await client.notifications().mark(notif.i); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - return msgSaid; -} +async function waitAndMarkNotification(client: SignifyClient, route: string) { + const notes = await waitForNotifications(client, route); -async function bootClient(): Promise { - const bran = signify.randomPasscode(); - const client = new SignifyClient(url, bran, signify.Tier.low, bootUrl); - await client.boot(); - await client.connect(); - const state = await client.state(); - console.log( - 'Client AID:', - state.controller.state.i, - 'Agent AID: ', - state.agent.i + await Promise.all( + notes.map(async (note) => { + await client.notifications().mark(note.i); + }) ); - return client; + return notes[notes.length - 1]?.a.d ?? ''; } async function createAID(client: SignifyClient, name: string, wits: string[]) { diff --git a/examples/integration-scripts/randy.test.ts b/examples/integration-scripts/randy.test.ts index f8f396ca..3c6ef978 100644 --- a/examples/integration-scripts/randy.test.ts +++ b/examples/integration-scripts/randy.test.ts @@ -1,6 +1,7 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; +import { waitOperation } from './utils/test-util'; const { url, bootUrl } = resolveEnvironment(); @@ -21,7 +22,7 @@ test('randy', async () => { let icpResult = await client1 .identifiers() .create('aid1', { algo: signify.Algos.randy }); - let op = await icpResult.op(); + let op = await waitOperation(client1, await icpResult.op()); assert.equal(op['done'], true); let aid = op['response']; const icp = new signify.Serder(aid); @@ -37,8 +38,7 @@ test('randy', async () => { assert.equal(aid.prefix, icp.pre); icpResult = await client1.identifiers().interact('aid1', [icp.pre]); - op = await icpResult.op(); - assert.equal(op['done'], true); + op = await waitOperation(client1, await icpResult.op()); let ked = op['response']; const ixn = new signify.Serder(ked); assert.equal(ixn.ked['s'], '1'); @@ -53,8 +53,7 @@ test('randy', async () => { assert.equal(log.length, 2); icpResult = await client1.identifiers().rotate('aid1'); - op = await icpResult.op(); - assert.equal(op['done'], true); + op = await waitOperation(client1, await icpResult.op()); ked = op['response']; const rot = new signify.Serder(ked); assert.equal(rot.ked['s'], '2'); diff --git a/examples/integration-scripts/request-present.test.ts b/examples/integration-scripts/request-present.test.ts index 47a66b72..54166b3f 100644 --- a/examples/integration-scripts/request-present.test.ts +++ b/examples/integration-scripts/request-present.test.ts @@ -1,6 +1,10 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; -import { resolveOobi, waitOperation } from './utils/test-util'; +import { + resolveOobi, + waitForNotifications, + waitOperation, +} from './utils/test-util'; import { resolveEnvironment } from './utils/resolve-env'; const { url, bootUrl, vleiServerUrl } = resolveEnvironment(); @@ -191,18 +195,8 @@ test.skip('request-present', async () => { await client3.credentials().request('verifier', aid2.prefix, schemaSAID); // Recipient checks for a presentation request notification - let requestReceived = false; - while (!requestReceived) { - const notifications = await client2.notifications().list(); - for (const notif of notifications) { - if (notif.a.r == '/presentation/request') { - assert.equal(notif.a.schema.n, schemaSAID); - requestReceived = true; - await client2.notifications().mark(notif.i); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + const notes2 = await waitForNotifications(client2, '/presentation/request'); + await Promise.all(notes2.map((n) => client2.notifications().mark(n.i))); // Recipient present credential to verifier await client1 @@ -210,18 +204,8 @@ test.skip('request-present', async () => { .present('issuer', creds1[0].sad.d, 'verifier', true); // Verifier checks for a presentation notification - requestReceived = false; - while (!requestReceived) { - const notifications = await client3.notifications().list(); - for (const notif of notifications) { - if (notif.a.r == '/presentation') { - assert.equal(notif.a.schema.n, schemaSAID); - requestReceived = true; - await client3.notifications().mark(notif.i); - } - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + const notes3 = await waitForNotifications(client3, '/presentation'); + await Promise.all(notes3.map((n) => client3.notifications().mark(n.i))); const creds3 = await client3 .credentials() diff --git a/examples/integration-scripts/salty.test.ts b/examples/integration-scripts/salty.test.ts index c0b78d80..6a84f044 100644 --- a/examples/integration-scripts/salty.test.ts +++ b/examples/integration-scripts/salty.test.ts @@ -1,6 +1,7 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; +import { waitOperation } from './utils/test-util'; const { url, bootUrl } = resolveEnvironment(); @@ -27,8 +28,8 @@ test('salty', async () => { let icpResult = await client1 .identifiers() .create('aid1', { bran: '0123456789abcdefghijk' }); - let op = await icpResult.op(); - assert.equal(op['done'], true); + let op = await waitOperation(client1, await icpResult.op()); + const aid1 = op['response']; const icp = new signify.Serder(aid1); assert.equal(icp.pre, 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK'); @@ -60,8 +61,7 @@ test('salty', async () => { nsith: '2', bran: '0123456789lmnopqrstuv', }); - op = await icpResult.op(); - assert.equal(op['done'], true); + op = await waitOperation(client1, await icpResult.op()); const aid2 = op['response']; const icp2 = new signify.Serder(aid2); assert.equal(icp2.pre, 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX'); @@ -119,8 +119,7 @@ test('salty', async () => { assert.equal(aid.name, 'aid3'); icpResult = await client1.identifiers().rotate('aid1'); - op = await icpResult.op(); - assert.equal(op['done'], true); + op = await waitOperation(client1, await icpResult.op()); let ked = op['response']; const rot = new signify.Serder(ked); assert.equal(rot.ked['d'], 'EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg'); @@ -137,8 +136,7 @@ test('salty', async () => { ); icpResult = await client1.identifiers().interact('aid1', [icp.pre]); - op = await icpResult.op(); - assert.equal(op['done'], true); + op = await waitOperation(client1, await icpResult.op()); ked = op['response']; const ixn = new signify.Serder(ked); assert.equal(ixn.ked['d'], 'ENsmRAg_oM7Hl1S-GTRMA7s4y760lQMjzl0aqOQ2iTce'); diff --git a/examples/integration-scripts/single-issuer-chained-credential.test.ts b/examples/integration-scripts/single-issuer-chained-credential.test.ts index 170f112c..092f76a1 100644 --- a/examples/integration-scripts/single-issuer-chained-credential.test.ts +++ b/examples/integration-scripts/single-issuer-chained-credential.test.ts @@ -1,7 +1,12 @@ import assert from 'node:assert'; import signify, { SignifyClient, Saider } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -import { resolveOobi, wait, waitOperation } from './utils/test-util'; +import { + resolveOobi, + waitForNotifications, + waitOperation, +} from './utils/test-util'; +import { retry } from './utils/retry'; const { bootUrl, url, vleiServerUrl } = resolveEnvironment(); @@ -40,8 +45,7 @@ async function createIdentifier( toad: witnesses.length, wits: witnesses, }); - const op = await icpResult1.op(); - await waitOperation(client, op, 15000); + await waitOperation(client, await icpResult1.op()); const aid = await client.identifiers().get(name); if (!client.agent) { @@ -67,8 +71,7 @@ async function createRegistry( registryName: string ) { const result = await client.registries().create({ name, registryName }); - const op = await result.op(); - await waitOperation(client, op, 5000); + await waitOperation(client, await result.op()); const registries = await client.registries().list(name); assert.equal(registries.length, 1); @@ -99,7 +102,7 @@ async function issueCredential( source: args.source && Saider.saidify({ d: '', ...args.source })[1], }); - await waitOperation(client, result.op, 10000); + await waitOperation(client, result.op); const creds = await client.credentials().list(); const dt = createTimestamp(); @@ -117,29 +120,6 @@ async function issueCredential( return creds[0]; } -interface Notification { - i: string; - dt: string; - r: boolean; - a: { r: string; d?: string; m?: string }; -} - -async function waitForNotification( - client: SignifyClient, - route: string -): Promise { - return wait(async () => { - const notifications = await client.notifications().list(); - for (const notif of notifications.notes) { - if (notif.a.r == route) { - return notif; - } - } - - throw new Error('No notification'); - }); -} - async function admitCredential( client: SignifyClient, name: string, @@ -194,8 +174,8 @@ test('single issuer chained credentials', async () => { }, }); - await waitOperation(issuerClient, result.op, 5); - const sourceCredential = await wait(async () => { + await waitOperation(issuerClient, result.op); + const sourceCredential = await retry(async () => { const result = await issuerClient.credentials().list(); assert(result.length >= 1); return result[0]; @@ -225,7 +205,7 @@ test('single issuer chained credentials', async () => { }, }); - const grantNotification = await waitForNotification( + const grantNotifications = await waitForNotifications( holderClient, '/exn/ipex/grant' ); @@ -233,25 +213,22 @@ test('single issuer chained credentials', async () => { await admitCredential( holderClient, 'holder', - grantNotification.a.d!, + grantNotifications[0].a.d!, issuerPrefix ); - await holderClient.notifications().mark(grantNotification.i); + await holderClient.notifications().mark(grantNotifications[0].i); - const holderCredential = await wait( - async () => { - const creds = await holderClient.credentials().list(); - const lei = creds.find( - (cred: { schema: { $id: string } }) => - cred.schema.$id === LE_SCHEMA_SAID - ); + const holderCredential = await retry(async () => { + const creds = await holderClient.credentials().list(); + const lei = creds.find( + (cred: { schema: { $id: string } }) => + cred.schema.$id === LE_SCHEMA_SAID + ); - expect(lei).toBeDefined(); - return lei; - }, - { timeout: 10000 } - ); + expect(lei).toBeDefined(); + return lei; + }); expect(holderCredential).toMatchObject({ sad: { a: { LEI: '5493001KJTIIGC8Y1R17' } }, diff --git a/examples/integration-scripts/single-issuer-holder.test.ts b/examples/integration-scripts/single-issuer-holder.test.ts index e65b45ee..b9b5e877 100644 --- a/examples/integration-scripts/single-issuer-holder.test.ts +++ b/examples/integration-scripts/single-issuer-holder.test.ts @@ -2,13 +2,14 @@ import assert from 'node:assert'; import signify, { SignifyClient, IssueCredentialArgs, - Operation, Serder, } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; +import { waitForNotifications, waitOperation } from './utils/test-util'; +import { retry } from './utils/retry'; const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; -const { bootUrl, url, vleiServerUrl, witnessUrls } = resolveEnvironment(); +const { bootUrl, url, vleiServerUrl, witnessIds } = resolveEnvironment(); function createTimestamp() { const dt = new Date().toISOString().replace('Z', '000+00:00'); @@ -39,7 +40,7 @@ async function createIdentifier( wits: witnesses, }); const op = await icpResult1.op(); - await waitOperation(client, op, 5000); + await waitOperation(client, op); const aid = await client.identifiers().get(name); if (!client.agent) { @@ -62,7 +63,7 @@ async function getAgentOobi( async function resolveOobi(client: SignifyClient, oobi: string, alias: string) { console.log(`Resolve ${alias} -> ${oobi}`); const op = await client.oobis().resolve(oobi, alias); - const result = await waitOperation<{ i: string }>(client, op, 5000); + const result = await waitOperation<{ i: string }>(client, op); return result.response; } @@ -73,7 +74,7 @@ async function createRegistry( ) { const result = await client.registries().create({ name, registryName }); const op = await result.op(); - await waitOperation(client, op, 5000); + await waitOperation(client, op); const registries = await client.registries().list(name); assert.equal(registries.length, 1); @@ -88,7 +89,7 @@ async function issueCredential( ) { const result = await client.credentials().issue(args); - await waitOperation(client, result.op, 5000); + await waitOperation(client, result.op); const creds = await client.credentials().list(); assert.equal(creds.length, 1); @@ -147,30 +148,6 @@ async function grantCredential( await client.ipex().submitGrant(issuerName, grant, gsigs, end, [recipient]); } -interface Notification { - i: string; - dt: string; - r: boolean; - a: { r: string; d?: string; m?: string }; -} - -async function waitForNotification( - client: SignifyClient, - route: string -): Promise { - // eslint-disable-next-line no-constant-condition - while (true) { - const notifications = await client.notifications().list(); - for (const notif of notifications.notes) { - if (notif.a.r == route) { - return notif; - } - } - - await new Promise((resolve) => setTimeout(resolve, 1000)); - } -} - async function admitCredential( client: SignifyClient, name: string, @@ -184,52 +161,6 @@ async function admitCredential( await client.ipex().submitAdmit(name, admit, sigs, end, [recipient]); } -async function wait(fn: () => Promise, timeout: number = 10000) { - const start = Date.now(); - const errors: Error[] = []; - while (Date.now() - start < timeout) { - try { - const result = await fn(); - return result; - } catch (error) { - errors.push(error as Error); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - } - - throw new RetryError(`Retry failed after ${Date.now() - start} ms`, errors); -} - -async function waitOperation( - client: SignifyClient, - op: Operation, - timeout: number = 30000 -): Promise> { - const start = Date.now(); - while (Date.now() - start < timeout) { - const current = (await client - .operations() - .get(op.name)) as Operation; - - if (current.done) { - return current; - } - - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - - throw new Error(`Operation timed out after ${Date.now() - start}ms`); -} - -class RetryError extends Error { - constructor( - message: string, - public errors: Error[] - ) { - super(message); - } -} - test( 'Single issuer holder', async () => { @@ -242,54 +173,21 @@ test( await holderClient.state(); await verifierClient.state(); - const issuerWits = await Promise.all( - witnessUrls.map(async (url, i) => { - const result = await resolveOobi( - issuerClient, - url + '/oobi', - `witness-${i}` - ); - return result.i; - }) - ); - - const holderWits = await Promise.all( - witnessUrls.map(async (url, i) => { - const result = await resolveOobi( - holderClient, - url + '/oobi', - `witness-${i}` - ); - return result.i; - }) - ); - - const verifierWits = await Promise.all( - witnessUrls.map(async (url, i) => { - const result = await resolveOobi( - verifierClient, - url + '/oobi', - `witness-${i}` - ); - return result.i; - }) - ); - // Create two identifiers, one for each client const issuerPrefix = await createIdentifier( issuerClient, 'issuer', - issuerWits + witnessIds ); const holderPrefix = await createIdentifier( holderClient, 'holder', - holderWits + witnessIds ); const verifierPrefix = await createIdentifier( verifierClient, 'verifier', - verifierWits + witnessIds ); // Exchange OOBIs @@ -329,7 +227,7 @@ test( }, }); - const grantNotification = await waitForNotification( + const grantNotifications = await waitForNotifications( holderClient, '/exn/ipex/grant' ); @@ -337,13 +235,13 @@ test( await admitCredential( holderClient, 'holder', - grantNotification.a.d!, + grantNotifications[0].a.d!, issuerPrefix ); - await holderClient.notifications().mark(grantNotification.i); + await holderClient.notifications().mark(grantNotifications[0].i); - const c = await wait(async () => { + const c = await retry(async () => { const creds = await holderClient.credentials().list(); assert(creds.length >= 1); return creds[0]; @@ -371,25 +269,27 @@ test( cred['issatc'] ); - const verifierGrantNotification = await waitForNotification( + const verifierGrantNotifications = await waitForNotifications( verifierClient, '/exn/ipex/grant' ); console.log( - `Notifcation of grant received by verifier ${verifierGrantNotification.a.d}` + `Notifcation of grant received by verifier ${verifierGrantNotifications[0].a.d}` ); await admitCredential( verifierClient, 'verifier', - verifierGrantNotification.a.d!, + verifierGrantNotifications[0].a.d!, holderPrefix ); - await verifierClient.notifications().mark(verifierGrantNotification.i); + await verifierClient + .notifications() + .mark(verifierGrantNotifications[0].i); console.log('Checking for credential'); - const p = await wait(async () => { + const p = await retry(async () => { const creds = await verifierClient.credentials().list(); assert(creds.length >= 1); return creds[0]; diff --git a/examples/integration-scripts/utils/retry.ts b/examples/integration-scripts/utils/retry.ts new file mode 100644 index 00000000..4af84450 --- /dev/null +++ b/examples/integration-scripts/utils/retry.ts @@ -0,0 +1,53 @@ +import { setTimeout } from 'timers/promises'; + +export interface RetryOptions { + maxSleep?: number; + minSleep?: number; + maxRetries?: number; + timeout?: number; + signal?: AbortSignal; +} + +export async function retry( + fn: () => Promise, + options: RetryOptions = {} +): Promise { + const { + maxSleep = 1000, + minSleep = 10, + maxRetries, + timeout = 10000, + } = options; + + const increaseFactor = 50; + + let retries = 0; + let cause: Error | null = null; + const start = Date.now(); + + while ( + (options.signal === undefined || options.signal.aborted === false) && + Date.now() - start < timeout && + (maxRetries === undefined || retries < maxRetries) + ) { + try { + const result = await fn(); + return result; + } catch (err) { + cause = err as Error; + const delay = Math.max( + minSleep, + Math.min(maxSleep, 2 ** retries * increaseFactor) + ); + retries++; + await setTimeout(delay, undefined, { signal: options.signal }); + } + } + + if (!cause) { + cause = new Error(`Failed after ${retries} attempts`); + } + + Object.assign(cause, { retries, maxAttempts: maxRetries }); + throw cause; +} diff --git a/examples/integration-scripts/utils/test-util.ts b/examples/integration-scripts/utils/test-util.ts index a7952798..354bf2ba 100644 --- a/examples/integration-scripts/utils/test-util.ts +++ b/examples/integration-scripts/utils/test-util.ts @@ -1,4 +1,5 @@ import { Operation, SignifyClient } from 'signify-ts'; +import { RetryOptions, retry } from './retry'; export function sleep(ms: number): Promise { return new Promise((resolve) => { @@ -9,18 +10,20 @@ export function sleep(ms: number): Promise { /** * Poll for operation to become completed */ -export async function waitOperation( +export async function waitOperation( client: SignifyClient, op: Operation, - retries: number = 10 + options: RetryOptions = {} ): Promise> { - const WAIT = 500; // 0.5 seconds - while (retries-- > 0) { + return retry(async () => { op = await client.operations().get(op.name); - if (op.done === true) return op; - await sleep(WAIT); - } - throw new Error(`Timeout: operation ${op.name}`); + + if (op.done !== true) { + throw new Error(`Operation ${op.name} not done`); + } + + return op; + }, options); } export async function resolveOobi( @@ -32,36 +35,31 @@ export async function resolveOobi( await waitOperation(client, op); } -export interface WaitOptions { - timeout?: number; +export interface Notification { + i: string; + dt: string; + r: boolean; + a: { r: string; d?: string; m?: string }; } -/** - * Retry fn until timeout, throws the last caught excetion after timeout passed - */ -export async function wait( - fn: () => Promise, - options: WaitOptions = {} -): Promise { - const start = Date.now(); - const timeout = options.timeout ?? 10000; - let error: Error | null = null; +export async function waitForNotifications( + client: SignifyClient, + route: string, + options: RetryOptions = {} +): Promise { + return retry(async () => { + const response: { notes: Notification[] } = await client + .notifications() + .list(); + + const notes = response.notes.filter( + (note) => note.a.r === route && note.r === false + ); - while (Date.now() - start < timeout) { - try { - const result = await fn(); - return result; - } catch (err) { - error = err as Error; - if (Date.now() - start < timeout) { - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + if (!notes.length) { + throw new Error(`No notifications with route ${route}`); } - } - if (error) { - throw error; - } else { - throw new Error(`Timeout after ${Date.now() - start}ms`); - } + return notes; + }, options); } diff --git a/examples/integration-scripts/witness.test.ts b/examples/integration-scripts/witness.test.ts index 996d5fdf..b7b39a3e 100644 --- a/examples/integration-scripts/witness.test.ts +++ b/examples/integration-scripts/witness.test.ts @@ -2,6 +2,7 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; +import { resolveOobi, waitOperation } from './utils/test-util'; const WITNESS_AID = 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'; const { url, bootUrl, witnessUrls } = resolveEnvironment(); @@ -27,13 +28,7 @@ test('test witness', async () => { ); // Client 1 resolves witness OOBI - let op1 = await client1 - .oobis() - .resolve(witnessUrls[0] + `/oobi/${WITNESS_AID}`, 'wit'); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await resolveOobi(client1, witnessUrls[0] + `/oobi/${WITNESS_AID}`, 'wit'); console.log('Witness OOBI resolved'); // Client 1 creates AID with 1 witness @@ -41,22 +36,14 @@ test('test witness', async () => { toad: 1, wits: [WITNESS_AID], }); - op1 = await icpResult1.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await waitOperation(client1, await icpResult1.op()); let aid1 = await client1.identifiers().get('aid1'); console.log('AID:', aid1.prefix); assert.equal(aid1.state.b.length, 1); assert.equal(aid1.state.b[0], WITNESS_AID); icpResult1 = await client1.identifiers().rotate('aid1'); - op1 = await icpResult1.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await waitOperation(client1, await icpResult1.op()); aid1 = await client1.identifiers().get('aid1'); assert.equal(aid1.state.b.length, 1); assert.equal(aid1.state.b[0], WITNESS_AID); @@ -65,12 +52,7 @@ test('test witness', async () => { icpResult1 = await client1 .identifiers() .rotate('aid1', { cuts: [WITNESS_AID] }); - - op1 = await icpResult1.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await waitOperation(client1, await icpResult1.op()); aid1 = await client1.identifiers().get('aid1'); assert.equal(aid1.state.b.length, 0); @@ -80,11 +62,7 @@ test('test witness', async () => { .identifiers() .rotate('aid1', { adds: [WITNESS_AID] }); - op1 = await icpResult1.op(); - while (!op1['done']) { - op1 = await client1.operations().get(op1.name); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } + await waitOperation(client1, await icpResult1.op()); aid1 = await client1.identifiers().get('aid1'); assert.equal(aid1.state.b.length, 1); assert.equal(aid1.state.b.length, 1); From 2a95620742a5a28cb1d27468e13a1597b3cc08dd Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 14 Dec 2023 12:07:50 +0100 Subject: [PATCH 147/186] make delegation-multisig.test faster --- .../delegation-multisig.test.ts | 93 ++++++------------- 1 file changed, 30 insertions(+), 63 deletions(-) diff --git a/examples/integration-scripts/delegation-multisig.test.ts b/examples/integration-scripts/delegation-multisig.test.ts index 35042450..a9a9d5b2 100644 --- a/examples/integration-scripts/delegation-multisig.test.ts +++ b/examples/integration-scripts/delegation-multisig.test.ts @@ -1,21 +1,27 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; -import { resolveEnvironment } from './utils/resolve-env'; -import { waitForNotifications, waitOperation } from './utils/test-util'; - -const { url, bootUrl } = resolveEnvironment(); +import { + resolveOobi, + waitForNotifications, + waitOperation, +} from './utils/test-util'; +import { getOrCreateClient } from './utils/test-setup'; test('delegation-multisig', async () => { await signify.ready(); // Boot three clients - const client0 = await bootClient(); - const client1 = await bootClient(); - const client2 = await bootClient(); + const [client0, client1, client2] = await Promise.all([ + getOrCreateClient(), + getOrCreateClient(), + getOrCreateClient(), + ]); // Create four identifiers, one for each client - const aid0 = await createAID(client0, 'delegator'); - const aid1 = await createAID(client1, 'member1'); - const aid2 = await createAID(client2, 'member2'); + const [aid0, aid1, aid2] = await Promise.all([ + createAID(client0, 'delegator'), + createAID(client1, 'member1'), + createAID(client2, 'member2'), + ]); // Exchange OOBIs console.log('Resolving OOBIs'); @@ -23,35 +29,14 @@ test('delegation-multisig', async () => { const oobi1 = await client1.oobis().get('member1', 'agent'); const oobi2 = await client2.oobis().get('member2', 'agent'); - let op1 = await client1.oobis().resolve(oobi0.oobis[0], 'delegator'); - op1 = await waitOperation(client1, op1); - op1 = await client1.oobis().resolve(oobi2.oobis[0], 'member2'); - op1 = await waitOperation(client1, op1); - console.log('Member1 resolved 2 OOBIs'); - - let op2 = await client2.oobis().resolve(oobi0.oobis[0], 'delegator'); - op2 = await waitOperation(client2, op2); - op2 = await client2.oobis().resolve(oobi1.oobis[0], 'member1'); - op2 = await waitOperation(client2, op2); - console.log('Member2 resolved 2 OOBIs'); - - // First member challenge the other members with a random list of words - // List of words should be passed to the other members out of band - // The other members should do the same challenge/response flow, not shown here for brevity - const words = (await client1.challenges().generate(128)).words; - console.log('Member1 generated challenge words:', words); - - await client2.challenges().respond('member2', aid1.prefix, words); - console.log('Member2 responded challenge with signed words'); - - op1 = await client1.challenges().verify('member1', aid2.prefix, words); - op1 = await waitOperation(client1, op1); - console.log('Member1 verified challenge response from member2'); - const exnwords = new signify.Serder(op1.response.exn); - op1 = await client1 - .challenges() - .responded('member1', aid2.prefix, exnwords.ked.d); - console.log('Member1 marked challenge response as accepted'); + await Promise.all([ + resolveOobi(client1, oobi0.oobis[0], 'delegator'), + resolveOobi(client1, oobi2.oobis[0], 'member2'), + resolveOobi(client2, oobi0.oobis[0], 'delegator'), + resolveOobi(client2, oobi1.oobis[0], 'member1'), + ]); + + console.log('Member1 and Member2 resolved 2 OOBIs'); // First member start the creation of a multisig identifier const rstates = [aid1['state'], aid2['state']]; @@ -71,7 +56,7 @@ test('delegation-multisig', async () => { rstates: rstates, delpre: aid0.prefix, }); - op1 = await icpResult1.op(); + const op1 = await icpResult1.op(); let serder = icpResult1.serder; let sigs = icpResult1.sigs; @@ -122,7 +107,7 @@ test('delegation-multisig', async () => { rstates: rstates, delpre: aid0.prefix, }); - op2 = await icpResult2.op(); + const op2 = await icpResult2.op(); serder = icpResult2.serder; sigs = icpResult2.sigs; sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); @@ -164,34 +149,16 @@ test('delegation-multisig', async () => { console.log('Delegator approved delegation'); // Check for completion - op1 = await waitOperation(client1, op1); - op2 = await waitOperation(client2, op2); + await Promise.all([ + waitOperation(client1, op1), + waitOperation(client2, op2), + ]); console.log('Delegated multisig created!'); const aid_delegate = await client1.identifiers().get('multisig'); assert.equal(aid_delegate.prefix, delegatePrefix); }, 30000); -async function bootClient(): Promise { - const bran = signify.randomPasscode(); - const client = new signify.SignifyClient( - url, - bran, - signify.Tier.low, - bootUrl - ); - await client.boot(); - await client.connect(); - const state = await client.state(); - console.log( - 'Client AID:', - state.controller.state.i, - 'Agent AID: ', - state.agent.i - ); - return client; -} - async function createAID(client: signify.SignifyClient, name: string) { const icpResult1 = await client.identifiers().create(name, { toad: 3, From 6673673444bbae6c90a7059881eb01ae0b896b79 Mon Sep 17 00:00:00 2001 From: lenkan Date: Tue, 19 Dec 2023 11:35:34 +0100 Subject: [PATCH 148/186] refactor credential tests --- .../integration-scripts/credentials.test.ts | 724 +++++++++++------- .../request-present.test.ts | 218 ------ .../single-issuer-chained-credential.test.ts | 240 ------ .../single-issuer-holder.test.ts | 301 -------- .../integration-scripts/utils/test-step.ts | 28 + 5 files changed, 456 insertions(+), 1055 deletions(-) delete mode 100644 examples/integration-scripts/request-present.test.ts delete mode 100644 examples/integration-scripts/single-issuer-chained-credential.test.ts delete mode 100644 examples/integration-scripts/single-issuer-holder.test.ts create mode 100644 examples/integration-scripts/utils/test-step.ts diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index 65b521c1..d0e52c7a 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -1,5 +1,5 @@ import { strict as assert } from 'assert'; -import signify from 'signify-ts'; +import signify, { Saider, Serder, SignifyClient } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; import { resolveOobi, @@ -7,9 +7,12 @@ import { waitOperation, } from './utils/test-util'; import { retry } from './utils/retry'; -const { url, bootUrl, vleiServerUrl, witnessIds } = resolveEnvironment(); +import { getOrCreateClient } from './utils/test-setup'; +import { randomUUID } from 'crypto'; +import { step } from './utils/test-step'; + +const { vleiServerUrl, witnessIds } = resolveEnvironment(); -const boot_url = bootUrl; const WAN_WITNESS_AID = witnessIds[0]; const WIL_WITNESS_AID = witnessIds[1]; const WES_WITNESS_AID = witnessIds[2]; @@ -20,318 +23,447 @@ const KLI_WITNESS_DEMO_PREFIXES = [ WES_WITNESS_AID, ]; -// Credential Schema discovery through credential schema OOBI resolution -const qviSchemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const QVI_SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const LE_SCHEMA_SAID = 'ENPXp1vQzRF6JwIuS-mp2U8Uf1MoADoP_GqQ62VsDZWY'; const vLEIServerHostUrl = `${vleiServerUrl}/oobi`; -const schemaOobiUrl = `${vLEIServerHostUrl}/${qviSchemaSAID}`; - -// Boots an agent and connects to it, returning the connected SignifyClient -async function bootAndConnect( - bran: string = signify.randomPasscode(), - agentUrl: string = url, - bootUrl: string = boot_url, - tier: signify.Tier = signify.Tier.low -) { - const client = new signify.SignifyClient(agentUrl, bran, tier, bootUrl); - await client.boot(); - await client.connect(); - return client; -} +const QVI_SCHEMA_URL = `${vLEIServerHostUrl}/${QVI_SCHEMA_SAID}`; +const LE_SCHEMA_URL = `${vLEIServerHostUrl}/${LE_SCHEMA_SAID}`; -// utility function for making a correctly formatted timestamp function createTimestamp() { return new Date().toISOString().replace('Z', '000+00:00'); } -test('credentials', async () => { - await signify.ready(); - // Boot three clients one each for issuer, holder, and verifier - const issuerClient = await bootAndConnect(signify.randomPasscode()); - const holderClient = await bootAndConnect(signify.randomPasscode()); - const verifierClient = await bootAndConnect(signify.randomPasscode()); - - const state1 = await issuerClient.state(); - const state2 = await holderClient.state(); - const state3 = await verifierClient.state(); - console.log( - 'Issuer connected.\n\tHolder Controller AID:', - state1.controller.state.i, - '\n\tIssuer Agent AID: ', - state1.agent.i - ); - console.log( - 'Holder connected.\n\tHolder Controller AID:', - state2.controller.state.i, - '\n\tHolder Agent AID: ', - state2.agent.i - ); - console.log( - 'Verifier connected.\n\tVerifier Controller AID:', - state3.controller.state.i, - '\n\tVerifier Agent AID: ', - state3.agent.i - ); +async function createAid(client: signify.SignifyClient, name: string) { + const verifierIcpRes = await client.identifiers().create(name, { + toad: 3, + wits: [...KLI_WITNESS_DEMO_PREFIXES], + }); + await waitOperation(client, await verifierIcpRes.op()); + const hab = await client.identifiers().get(name); + await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); + return hab; +} + +test('single signature credentials', async () => { + const [issuerClient, holderClient, verifierClient] = await Promise.all([ + getOrCreateClient(), + getOrCreateClient(), + getOrCreateClient(), + ]); + + const [issuerAid, holderAid, verifierAid] = await Promise.all([ + createAid(issuerClient, 'issuer'), + createAid(holderClient, 'holder'), + createAid(verifierClient, 'verifier'), + ]); + + await step('Resolve oobis', async () => { + const [issAgentOOBI, holderAgentOOBI, vfyAgentOOBI] = await Promise.all( + [ + issuerClient.oobis().get(issuerAid.name, 'agent'), + holderClient.oobis().get(holderAid.name, 'agent'), + verifierClient.oobis().get(verifierAid.name, 'agent'), + ] + ); + + assert(issAgentOOBI.oobis.length >= 1); + assert(holderAgentOOBI.oobis.length >= 1); + assert(vfyAgentOOBI.oobis.length >= 1); + + await Promise.all([ + resolveOobi(issuerClient, QVI_SCHEMA_URL, 'schema'), + resolveOobi(holderClient, QVI_SCHEMA_URL, 'schema'), + resolveOobi(verifierClient, QVI_SCHEMA_URL, 'schema'), + resolveOobi(issuerClient, LE_SCHEMA_URL, 'le-schema'), + resolveOobi(holderClient, LE_SCHEMA_URL, 'le-schema'), + resolveOobi(verifierClient, LE_SCHEMA_URL, 'le-schema'), + resolveOobi(issuerClient, holderAgentOOBI.oobis[0], holderAid.name), + resolveOobi(issuerClient, vfyAgentOOBI.oobis[0], verifierAid.name), + resolveOobi(holderClient, issAgentOOBI.oobis[0], issuerAid.name), + resolveOobi(holderClient, vfyAgentOOBI.oobis[0], verifierAid.name), + resolveOobi(verifierClient, issAgentOOBI.oobis[0], issuerAid.name), + resolveOobi( + verifierClient, + holderAgentOOBI.oobis[0], + holderAid.name + ), + ]); + }); + + const registry = await step('Create registry', async () => { + const registryName = 'vLEI-test-registry'; + const regResult = await issuerClient + .registries() + .create({ name: issuerAid.name, registryName: registryName }); + + await waitOperation(issuerClient, await regResult.op()); + const registries = await issuerClient.registries().list(issuerAid.name); + const registry: { name: string; regk: string } = registries[0]; + assert.equal(registries.length, 1); + assert.equal(registry.name, registryName); + return registry; + }); + + await step('issuer can get schemas', async () => { + const issuerQviSchema = await issuerClient + .schemas() + .get(QVI_SCHEMA_SAID); + + assert.equal(issuerQviSchema.$id, QVI_SCHEMA_SAID); + + const issuerLeSchema = await issuerClient.schemas().get(LE_SCHEMA_SAID); + + assert.equal(issuerLeSchema.$id, LE_SCHEMA_SAID); + }); + + await step('holder can list schemas', async () => { + const holderSchemas = await holderClient.schemas().list(); + assert.equal(holderSchemas.length, 2); + }); + + const qviCredentialId = await step('create QVI credential', async () => { + const vcdata = { + LEI: '5493001KJTIIGC8Y1R17', + }; + + const issResult = await issuerClient.credentials().issue({ + issuerName: issuerAid.name, + registryId: registry.regk, + schemaId: QVI_SCHEMA_SAID, + recipient: holderAid.prefix, + data: vcdata, + }); + + await waitOperation(issuerClient, issResult.op); + return issResult.acdc.ked.d as string; + }); + + await step('issuer list credentials', async () => { + const issuerCredentials = await issuerClient.credentials().list(); + assert(issuerCredentials.length >= 1); + assert.equal(issuerCredentials[0].sad.s, QVI_SCHEMA_SAID); + assert.equal(issuerCredentials[0].sad.i, issuerAid.prefix); + assert.equal(issuerCredentials[0].status.s, '0'); + }); - const issuerAidName = 'issuer'; - const holderAidName = 'holder'; - const verifierAidName = 'verifier'; + await step('issuer list credentials with filter', async () => { + expect( + await issuerClient + .credentials() + .list({ filter: { '-i': issuerAid.prefix } }) + ).toHaveLength(1); + + expect( + await issuerClient + .credentials() + .list({ filter: { '-s': QVI_SCHEMA_SAID } }) + ).toHaveLength(1); + + expect( + await issuerClient + .credentials() + .list({ filter: { '-a-i': holderAid.prefix } }) + ).toHaveLength(1); + + expect( + await issuerClient.credentials().list({ + filter: { + '-i': issuerAid.prefix, + '-s': QVI_SCHEMA_SAID, + '-a-i': holderAid.prefix, + }, + }) + ).toHaveLength(1); + + expect( + await issuerClient.credentials().list({ + filter: { + '-i': randomUUID(), + '-s': QVI_SCHEMA_SAID, + '-a-i': holderAid.prefix, + }, + }) + ).toHaveLength(0); + }); + + await step('issuer get credential by id', async () => { + const issuerCredential = await issuerClient + .credentials() + .get(issuerAid.name, qviCredentialId); + assert.equal(issuerCredential.sad.s, QVI_SCHEMA_SAID); + assert.equal(issuerCredential.sad.i, issuerAid.prefix); + assert.equal(issuerCredential.status.s, '0'); + }); - // Create two identifiers, one for each client - const issuerIcpRes = await issuerClient - .identifiers() - .create(issuerAidName, { - toad: 3, - wits: [...KLI_WITNESS_DEMO_PREFIXES], + await step('issuer IPEX grant', async () => { + const dt = createTimestamp(); + const issuerCredential = await issuerClient + .credentials() + .get(issuerAid.name, qviCredentialId); + assert(issuerCredential !== undefined); + + const [grant, gsigs, gend] = await issuerClient.ipex().grant({ + senderName: issuerAid.name, + acdc: new Serder(issuerCredential.sad), + anc: new Serder(issuerCredential.anc), + iss: new Serder(issuerCredential.iss), + ancAttachment: issuerCredential.ancAttachment, + recipient: holderAid.prefix, + datetime: dt, }); - await waitOperation(issuerClient, await issuerIcpRes.op()); - const issAidResp = await issuerClient.identifiers().get(issuerAidName); - const issuerAID = issAidResp.prefix; - await issuerClient - .identifiers() - .addEndRole(issuerAidName, 'agent', issuerClient!.agent!.pre); - console.log("Issuer's AID:", issuerAID); - - const holderIcpRes = await holderClient - .identifiers() - .create(holderAidName, { - toad: 3, - wits: [...KLI_WITNESS_DEMO_PREFIXES], + + await issuerClient + .ipex() + .submitGrant(issuerAid.name, grant, gsigs, gend, [ + holderAid.prefix, + ]); + }); + + await step('holder IPEX admit', async () => { + const holderNotifications = await waitForNotifications( + holderClient, + '/exn/ipex/grant' + ); + const grantNotification = holderNotifications[0]; // should only have one notification right now + + const [admit, sigs, aend] = await holderClient + .ipex() + .admit( + holderAid.name, + '', + grantNotification.a.d!, + createTimestamp() + ); + await holderClient + .ipex() + .submitAdmit(holderAid.name, admit, sigs, aend, [issuerAid.prefix]); + + await holderClient.notifications().mark(grantNotification.i); + }); + + await step('holder has credential', async () => { + const holderCredential = await retry(async () => { + const result = await holderClient + .credentials() + .get(holderAid.name, qviCredentialId); + assert(result !== undefined); + return result; }); - await waitOperation(holderClient, await holderIcpRes.op()); - const hldAidResp = await holderClient.identifiers().get(holderAidName); - const holderAID = hldAidResp.prefix; - await holderClient - .identifiers() - .addEndRole(holderAidName, 'agent', holderClient!.agent!.pre); - console.log("Recipient's AID:", holderAID); - - const verifierIcpRes = await verifierClient - .identifiers() - .create(verifierAidName, { - toad: 3, - wits: [...KLI_WITNESS_DEMO_PREFIXES], + assert.equal(holderCredential.sad.s, QVI_SCHEMA_SAID); + assert.equal(holderCredential.sad.i, issuerAid.prefix); + assert.equal(holderCredential.status.s, '0'); + assert(holderCredential.atc !== undefined); + }); + + await step('holder IPEX present', async () => { + const holderCredential = await holderClient + .credentials() + .get(holderAid.name, qviCredentialId); + + const [grant2, gsigs2, gend2] = await holderClient.ipex().grant({ + senderName: holderAid.name, + recipient: verifierAid.prefix, + acdc: new Serder(holderCredential.sad), + anc: new Serder(holderCredential.anc), + iss: new Serder(holderCredential.iss), + acdcAttachment: holderCredential.atc, + ancAttachment: holderCredential.ancatc, + issAttachment: holderCredential.issAtc, + datetime: createTimestamp(), }); - await waitOperation(verifierClient, await verifierIcpRes.op()); - const vfyAidResp = await verifierClient.identifiers().get(verifierAidName); - const verifierAID = vfyAidResp.prefix; - await verifierClient - .identifiers() - .addEndRole(verifierAidName, 'agent', verifierClient!.agent!.pre); - console.log("Verifier's AID:", verifierAID); - - const schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; - - // OOBIs for credential schema and agent discovery - console.log('Resolving Schema and Agent OOBIs...'); - - console.log(`Resolving schema OOBIs with ${schemaOobiUrl}`); - await resolveOobi(issuerClient, schemaOobiUrl, 'schema'); - await resolveOobi(holderClient, schemaOobiUrl, 'schema'); - await resolveOobi(verifierClient, schemaOobiUrl, 'schema'); - - const issSchema = await issuerClient.schemas().get(schemaSAID); - assert.equal(issSchema.$id, schemaSAID); - const hldSchemas = await holderClient.schemas().list(); - assert.equal(hldSchemas.length, 1); - assert.equal(hldSchemas[0].$id, schemaSAID); - console.log('Resolved QVI Schema OOBI for issuer, holder, and verifier'); - - // Agent discovery through OOBI exchange between issuer, holder, and verifier - console.log('Getting Agent OOBIs for issuer, holder, and verifier'); - const issAgentOOBI = await issuerClient.oobis().get(issuerAidName, 'agent'); - const hldAgentOOBI = await holderClient.oobis().get(holderAidName, 'agent'); - const vfyAgentOOBI = await verifierClient - .oobis() - .get(verifierAidName, 'agent'); - - // issuer -> holder, verifier - await resolveOobi(issuerClient, hldAgentOOBI.oobis[0], holderAidName); - await resolveOobi(issuerClient, vfyAgentOOBI.oobis[0], verifierAidName); - console.log('Issuer resolved 2 OOBIs: [holder, verifier]'); - - // holder -> issuer, verifier - await resolveOobi(holderClient, issAgentOOBI.oobis[0], issuerAidName); - await resolveOobi(holderClient, vfyAgentOOBI.oobis[0], verifierAidName); - console.log('Holder resolved 2 OOBIs: [issuer, verifier]'); - - // verifier -> issuer, holder - await resolveOobi(verifierClient, issAgentOOBI.oobis[0], issuerAidName); - await resolveOobi(verifierClient, hldAgentOOBI.oobis[0], holderAidName); - console.log('Verifier resolved 2 OOBIs: [issuer, holder]'); - - // Create registry for issuer - const registryName = 'vLEI-test-registry'; - const regResult = await issuerClient - .registries() - .create({ name: issuerAidName, registryName: registryName }); - await waitOperation(issuerClient, await regResult.op()); - const registries = await issuerClient.registries().list(issuerAidName); - const registry = registries[0]; - assert.equal(registries.length, 1); - assert.equal(registry.name, registryName); - console.log(`Registry created: ${registry.name}`); - - // - // IPEX - // - - // Issue credential from the issuer's perspective - create credential, - // then perform IPEX grant as EXN message - const vcdata = { - LEI: '5493001KJTIIGC8Y1R17', - }; - const issResult = await issuerClient.credentials().issue({ - issuerName: issuerAidName, - registryId: registry.regk, - schemaId: schemaSAID, - recipient: holderAID, - data: vcdata, + await holderClient + .exchanges() + .sendFromEvents( + holderAid.name, + 'presentation', + grant2, + gsigs2, + gend2, + [verifierAid.prefix] + ); }); - await waitOperation(issuerClient, issResult.op); - let issCreds = await issuerClient.credentials().list(); - assert.equal(issCreds.length, 1); - assert.equal(issCreds[0].sad.s, schemaSAID); - assert.equal(issCreds[0].sad.i, issuerAID); - assert.equal(issCreds[0].status.s, '0'); // 0 = issued - console.log( - `Issuer: credential created with data: ${JSON.stringify(vcdata)}` - ); - // prepare IPEX GRANT message - const dt = createTimestamp(); // grant datetime - const [grant, gsigs, gend] = await issuerClient.ipex().grant({ - senderName: issuerAidName, - acdc: issResult.acdc, - anc: issResult.anc, - iss: issResult.iss, - recipient: holderAID, - datetime: dt, + await step('verifier receives IPEX grant', async () => { + const verifierNotifications = await waitForNotifications( + verifierClient, + '/exn/ipex/grant' + ); + + const verifierGrantNote = verifierNotifications[0]; + + const [admit3, sigs3, aend3] = await verifierClient + .ipex() + .admit( + verifierAid.name, + '', + verifierGrantNote.a.d!, + createTimestamp() + ); + + await verifierClient + .ipex() + .submitAdmit(verifierAid.name, admit3, sigs3, aend3, [ + holderAid.prefix, + ]); + + await verifierClient.notifications().mark(verifierGrantNote.i); + + const verifierCredential = await retry(async () => + verifierClient.credentials().get(verifierAid.name, qviCredentialId) + ); + + assert.equal(verifierCredential.sad.s, QVI_SCHEMA_SAID); + assert.equal(verifierCredential.sad.i, issuerAid.prefix); + assert.equal(verifierCredential.status.s, '0'); // 0 = issued }); - await issuerClient - .exchanges() - .sendFromEvents(issuerAidName, 'credential', grant, gsigs, gend, [ - holderAID, + + const legalEntityClient: SignifyClient = await getOrCreateClient(); + const legalEntityAid: { name: string; prefix: string } = await createAid( + legalEntityClient, + 'legal-entity' + ); + + await step('resolve oobis', async () => { + const [holderAgentOOBI, legalEntityOOBI] = await Promise.all([ + holderClient.oobis().get(holderAid.name, 'agent'), + legalEntityClient.oobis().get(legalEntityAid.name, 'agent'), + ]); + + assert(holderAgentOOBI.oobis.length >= 1); + assert(legalEntityOOBI.oobis.length >= 1); + + await Promise.all([ + resolveOobi(legalEntityClient, QVI_SCHEMA_URL, 'schema'), + resolveOobi(legalEntityClient, LE_SCHEMA_URL, 'le-schema'), + resolveOobi( + holderClient, + legalEntityOOBI.oobis[0], + legalEntityAid.name + ), + resolveOobi( + legalEntityClient, + holderAgentOOBI.oobis[0], + holderAid.name + ), ]); - console.log('Issuer: IPEX GRANT sent to holder'); + }); + + const holderRegistry: { regk: string } = await step( + 'holder create registry for LE credential', + async () => { + const registryName = 'vLEI-test-registry'; + const regResult = await holderClient + .registries() + .create({ name: holderAid.name, registryName: registryName }); + + await waitOperation(holderClient, await regResult.op()); + const registries = await holderClient + .registries() + .list(holderAid.name); + assert(registries.length >= 1); + return registries[0]; + } + ); - // from the holder's perspective - wait for GRANT notification, - // perform admit, then mark GRANT notification as read - const holderNotifications = await waitForNotifications( - holderClient, - '/exn/ipex/grant' + const leCredentialId = await step( + 'holder create LE (chained) credential', + async () => { + const qviCredential = await holderClient + .credentials() + .get(holderAid.name, qviCredentialId); + + const result = await holderClient.credentials().issue({ + issuerName: holderAid.name, + recipient: legalEntityAid.prefix, + registryId: holderRegistry.regk, + schemaId: LE_SCHEMA_SAID, + data: { + LEI: '5493001KJTIIGC8Y1R17', + }, + rules: Saider.saidify({ + d: '', + usageDisclaimer: { + l: 'Usage of a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, does not assert that the Legal Entity is trustworthy, honest, reputable in its business dealings, safe to do business with, or compliant with any laws or that an implied or expressly intended purpose will be fulfilled.', + }, + issuanceDisclaimer: { + l: 'All information in a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, is accurate as of the date the validation process was complete. The vLEI Credential has been issued to the legal entity or person named in the vLEI Credential as the subject; and the qualified vLEI Issuer exercised reasonable care to perform the validation process set forth in the vLEI Ecosystem Governance Framework.', + }, + })[1], + source: Saider.saidify({ + d: '', + qvi: { + n: qviCredential.sad.d, + s: qviCredential.sad.s, + }, + })[1], + }); + + await waitOperation(holderClient, result.op); + return result.acdc.ked.d; + } ); - const grantNotification = holderNotifications[0]; // should only have one notification right now - - // Note: Credentials are no longer automatically accepted into a wallet. - // Pending an implementation in KERIA there will be the ability to - // auto-add credentials by automatically admitting credentials. - const [admit, sigs, aend] = await holderClient - .ipex() - .admit(holderAidName, '', grantNotification.a.d!, createTimestamp()); - await holderClient - .ipex() - .submitAdmit(holderAidName, admit, sigs, aend, [issuerAID]); - console.log('Holder: IPEX ADMIT sent'); - - await holderClient.notifications().mark(grantNotification.i); - console.log('Holder: IPEX GRANT notification marked'); - - // list credentials to show new credential received through IPEX GRANT+ADMIT - const holderCreds = await retry(async () => { - const result = await holderClient.credentials().list(); - expect(result.length).toBeGreaterThanOrEqual(1); - return result; + + await step('LE credential IPEX grant', async () => { + const dt = createTimestamp(); + const leCredential = await holderClient + .credentials() + .get(holderAid.name, leCredentialId); + assert(leCredential !== undefined); + + const [grant, gsigs, gend] = await holderClient.ipex().grant({ + senderName: holderAid.name, + acdc: new Serder(leCredential.sad), + anc: new Serder(leCredential.anc), + iss: new Serder(leCredential.iss), + ancAttachment: leCredential.ancAttachment, + recipient: legalEntityAid.prefix, + datetime: dt, + }); + + await holderClient + .ipex() + .submitGrant(holderAid.name, grant, gsigs, gend, [ + legalEntityAid.prefix, + ]); }); - const hldVleiAcdc = holderCreds[0]; - assert.equal(holderCreds.length, 1); - assert.equal(hldVleiAcdc.sad.s, schemaSAID); - assert.equal(hldVleiAcdc.sad.i, issuerAID); - assert.equal(hldVleiAcdc.status.s, '0'); // 0 = issued - console.log('Credential received by recipient'); - - // Present credential - const [grant2, gsigs2, gend2] = await holderClient.ipex().grant({ - senderName: holderAidName, - recipient: verifierAID, - acdc: issResult.acdc, - anc: issResult.anc, - iss: issResult.iss, - datetime: createTimestamp(), + + await step('Legal Entity IPEX admit', async () => { + const notifications = await waitForNotifications( + legalEntityClient, + '/exn/ipex/grant' + ); + const grantNotification = notifications[0]; + + const [admit, sigs, aend] = await legalEntityClient + .ipex() + .admit( + legalEntityAid.name, + '', + grantNotification.a.d!, + createTimestamp() + ); + + await legalEntityClient + .ipex() + .submitAdmit(legalEntityAid.name, admit, sigs, aend, [ + holderAid.prefix, + ]); + + await legalEntityClient.notifications().mark(grantNotification.i); }); - await holderClient - .exchanges() - .sendFromEvents(holderAidName, 'presentation', grant2, gsigs2, gend2, [ - verifierAID, - ]); - console.log('Holder: Grant message sent for presentation'); - // Verifier check issued credential - const verifierNotifications = await waitForNotifications( - verifierClient, - '/exn/ipex/grant' - ); - const verifierGrantNote = verifierNotifications[0]; - - const [admit3, sigs3, aend3] = await verifierClient - .ipex() - .admit(verifierAidName, '', verifierGrantNote.a.d!, createTimestamp()); - await verifierClient - .ipex() - .submitAdmit(verifierAidName, admit3, sigs3, aend3, [holderAID]); - console.log('Verifier: Admit sent for presentation'); - - await verifierClient.notifications().mark(verifierGrantNote.i); - console.log('Verifier: Notification marked for presentation'); - - // list credentials for verifier - const verifierCreds = await retry(async () => { - const result = await verifierClient.credentials().list(); - expect(result.length).toBeGreaterThanOrEqual(1); - return result; + await step('Legal Entity has chained credential', async () => { + const legalEntityCredential = await retry(async () => + legalEntityClient + .credentials() + .get(legalEntityAid.name, leCredentialId) + ); + + assert.equal(legalEntityCredential.sad.s, LE_SCHEMA_SAID); + assert.equal(legalEntityCredential.sad.i, holderAid.prefix); + assert.equal(legalEntityCredential.sad.a.i, legalEntityAid.prefix); + assert.equal(legalEntityCredential.status.s, '0'); + assert.equal(legalEntityCredential.chains[0].sad.d, qviCredentialId); + assert(legalEntityCredential.atc !== undefined); }); - assert.equal(verifierCreds.length, 1); - assert.equal(verifierCreds[0].sad.s, schemaSAID); - assert.equal(verifierCreds[0].sad.i, issuerAID); - assert.equal(verifierCreds[0].status.s, '0'); // 0 = issued - console.log('Credential presented and received by verifier'); - - // Revoke credential - const revokeOperation = await issuerClient - .credentials() - .revoke(issuerAidName, issCreds[0].sad.d); - await waitOperation(issuerClient, revokeOperation); - issCreds = await issuerClient.credentials().list(); - const issVleiAcdc = issCreds[0]; - assert.equal(issCreds.length, 1); - assert.equal(issVleiAcdc.sad.s, schemaSAID); - assert.equal(issVleiAcdc.sad.i, issuerAID); - assert.equal(issVleiAcdc.status.s, '1'); // 1 = revoked - console.log('Issuer Credential revoked'); - - // Recipient check revoked credential - // let revoked = false - // while (!revoked) { - // let cred2 = await client2.credentials().get(holderAidName, creds1[0].sad.d) - // if (cred2.status.s == "1") { - // revoked = true - // } - // await new Promise((resolve) => setTimeout(resolve, 250)); - // } - // assert.equal(creds2.length, 1) - // assert.equal(creds2[0].sad.s, schemaSAID) - // assert.equal(creds2[0].sad.i, aid1.prefix) - // assert.equal(creds2[0].status.s, "1") // 1 = revoked - // console.log("Revocation received by recipient") - - // Present revoked credential - // await client1 - // .credentials() - // .present(issuerAidName, creds1[0].sad.d, verifierAidName, true); - // await new Promise((resolve) => setTimeout(resolve, 5000)); - // creds3 = await client3.credentials().list(verifierAidName); - // assert.equal(creds3.length, 1); - // assert.equal(creds3[0].sad.s, schemaSAID); - // assert.equal(creds3[0].sad.i, aid1.prefix); - // assert.equal(creds3[0].status.s, '1'); // 1 = revoked - // console.log('Revocation presented and received by verifier'); }, 60000); diff --git a/examples/integration-scripts/request-present.test.ts b/examples/integration-scripts/request-present.test.ts deleted file mode 100644 index 54166b3f..00000000 --- a/examples/integration-scripts/request-present.test.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { strict as assert } from 'assert'; -import signify from 'signify-ts'; -import { - resolveOobi, - waitForNotifications, - waitOperation, -} from './utils/test-util'; -import { resolveEnvironment } from './utils/resolve-env'; - -const { url, bootUrl, vleiServerUrl } = resolveEnvironment(); - -const schemaSAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; -const schemaOobi = `${vleiServerUrl}/oobi/${schemaSAID}`; - -// TODO: Marked as skipped because request/present changes -test.skip('request-present', async () => { - await signify.ready(); - // Boot three clients - const bran1 = signify.randomPasscode(); - const bran2 = signify.randomPasscode(); - const bran3 = signify.randomPasscode(); - const client1 = new signify.SignifyClient( - url, - bran1, - signify.Tier.low, - bootUrl - ); - const client2 = new signify.SignifyClient( - url, - bran2, - signify.Tier.low, - bootUrl - ); - const client3 = new signify.SignifyClient( - url, - bran3, - signify.Tier.low, - bootUrl - ); - - const [state1, state2, state3] = await Promise.all([ - client1 - .boot() - .then(() => client1.connect()) - .then(() => client1.state()), - client2 - .boot() - .then(() => client2.connect()) - .then(() => client2.state()), - client3 - .boot() - .then(() => client3.connect()) - .then(() => client3.state()), - ]); - console.log( - 'Client 1 connected. Client AID:', - state1.controller.state.i, - 'Agent AID: ', - state1.agent.i - ); - console.log( - 'Client 2 connected. Client AID:', - state2.controller.state.i, - 'Agent AID: ', - state2.agent.i - ); - console.log( - 'Client 3 connected. Client AID:', - state3.controller.state.i, - 'Agent AID: ', - state3.agent.i - ); - - // Create two identifiers, one for each client - const op1 = await client1.identifiers().create('issuer', { - toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], - }); - await waitOperation(client1, await op1.op()); - const aid1 = await client1.identifiers().get('issuer'); - await client1 - .identifiers() - .addEndRole('issuer', 'agent', client1!.agent!.pre); - console.log("Issuer's AID:", aid1.prefix); - - const op2 = await client2.identifiers().create('recipient', { - toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], - }); - await waitOperation(client2, await op2.op()); - const aid2 = await client2.identifiers().get('recipient'); - await client2 - .identifiers() - .addEndRole('recipient', 'agent', client2!.agent!.pre); - console.log("Recipient's AID:", aid2.prefix); - - const op3 = await client3.identifiers().create('verifier', { - toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], - }); - await waitOperation(client3, await op3.op()); - - const aid3 = await client3.identifiers().get('verifier'); - await client3 - .identifiers() - .addEndRole('verifier', 'agent', client3!.agent!.pre); - console.log("Verifier's AID:", aid3.prefix); - - // Exchenge OOBIs - console.log('Resolving OOBIs...'); - const [oobi1, oobi2, oobi3] = await Promise.all([ - client1.oobis().get('issuer', 'agent'), - client2.oobis().get('recipient', 'agent'), - client3.oobis().get('verifier', 'agent'), - ]); - - await Promise.all([ - resolveOobi(client1, oobi2.oobis[0], 'recipient'), - resolveOobi(client1, oobi3.oobis[0], 'verifier'), - resolveOobi(client1, schemaOobi, 'schema'), - ]); - - console.log('Issuer resolved 3 OOBIs'); - - await Promise.all([ - resolveOobi(client2, oobi1.oobis[0], 'issuer'), - resolveOobi(client2, oobi3.oobis[0], 'verifier'), - resolveOobi(client2, schemaOobi, 'schema'), - ]); - console.log('Recipient resolved 3 OOBIs'); - - await Promise.all([ - resolveOobi(client3, oobi1.oobis[0], 'issuer'), - resolveOobi(client3, oobi2.oobis[0], 'recipient'), - resolveOobi(client3, schemaOobi, 'schema'), - ]); - console.log('Verifier resolved 3 OOBIs'); - - // Create registry for issuer - const vcpResult = await client1 - .registries() - .create({ name: 'issuer', registryName: 'vLEI' }); - await waitOperation(client1, await vcpResult.op()); - const registries = await client1.registries().list('issuer'); - assert.equal(registries.length, 1); - assert.equal(registries[0].name, 'vLEI'); - const schema = await client1.schemas().get(schemaSAID); - assert.equal(schema.$id, schemaSAID); - const schemas = await client2.schemas().list(); - assert.equal(schemas.length, 1); - assert.equal(schemas[0].$id, schemaSAID); - console.log('Registry created'); - - // Issue credential - const vcdata = { - LEI: '5493001KJTIIGC8Y1R17', - }; - const credRes = await client1.credentials().issue({ - issuerName: 'issuer', - registryId: registries[0].regk, - schemaId: schemaSAID, - recipient: aid2.prefix, - data: vcdata, - }); - await waitOperation(client1, credRes.op); - - const creds1 = await client1.credentials().list(); - assert.equal(creds1.length, 1); - assert.equal(creds1[0].sad.s, schemaSAID); - assert.equal(creds1[0].sad.i, aid1.prefix); - assert.equal(creds1[0].status.s, '0'); // 0 = issued - console.log('Credential issued'); - - // Recipient check issued credential - const creds2 = await client2.credentials().list(); - assert.equal(creds2.length, 1); - assert.equal(creds2[0].sad.s, schemaSAID); - assert.equal(creds2[0].sad.i, aid1.prefix); - assert.equal(creds2[0].status.s, '0'); // 0 = issued - console.log('Credential received by recipient'); - - // Verifier request credential to recipient - await client3.credentials().request('verifier', aid2.prefix, schemaSAID); - - // Recipient checks for a presentation request notification - const notes2 = await waitForNotifications(client2, '/presentation/request'); - await Promise.all(notes2.map((n) => client2.notifications().mark(n.i))); - - // Recipient present credential to verifier - await client1 - .credentials() - .present('issuer', creds1[0].sad.d, 'verifier', true); - - // Verifier checks for a presentation notification - const notes3 = await waitForNotifications(client3, '/presentation'); - await Promise.all(notes3.map((n) => client3.notifications().mark(n.i))); - - const creds3 = await client3 - .credentials() - .list({ filter: { '-i': { $eq: aid1.prefix } } }); // filter by issuer - assert.equal(creds3.length, 1); - assert.equal(creds3[0].sad.s, schemaSAID); - assert.equal(creds3[0].sad.i, aid1.prefix); - assert.equal(creds3[0].status.s, '0'); // 0 = issued - assert.equal(creds3[0].sad.a.i, aid2.prefix); // verify that the issuee is the same as the presenter -}, 60000); diff --git a/examples/integration-scripts/single-issuer-chained-credential.test.ts b/examples/integration-scripts/single-issuer-chained-credential.test.ts deleted file mode 100644 index 092f76a1..00000000 --- a/examples/integration-scripts/single-issuer-chained-credential.test.ts +++ /dev/null @@ -1,240 +0,0 @@ -import assert from 'node:assert'; -import signify, { SignifyClient, Saider } from 'signify-ts'; -import { resolveEnvironment } from './utils/resolve-env'; -import { - resolveOobi, - waitForNotifications, - waitOperation, -} from './utils/test-util'; -import { retry } from './utils/retry'; - -const { bootUrl, url, vleiServerUrl } = resolveEnvironment(); - -const QVI_SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; -const LE_SCHEMA_SAID = 'ENPXp1vQzRF6JwIuS-mp2U8Uf1MoADoP_GqQ62VsDZWY'; -const WITNESS_AIDS: string[] = ['BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha']; - -const QVI_SCHEMA_OOBI = `${vleiServerUrl}/oobi/${QVI_SCHEMA_SAID}`; -const LE_SCHEMA_OOBI = `${vleiServerUrl}/oobi/${LE_SCHEMA_SAID}`; - -function createTimestamp() { - const dt = new Date().toISOString().replace('Z', '000+00:00'); - return dt; -} - -async function connect(url: string, bootUrl: string) { - const client = new signify.SignifyClient( - url, - signify.randomPasscode(), - signify.Tier.low, - bootUrl - ); - - await client.boot(); - await client.connect(); - - return client; -} - -async function createIdentifier( - client: signify.SignifyClient, - name: string, - witnesses: string[] -) { - const icpResult1 = await client.identifiers().create(name, { - toad: witnesses.length, - wits: witnesses, - }); - await waitOperation(client, await icpResult1.op()); - const aid = await client.identifiers().get(name); - - if (!client.agent) { - throw new Error('No agent on client'); - } - - await client.identifiers().addEndRole(name, 'agent', client.agent.pre); - - return aid.prefix; -} - -async function getAgentOobi( - client: signify.SignifyClient, - name: string -): Promise { - const result = await client.oobis().get(name, 'agent'); - return result.oobis[0]; -} - -async function createRegistry( - client: SignifyClient, - name: string, - registryName: string -) { - const result = await client.registries().create({ name, registryName }); - await waitOperation(client, await result.op()); - - const registries = await client.registries().list(name); - assert.equal(registries.length, 1); - assert.equal(registries[0].name, registryName); - - return registries[0]; -} - -async function issueCredential( - client: SignifyClient, - name: string, - args: { - registry: string; - schema: string; - recipient: string; - data: Record; - source?: Record; - rules?: Record; - } -) { - const result = await client.credentials().issue({ - issuerName: name, - registryId: args.registry, - schemaId: args.schema, - recipient: args.recipient, - data: args.data, - rules: args.rules && Saider.saidify({ d: '', ...args.rules })[1], - source: args.source && Saider.saidify({ d: '', ...args.source })[1], - }); - - await waitOperation(client, result.op); - - const creds = await client.credentials().list(); - const dt = createTimestamp(); - - const [grant, gsigs, end] = await client.ipex().grant({ - senderName: name, - anc: result.anc, - iss: result.iss, - acdc: result.acdc, - recipient: args.recipient, - datetime: dt, - }); - - await client.ipex().submitGrant(name, grant, gsigs, end, [args.recipient]); - return creds[0]; -} - -async function admitCredential( - client: SignifyClient, - name: string, - said: string, - recipient: string -) { - const dt = createTimestamp(); - - const [admit, sigs, end] = await client.ipex().admit(name, '', said, dt); - - await client.ipex().submitAdmit(name, admit, sigs, end, [recipient]); -} - -test('single issuer chained credentials', async () => { - await signify.ready(); - const issuerClient = await connect(url, bootUrl); - const holderClient = await connect(url, bootUrl); - - await issuerClient.state(); - await holderClient.state(); - const issuerPrefix = await createIdentifier( - issuerClient, - 'issuer', - WITNESS_AIDS - ); - const holderPrefix = await createIdentifier( - holderClient, - 'holder', - WITNESS_AIDS - ); - - // Exchange OOBIs - const issuerOobi = await getAgentOobi(issuerClient, 'issuer'); - const holderOobi = await getAgentOobi(holderClient, 'holder'); - await resolveOobi(issuerClient, holderOobi, 'holder'); - await resolveOobi(issuerClient, QVI_SCHEMA_OOBI, 'qvi-schema'); - await resolveOobi(issuerClient, LE_SCHEMA_OOBI, 'le-schema'); - await resolveOobi(holderClient, issuerOobi, 'issuer'); - await resolveOobi(holderClient, QVI_SCHEMA_OOBI, 'qvi-schema'); - await resolveOobi(holderClient, LE_SCHEMA_OOBI, 'le-schema'); - - await createRegistry(issuerClient, 'issuer', 'vLEI'); - - const registires = await issuerClient.registries().list('issuer'); - const result = await issuerClient.credentials().issue({ - issuerName: 'issuer', - registryId: registires[0].regk, - schemaId: QVI_SCHEMA_SAID, - recipient: issuerPrefix, - data: { - LEI: '5493001KJTIIGC8Y1R17', - }, - }); - - await waitOperation(issuerClient, result.op); - const sourceCredential = await retry(async () => { - const result = await issuerClient.credentials().list(); - assert(result.length >= 1); - return result[0]; - }); - - await issueCredential(issuerClient, 'issuer', { - registry: registires[0].regk, - schema: LE_SCHEMA_SAID, - // schema: QVI_SCHEMA_SAID, - recipient: holderPrefix, - data: { - LEI: '5493001KJTIIGC8Y1R17', - }, - source: { - qvi: { - n: sourceCredential.sad.d, - s: sourceCredential.sad.s, - }, - }, - rules: { - usageDisclaimer: { - l: 'Usage of a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, does not assert that the Legal Entity is trustworthy, honest, reputable in its business dealings, safe to do business with, or compliant with any laws or that an implied or expressly intended purpose will be fulfilled.', - }, - issuanceDisclaimer: { - l: 'All information in a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, is accurate as of the date the validation process was complete. The vLEI Credential has been issued to the legal entity or person named in the vLEI Credential as the subject; and the qualified vLEI Issuer exercised reasonable care to perform the validation process set forth in the vLEI Ecosystem Governance Framework.', - }, - }, - }); - - const grantNotifications = await waitForNotifications( - holderClient, - '/exn/ipex/grant' - ); - - await admitCredential( - holderClient, - 'holder', - grantNotifications[0].a.d!, - issuerPrefix - ); - - await holderClient.notifications().mark(grantNotifications[0].i); - - const holderCredential = await retry(async () => { - const creds = await holderClient.credentials().list(); - const lei = creds.find( - (cred: { schema: { $id: string } }) => - cred.schema.$id === LE_SCHEMA_SAID - ); - - expect(lei).toBeDefined(); - return lei; - }); - - expect(holderCredential).toMatchObject({ - sad: { a: { LEI: '5493001KJTIIGC8Y1R17' } }, - }); - expect(holderCredential.chains).toHaveLength(1); - expect(holderCredential.chains[0]).toMatchObject({ - sad: { a: { LEI: '5493001KJTIIGC8Y1R17' } }, - }); -}, 30000); diff --git a/examples/integration-scripts/single-issuer-holder.test.ts b/examples/integration-scripts/single-issuer-holder.test.ts deleted file mode 100644 index b9b5e877..00000000 --- a/examples/integration-scripts/single-issuer-holder.test.ts +++ /dev/null @@ -1,301 +0,0 @@ -import assert from 'node:assert'; -import signify, { - SignifyClient, - IssueCredentialArgs, - Serder, -} from 'signify-ts'; -import { resolveEnvironment } from './utils/resolve-env'; -import { waitForNotifications, waitOperation } from './utils/test-util'; -import { retry } from './utils/retry'; - -const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; -const { bootUrl, url, vleiServerUrl, witnessIds } = resolveEnvironment(); - -function createTimestamp() { - const dt = new Date().toISOString().replace('Z', '000+00:00'); - return dt; -} - -async function connect(url: string, bootUrl: string) { - const client = new signify.SignifyClient( - url, - signify.randomPasscode(), - signify.Tier.low, - bootUrl - ); - - await client.boot(); - await client.connect(); - - return client; -} - -async function createIdentifier( - client: signify.SignifyClient, - name: string, - witnesses: string[] -) { - const icpResult1 = await client.identifiers().create(name, { - toad: witnesses.length, - wits: witnesses, - }); - const op = await icpResult1.op(); - await waitOperation(client, op); - const aid = await client.identifiers().get(name); - - if (!client.agent) { - throw new Error('No agent on client'); - } - - await client.identifiers().addEndRole(name, 'agent', client.agent.pre); - - return aid.prefix; -} - -async function getAgentOobi( - client: signify.SignifyClient, - name: string -): Promise { - const result = await client.oobis().get(name, 'agent'); - return result.oobis[0]; -} - -async function resolveOobi(client: SignifyClient, oobi: string, alias: string) { - console.log(`Resolve ${alias} -> ${oobi}`); - const op = await client.oobis().resolve(oobi, alias); - const result = await waitOperation<{ i: string }>(client, op); - return result.response; -} - -async function createRegistry( - client: SignifyClient, - name: string, - registryName: string -) { - const result = await client.registries().create({ name, registryName }); - const op = await result.op(); - await waitOperation(client, op); - - const registries = await client.registries().list(name); - assert.equal(registries.length, 1); - assert.equal(registries[0].name, registryName); - - return registries[0]; -} - -async function issueCredential( - client: SignifyClient, - args: IssueCredentialArgs -) { - const result = await client.credentials().issue(args); - - await waitOperation(client, result.op); - - const creds = await client.credentials().list(); - assert.equal(creds.length, 1); - assert.equal(creds[0].sad.s, args.schemaId); - assert.equal(creds[0].status.s, '0'); - - const dt = createTimestamp(); - - if (args.recipient) { - const [grant, gsigs, end] = await client.ipex().grant({ - senderName: args.issuerName, - recipient: args.recipient, - datetime: dt, - acdc: result.acdc, - anc: result.anc, - iss: result.iss, - }); - - await client - .exchanges() - .sendFromEvents(args.issuerName, 'credential', grant, gsigs, end, [ - args.recipient, - ]); - } - - console.log('Grant message sent'); - - return creds[0]; -} - -async function grantCredential( - client: SignifyClient, - issuerName: string, - recipient: string, - acdc: Serder, - acdcAttachment: string, - anc: Serder, - ancAttachment: string, - iss: Serder, - issAttachment: string -) { - const dt = createTimestamp(); - - const [grant, gsigs, end] = await client.ipex().grant({ - senderName: issuerName, - recipient: recipient, - datetime: dt, - acdc: acdc, - acdcAttachment: acdcAttachment, - anc: anc, - ancAttachment: ancAttachment, - iss: iss, - issAttachment: issAttachment, - }); - - await client.ipex().submitGrant(issuerName, grant, gsigs, end, [recipient]); -} - -async function admitCredential( - client: SignifyClient, - name: string, - said: string, - recipient: string -) { - const dt = createTimestamp(); - - const [admit, sigs, end] = await client.ipex().admit(name, '', said, dt); - - await client.ipex().submitAdmit(name, admit, sigs, end, [recipient]); -} - -test( - 'Single issuer holder', - async () => { - await signify.ready(); - const issuerClient = await connect(url, bootUrl); - const holderClient = await connect(url, bootUrl); - const verifierClient = await connect(url, bootUrl); - - await issuerClient.state(); - await holderClient.state(); - await verifierClient.state(); - - // Create two identifiers, one for each client - const issuerPrefix = await createIdentifier( - issuerClient, - 'issuer', - witnessIds - ); - const holderPrefix = await createIdentifier( - holderClient, - 'holder', - witnessIds - ); - const verifierPrefix = await createIdentifier( - verifierClient, - 'verifier', - witnessIds - ); - - // Exchange OOBIs - const issuerOobi = await getAgentOobi(issuerClient, 'issuer'); - const holderOobi = await getAgentOobi(holderClient, 'holder'); - const verifierOobi = await getAgentOobi(verifierClient, 'verifier'); - await resolveOobi(issuerClient, holderOobi, 'holder'); - await resolveOobi( - issuerClient, - vleiServerUrl + '/oobi/' + SCHEMA_SAID, - 'schema' - ); - await resolveOobi(holderClient, issuerOobi, 'issuer'); - await resolveOobi( - holderClient, - vleiServerUrl + '/oobi/' + SCHEMA_SAID, - 'schema' - ); - await resolveOobi(verifierClient, holderOobi, 'holder'); - await resolveOobi(holderClient, verifierOobi, 'verifier'); - await resolveOobi( - verifierClient, - vleiServerUrl + '/oobi/' + SCHEMA_SAID, - 'schema' - ); - - await createRegistry(issuerClient, 'issuer', 'vLEI'); - - const registires = await issuerClient.registries().list('issuer'); - await issueCredential(issuerClient, { - issuerName: 'issuer', - registryId: registires[0].regk, - schemaId: SCHEMA_SAID, - recipient: holderPrefix, - data: { - LEI: '5493001KJTIIGC8Y1R17', - }, - }); - - const grantNotifications = await waitForNotifications( - holderClient, - '/exn/ipex/grant' - ); - - await admitCredential( - holderClient, - 'holder', - grantNotifications[0].a.d!, - issuerPrefix - ); - - await holderClient.notifications().mark(grantNotifications[0].i); - - const c = await retry(async () => { - const creds = await holderClient.credentials().list(); - assert(creds.length >= 1); - return creds[0]; - }); - - console.log('Loading full credential'); - const cred = await holderClient - .credentials() - .get('holder', c['sad']['d']); - - const acdc = new Serder(cred['sad']); - const iss = new Serder(cred['iss']); - const anc = new Serder(cred['anc']); - - console.log(`Presenting credential to verifier: ${c['sad']['d']}`); - await grantCredential( - holderClient, - 'holder', - verifierPrefix, - acdc, - cred['atc'], - anc, - cred['ancatc'], - iss, - cred['issatc'] - ); - - const verifierGrantNotifications = await waitForNotifications( - verifierClient, - '/exn/ipex/grant' - ); - - console.log( - `Notifcation of grant received by verifier ${verifierGrantNotifications[0].a.d}` - ); - await admitCredential( - verifierClient, - 'verifier', - verifierGrantNotifications[0].a.d!, - holderPrefix - ); - - await verifierClient - .notifications() - .mark(verifierGrantNotifications[0].i); - - console.log('Checking for credential'); - const p = await retry(async () => { - const creds = await verifierClient.credentials().list(); - assert(creds.length >= 1); - return creds[0]; - }); - - console.log(`Credential ${p.sad.d} received by Verifier`); - }, - 1000 * 60 * 5 -); diff --git a/examples/integration-scripts/utils/test-step.ts b/examples/integration-scripts/utils/test-step.ts new file mode 100644 index 00000000..8cc8b180 --- /dev/null +++ b/examples/integration-scripts/utils/test-step.ts @@ -0,0 +1,28 @@ +/** + * Provides a way to group logically related test steps in an integration test + * + * Can be useful to provide logging when a step succeeds, or to be able to use + * locally scoped variables. + * + * In long tests it can also be useful to create visual groups. + * @param description + * @param fn + * @returns + */ +export async function step( + description: string, + fn: () => Promise +): Promise { + try { + const start = Date.now(); + const response = await fn(); + + // Bypassing console.log to avoid the verbose log output from jest + process.stdout.write( + `Finished step - ${description} - ${Date.now() - start}ms\n` + ); + return response; + } catch (error) { + throw new Error(`${description} - failed`, { cause: error }); + } +} From a58fa8e4c99ca7b2626ba1e69939c98ae521086b Mon Sep 17 00:00:00 2001 From: lenkan Date: Tue, 19 Dec 2023 17:13:05 +0100 Subject: [PATCH 149/186] add comments to test --- .../integration-scripts/credentials.test.ts | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index d0e52c7a..fe411ec5 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -58,35 +58,37 @@ test('single signature credentials', async () => { ]); await step('Resolve oobis', async () => { - const [issAgentOOBI, holderAgentOOBI, vfyAgentOOBI] = await Promise.all( - [ + const [issAgentOOBIs, holderAgentOOBIs, verifierAgentOOBIs] = + await Promise.all([ issuerClient.oobis().get(issuerAid.name, 'agent'), holderClient.oobis().get(holderAid.name, 'agent'), verifierClient.oobis().get(verifierAid.name, 'agent'), - ] - ); + ]); - assert(issAgentOOBI.oobis.length >= 1); - assert(holderAgentOOBI.oobis.length >= 1); - assert(vfyAgentOOBI.oobis.length >= 1); + assert(issAgentOOBIs.oobis.length >= 1); + assert(holderAgentOOBIs.oobis.length >= 1); + assert(verifierAgentOOBIs.oobis.length >= 1); + + const holderAgentOOBI = holderAgentOOBIs.oobis[0]; + const verifierAgentOOBI = verifierAgentOOBIs.oobis[0]; + const issuerAgentOOBI = issAgentOOBIs.oobis[0]; await Promise.all([ + // Issuer resolves schemas, holder and verifier oobis resolveOobi(issuerClient, QVI_SCHEMA_URL, 'schema'), - resolveOobi(holderClient, QVI_SCHEMA_URL, 'schema'), - resolveOobi(verifierClient, QVI_SCHEMA_URL, 'schema'), resolveOobi(issuerClient, LE_SCHEMA_URL, 'le-schema'), + resolveOobi(issuerClient, holderAgentOOBI, holderAid.name), + resolveOobi(issuerClient, verifierAgentOOBI, verifierAid.name), + // Holder resolves schemas, issuer and verifier oobis + resolveOobi(holderClient, QVI_SCHEMA_URL, 'schema'), resolveOobi(holderClient, LE_SCHEMA_URL, 'le-schema'), + resolveOobi(holderClient, issuerAgentOOBI, issuerAid.name), + resolveOobi(holderClient, verifierAgentOOBI, verifierAid.name), + // Verifier resolves schemas, issuer and holder oobis + resolveOobi(verifierClient, QVI_SCHEMA_URL, 'schema'), resolveOobi(verifierClient, LE_SCHEMA_URL, 'le-schema'), - resolveOobi(issuerClient, holderAgentOOBI.oobis[0], holderAid.name), - resolveOobi(issuerClient, vfyAgentOOBI.oobis[0], verifierAid.name), - resolveOobi(holderClient, issAgentOOBI.oobis[0], issuerAid.name), - resolveOobi(holderClient, vfyAgentOOBI.oobis[0], verifierAid.name), - resolveOobi(verifierClient, issAgentOOBI.oobis[0], issuerAid.name), - resolveOobi( - verifierClient, - holderAgentOOBI.oobis[0], - holderAid.name - ), + resolveOobi(verifierClient, issuerAgentOOBI, issuerAid.name), + resolveOobi(verifierClient, holderAgentOOBI, holderAid.name), ]); }); From 44a1386f4badd98717a665e4e8c11b095670ef50 Mon Sep 17 00:00:00 2001 From: lenkan Date: Sat, 6 Jan 2024 14:05:02 +0100 Subject: [PATCH 150/186] change setup code --- .../integration-scripts/credentials.test.ts | 150 +++++++----------- .../integration-scripts/utils/test-step.ts | 4 +- .../integration-scripts/utils/test-util.ts | 2 +- 3 files changed, 61 insertions(+), 95 deletions(-) diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index fe411ec5..1f40970b 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -1,5 +1,5 @@ import { strict as assert } from 'assert'; -import signify, { Saider, Serder, SignifyClient } from 'signify-ts'; +import { Saider, Serder, SignifyClient } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; import { resolveOobi, @@ -7,21 +7,15 @@ import { waitOperation, } from './utils/test-util'; import { retry } from './utils/retry'; -import { getOrCreateClient } from './utils/test-setup'; +import { + getOrCreateClients, + getOrCreateContact, + getOrCreateIdentifier, +} from './utils/test-setup'; import { randomUUID } from 'crypto'; import { step } from './utils/test-step'; -const { vleiServerUrl, witnessIds } = resolveEnvironment(); - -const WAN_WITNESS_AID = witnessIds[0]; -const WIL_WITNESS_AID = witnessIds[1]; -const WES_WITNESS_AID = witnessIds[2]; - -const KLI_WITNESS_DEMO_PREFIXES = [ - WAN_WITNESS_AID, - WIL_WITNESS_AID, - WES_WITNESS_AID, -]; +const { vleiServerUrl } = resolveEnvironment(); const QVI_SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; const LE_SCHEMA_SAID = 'ENPXp1vQzRF6JwIuS-mp2U8Uf1MoADoP_GqQ62VsDZWY'; @@ -29,66 +23,69 @@ const vLEIServerHostUrl = `${vleiServerUrl}/oobi`; const QVI_SCHEMA_URL = `${vLEIServerHostUrl}/${QVI_SCHEMA_SAID}`; const LE_SCHEMA_URL = `${vLEIServerHostUrl}/${LE_SCHEMA_SAID}`; +interface Aid { + name: string; + prefix: string; + oobi: string; +} + function createTimestamp() { return new Date().toISOString().replace('Z', '000+00:00'); } -async function createAid(client: signify.SignifyClient, name: string) { - const verifierIcpRes = await client.identifiers().create(name, { - toad: 3, - wits: [...KLI_WITNESS_DEMO_PREFIXES], - }); - await waitOperation(client, await verifierIcpRes.op()); - const hab = await client.identifiers().get(name); - await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); - return hab; +async function createAid(client: SignifyClient, name: string): Promise { + const [prefix, oobi] = await getOrCreateIdentifier(client, name); + return { prefix, oobi, name }; } -test('single signature credentials', async () => { - const [issuerClient, holderClient, verifierClient] = await Promise.all([ - getOrCreateClient(), - getOrCreateClient(), - getOrCreateClient(), - ]); +let issuerClient: SignifyClient; +let holderClient: SignifyClient; +let verifierClient: SignifyClient; +let legalEntityClient: SignifyClient; + +let issuerAid: Aid; +let holderAid: Aid; +let verifierAid: Aid; +let legalEntityAid: Aid; + +beforeAll(async () => { + [issuerClient, holderClient, verifierClient, legalEntityClient] = + await getOrCreateClients(4); +}); - const [issuerAid, holderAid, verifierAid] = await Promise.all([ +beforeAll(async () => { + [issuerAid, holderAid, verifierAid, legalEntityAid] = await Promise.all([ createAid(issuerClient, 'issuer'), createAid(holderClient, 'holder'), createAid(verifierClient, 'verifier'), + createAid(legalEntityClient, 'legal-entity'), ]); +}); + +beforeAll(async () => { + await Promise.all([ + getOrCreateContact(issuerClient, 'holder', holderAid.oobi), + getOrCreateContact(issuerClient, 'verifier', verifierAid.oobi), + getOrCreateContact(holderClient, 'issuer', issuerAid.oobi), + getOrCreateContact(holderClient, 'verifier', verifierAid.oobi), + getOrCreateContact(holderClient, 'legal-entity', legalEntityAid.oobi), + getOrCreateContact(verifierClient, 'issuer', issuerAid.oobi), + getOrCreateContact(verifierClient, 'holder', holderAid.oobi), + getOrCreateContact(legalEntityClient, 'holder', holderAid.oobi), + ]); +}); - await step('Resolve oobis', async () => { - const [issAgentOOBIs, holderAgentOOBIs, verifierAgentOOBIs] = - await Promise.all([ - issuerClient.oobis().get(issuerAid.name, 'agent'), - holderClient.oobis().get(holderAid.name, 'agent'), - verifierClient.oobis().get(verifierAid.name, 'agent'), - ]); - - assert(issAgentOOBIs.oobis.length >= 1); - assert(holderAgentOOBIs.oobis.length >= 1); - assert(verifierAgentOOBIs.oobis.length >= 1); - - const holderAgentOOBI = holderAgentOOBIs.oobis[0]; - const verifierAgentOOBI = verifierAgentOOBIs.oobis[0]; - const issuerAgentOOBI = issAgentOOBIs.oobis[0]; - +test('single signature credentials', async () => { + await step('Resolve schema oobis', async () => { await Promise.all([ - // Issuer resolves schemas, holder and verifier oobis - resolveOobi(issuerClient, QVI_SCHEMA_URL, 'schema'), - resolveOobi(issuerClient, LE_SCHEMA_URL, 'le-schema'), - resolveOobi(issuerClient, holderAgentOOBI, holderAid.name), - resolveOobi(issuerClient, verifierAgentOOBI, verifierAid.name), - // Holder resolves schemas, issuer and verifier oobis - resolveOobi(holderClient, QVI_SCHEMA_URL, 'schema'), - resolveOobi(holderClient, LE_SCHEMA_URL, 'le-schema'), - resolveOobi(holderClient, issuerAgentOOBI, issuerAid.name), - resolveOobi(holderClient, verifierAgentOOBI, verifierAid.name), - // Verifier resolves schemas, issuer and holder oobis - resolveOobi(verifierClient, QVI_SCHEMA_URL, 'schema'), - resolveOobi(verifierClient, LE_SCHEMA_URL, 'le-schema'), - resolveOobi(verifierClient, issuerAgentOOBI, issuerAid.name), - resolveOobi(verifierClient, holderAgentOOBI, holderAid.name), + resolveOobi(issuerClient, QVI_SCHEMA_URL), + resolveOobi(issuerClient, LE_SCHEMA_URL), + resolveOobi(holderClient, QVI_SCHEMA_URL), + resolveOobi(holderClient, LE_SCHEMA_URL), + resolveOobi(verifierClient, QVI_SCHEMA_URL), + resolveOobi(verifierClient, LE_SCHEMA_URL), + resolveOobi(legalEntityClient, QVI_SCHEMA_URL), + resolveOobi(legalEntityClient, LE_SCHEMA_URL), ]); }); @@ -319,37 +316,6 @@ test('single signature credentials', async () => { assert.equal(verifierCredential.status.s, '0'); // 0 = issued }); - const legalEntityClient: SignifyClient = await getOrCreateClient(); - const legalEntityAid: { name: string; prefix: string } = await createAid( - legalEntityClient, - 'legal-entity' - ); - - await step('resolve oobis', async () => { - const [holderAgentOOBI, legalEntityOOBI] = await Promise.all([ - holderClient.oobis().get(holderAid.name, 'agent'), - legalEntityClient.oobis().get(legalEntityAid.name, 'agent'), - ]); - - assert(holderAgentOOBI.oobis.length >= 1); - assert(legalEntityOOBI.oobis.length >= 1); - - await Promise.all([ - resolveOobi(legalEntityClient, QVI_SCHEMA_URL, 'schema'), - resolveOobi(legalEntityClient, LE_SCHEMA_URL, 'le-schema'), - resolveOobi( - holderClient, - legalEntityOOBI.oobis[0], - legalEntityAid.name - ), - resolveOobi( - legalEntityClient, - holderAgentOOBI.oobis[0], - holderAid.name - ), - ]); - }); - const holderRegistry: { regk: string } = await step( 'holder create registry for LE credential', async () => { @@ -468,4 +434,4 @@ test('single signature credentials', async () => { assert.equal(legalEntityCredential.chains[0].sad.d, qviCredentialId); assert(legalEntityCredential.atc !== undefined); }); -}, 60000); +}, 90000); diff --git a/examples/integration-scripts/utils/test-step.ts b/examples/integration-scripts/utils/test-step.ts index 8cc8b180..172b0fe6 100644 --- a/examples/integration-scripts/utils/test-step.ts +++ b/examples/integration-scripts/utils/test-step.ts @@ -19,10 +19,10 @@ export async function step( // Bypassing console.log to avoid the verbose log output from jest process.stdout.write( - `Finished step - ${description} - ${Date.now() - start}ms\n` + `Step - ${description} - finished (${Date.now() - start}ms)\n` ); return response; } catch (error) { - throw new Error(`${description} - failed`, { cause: error }); + throw new Error(`Step - ${description} - failed`, { cause: error }); } } diff --git a/examples/integration-scripts/utils/test-util.ts b/examples/integration-scripts/utils/test-util.ts index 354bf2ba..dbb4260f 100644 --- a/examples/integration-scripts/utils/test-util.ts +++ b/examples/integration-scripts/utils/test-util.ts @@ -29,7 +29,7 @@ export async function waitOperation( export async function resolveOobi( client: SignifyClient, oobi: string, - alias: string + alias?: string ) { const op = await client.oobis().resolve(oobi, alias); await waitOperation(client, op); From a21dc14a9b7e247b6aa3ff61a6aea4c63a0e5144 Mon Sep 17 00:00:00 2001 From: lenkan Date: Sat, 6 Jan 2024 17:55:40 +0100 Subject: [PATCH 151/186] add step for revoking QVI credential --- examples/integration-scripts/credentials.test.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index 1f40970b..61f9a124 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -434,4 +434,17 @@ test('single signature credentials', async () => { assert.equal(legalEntityCredential.chains[0].sad.d, qviCredentialId); assert(legalEntityCredential.atc !== undefined); }); + + await step('Issuer revoke QVI credential', async () => { + const revokeOperation = await issuerClient + .credentials() + .revoke(issuerAid.name, qviCredentialId); + + await waitOperation(issuerClient, revokeOperation); + const issuerCredential = await issuerClient + .credentials() + .get(issuerAid.name, qviCredentialId); + + assert.equal(issuerCredential.status.s, '1'); + }); }, 90000); From 2ed39090dd18d8bbe32f3d0de4c6b938914c07ea Mon Sep 17 00:00:00 2001 From: Arshdeep Date: Tue, 9 Jan 2024 09:27:08 -0500 Subject: [PATCH 152/186] create initial version of multisig-holder script --- .../multisig-holder.test.ts | 696 ++++++++++++++++++ 1 file changed, 696 insertions(+) create mode 100644 examples/integration-scripts/multisig-holder.test.ts diff --git a/examples/integration-scripts/multisig-holder.test.ts b/examples/integration-scripts/multisig-holder.test.ts new file mode 100644 index 00000000..7a69bd6a --- /dev/null +++ b/examples/integration-scripts/multisig-holder.test.ts @@ -0,0 +1,696 @@ +import { strict as assert } from 'assert'; +import signify, { + SignifyClient, + Serder, + IssueCredentialResult, + IssueCredentialArgs, +} from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; +import { waitForNotifications, waitOperation } from './utils/test-util'; +import { getOrCreateClient } from './utils/test-setup'; + +const { vleiServerUrl } = resolveEnvironment(); +const WITNESS_AIDS = [ + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', +]; + +const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const SCHEMA_OOBI = `${vleiServerUrl}/oobi/${SCHEMA_SAID}`; + +test('multisig', async function run() { + await signify.ready(); + // Boot Four clients + const [client1, client2, client3] = await Promise.all([ + getOrCreateClient(), + getOrCreateClient(), + getOrCreateClient() + ]); + + // Create three identifiers, one for each client + let [aid1, aid2, aid3] = await Promise.all([ + createAID(client1, 'member1', WITNESS_AIDS), + createAID(client2, 'member2', WITNESS_AIDS), + createAID(client3, 'issuer', WITNESS_AIDS), + ]); + + await createRegistry(client3, 'issuer', 'issuer-reg'); + + // Exchange OOBIs + console.log('Resolving OOBIs'); + const [oobi1, oobi2, oobi3] = await Promise.all([ + client1.oobis().get('member1', 'agent'), + client2.oobis().get('member2', 'agent'), + client3.oobis().get('issuer', 'agent') + ]); + + let op1 = await client1.oobis().resolve(oobi2.oobis[0], 'member2'); + op1 = await waitOperation(client1, op1); + op1 = await client1.oobis().resolve(oobi3.oobis[0], 'issuer'); + op1 = await waitOperation(client1, op1); + op1 = await client1.oobis().resolve(SCHEMA_OOBI, 'schema'); + op1 = await waitOperation(client1, op1); + console.log('Member1 resolved 3 OOBIs'); + + let op2 = await client2.oobis().resolve(oobi1.oobis[0], 'member1'); + op2 = await waitOperation(client2, op2); + op2 = await client2.oobis().resolve(oobi3.oobis[0], 'issuer'); + op2 = await waitOperation(client2, op2); + op2 = await client2.oobis().resolve(SCHEMA_OOBI, 'schema'); + op2 = await waitOperation(client2, op2); + console.log('Member2 resolved 3 OOBIs'); + + let op3 = await client3.oobis().resolve(oobi1.oobis[0], 'member1'); + op3 = await waitOperation(client3, op3); + op3 = await client3.oobis().resolve(oobi2.oobis[0], 'member2'); + op3 = await waitOperation(client3, op3); + op3 = await client3.oobis().resolve(SCHEMA_OOBI, 'schema'); + op3 = await waitOperation(client3, op3); + console.log('Issuer resolved 3 OOBIs'); + + // // First member challenge the other members with a random list of words + // // List of words should be passed to the other members out of band + // // The other members should do the same challenge/response flow, not shown here for brevity + // const words = (await client1.challenges().generate(128)).words; + // console.log('Member1 generated challenge words:', words); + + // await client2.challenges().respond('member2', aid1.prefix, words); + // console.log('Member2 responded challenge with signed words'); + + // await client3.challenges().respond('member3', aid1.prefix, words); + // console.log('Member3 responded challenge with signed words'); + + // op1 = await client1.challenges().verify('member1', aid2.prefix, words); + // op1 = await waitOperation(client1, op1); + // console.log('Member1 verified challenge response from member2'); + // let exnwords = new Serder(op1.response.exn); + // op1 = await client1 + // .challenges() + // .responded('member1', aid2.prefix, exnwords.ked.d); + // console.log('Member1 marked challenge response as accepted'); + + // op1 = await client1.challenges().verify('member1', aid3.prefix, words); + // op1 = await waitOperation(client1, op1); + // console.log('Member1 verified challenge response from member3'); + // exnwords = new Serder(op1.response.exn); + // op1 = await client1 + // .challenges() + // .responded('member1', aid3.prefix, exnwords.ked.d); + // console.log('Member1 marked challenge response as accepted'); + + //// First member start the creation of a multisig identifier + let rstates = [aid1['state'], aid2['state']]; + let states = rstates; + let icpResult1 = await client1.identifiers().create('holder', { + algo: signify.Algos.group, + mhab: aid1, + isith: 2, + nsith: 2, + toad: aid1.state.b.length, + wits: aid1.state.b, + states: states, + rstates: rstates, + }); + op1 = await icpResult1.op(); + let serder = icpResult1.serder; + + let sigs = icpResult1.sigs; + let sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); + + let ims = signify.d(signify.messagize(serder, sigers)); + let atc = ims.substring(serder.size); + let embeds = { + icp: [serder, atc], + }; + + let smids = states.map((state) => state['i']); + let recp = [aid2['state']].map((state) => state['i']); + + await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/icp', + { gid: serder.pre, smids: smids, rmids: smids }, + embeds, + recp + ); + console.log('Member1 initiated multisig, waiting for others to join...'); + + // Second member check notifications and join the multisig + + let msgSaid = await waitAndMarkNotification(client2, '/multisig/icp'); + console.log('Member2 received exchange message to join multisig'); + + let res = await client2.groups().getRequest(msgSaid); + let exn = res[0].exn; + let icp = exn.e.icp; + + let icpResult2 = await client2.identifiers().create('holder', { + algo: signify.Algos.group, + mhab: aid2, + isith: icp.kt, + nsith: icp.nt, + toad: parseInt(icp.bt), + wits: icp.b, + states: states, + rstates: rstates, + }); + op2 = await icpResult2.op(); + serder = icpResult2.serder; + sigs = icpResult2.sigs; + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); + + ims = signify.d(signify.messagize(serder, sigers)); + atc = ims.substring(serder.size); + embeds = { + icp: [serder, atc], + }; + + smids = exn.a.smids; + recp = [aid1['state']].map((state) => state['i']); + + await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/icp', + { gid: serder.pre, smids: smids, rmids: smids }, + embeds, + recp + ); + console.log('Member2 joined multisig, waiting for others...'); + + // Check for completion + op1 = await waitOperation(client1, op1); + op2 = await waitOperation(client2, op2); + console.log('Multisig created!'); + + const identifiers1 = await client1.identifiers().list(); + assert.equal(identifiers1.aids.length, 2); + + const identifiers2 = await client2.identifiers().list(); + assert.equal(identifiers2.aids.length, 2); + + console.log( + 'Member 1 managed AIDs:\n', + identifiers1.aids[0].name, + `[${identifiers1.aids[0].prefix}]\n`, + identifiers1.aids[1].name, + `[${identifiers1.aids[1].prefix}]` + ); + console.log( + 'Member 2 managed AIDs:\n', + identifiers2.aids[0].name, + `[${identifiers2.aids[0].prefix}]\n`, + identifiers2.aids[1].name, + `[${identifiers2.aids[1].prefix}]` + ); + + const multisig = identifiers2.aids[1].prefix; + + // Multisig end role + + aid1 = await client1.identifiers().get('member1'); + aid2 = await client2.identifiers().get('member2'); + const members = await client1.identifiers().members('holder'); + let ghab1 = await client1.identifiers().get('holder'); + const signing = members['signing']; + const eid1 = Object.keys(signing[0].ends.agent)[0]; + const eid2 = Object.keys(signing[1].ends.agent)[0]; + + console.log(`Starting multisig end role authorization for agent ${eid1}`); + + + let stamp = createTimestamp(); + + let endRoleRes = await client1.identifiers().addEndRole('holder', 'agent', eid1, stamp); + op1 = await endRoleRes.op(); + let rpy = endRoleRes.serder; + sigs = endRoleRes.sigs; + let ghabState1 = ghab1['state']; + let seal = [ + 'SealEvent', + { i: ghab1['prefix'], s: ghabState1['ee']['s'], d: ghabState1['ee']['d'] }, + ]; + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); + let roleims = signify.d( + signify.messagize(rpy, sigers, seal, undefined, undefined, false) + ); + atc = roleims.substring(rpy.size); + let roleembeds = { + rpy: [rpy, atc], + }; + recp = [aid2['state']].map((state) => state['i']); + res = await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/rpy', + { gid: ghab1['prefix'] }, + roleembeds, + recp + ); + console.log( + `Member1 authorized agent role to ${eid1}, waiting for others to authorize...` + ); + + //Member2 check for notifications and join the authorization + msgSaid = await waitAndMarkNotification(client2, '/multisig/rpy'); + console.log( + 'Member2 received exchange message to join the end role authorization' + ); + res = await client2.groups().getRequest(msgSaid); + exn = res[0].exn; + // stamp, eid and role are provided in the exn message + let rpystamp = exn.e.rpy.dt; + let rpyrole = exn.e.rpy.a.role; + let rpyeid = exn.e.rpy.a.eid; + + endRoleRes = await client2 + .identifiers() + .addEndRole('holder', rpyrole, rpyeid, rpystamp); + op2 = await endRoleRes.op(); + rpy = endRoleRes.serder; + sigs = endRoleRes.sigs; + + let ghab2 = await client2.identifiers().get('holder'); + let ghabState2 = ghab2['state']; + seal = [ + 'SealEvent', + { i: ghab2['prefix'], s: ghabState2['ee']['s'], d: ghabState2['ee']['d'] }, + ]; + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); + roleims = signify.d( + signify.messagize(rpy, sigers, seal, undefined, undefined, false) + ); + atc = roleims.substring(rpy.size); + roleembeds = { + rpy: [rpy, atc], + }; + recp = [aid1['state']].map((state) => state['i']); + res = await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/rpy', + { gid: ghab2['prefix'] }, + roleembeds, + recp + ); + console.log( + `Member2 authorized agent role to ${eid1}, waiting for others to authorize...` + ); + // Check for completion + op1 = await waitOperation(client1, op1, 30); + op2 = await waitOperation(client2, op2, 30); + console.log(`End role authorization for agent ${eid1}completed!`); + + + console.log(`Starting multisig end role authorization for agent ${eid2}`); + + endRoleRes = await client1 + .identifiers() + .addEndRole('holder', 'agent', eid2, stamp); + op1 = await endRoleRes.op(); + rpy = endRoleRes.serder; + sigs = endRoleRes.sigs; + + ghab1 = await client1.identifiers().get('holder'); + ghabState1 = ghab1['state']; + seal = [ + 'SealEvent', + { i: ghab1['prefix'], s: ghabState1['ee']['s'], d: ghabState1['ee']['d'] }, + ]; + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); + roleims = signify.d( + signify.messagize(rpy, sigers, seal, undefined, undefined, false) + ); + atc = roleims.substring(rpy.size); + roleembeds = { + rpy: [rpy, atc], + }; + recp = [aid2['state']].map((state) => state['i']); + res = await client1 + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/rpy', + { gid: ghab1['prefix'] }, + roleembeds, + recp + ); + console.log( + `Member1 authorized agent role to ${eid2}, waiting for others to authorize...` + ); + + //Member2 check for notifications and join the authorization + msgSaid = await waitAndMarkNotification(client2, '/multisig/rpy'); + console.log( + 'Member2 received exchange message to join the end role authorization' + ); + res = await client2.groups().getRequest(msgSaid); + exn = res[0].exn; + // stamp, eid and role are provided in the exn message + rpystamp = exn.e.rpy.dt; + rpyrole = exn.e.rpy.a.role; + rpyeid = exn.e.rpy.a.eid; + endRoleRes = await client2 + .identifiers() + .addEndRole('holder', rpyrole, rpyeid, rpystamp); + op2 = await endRoleRes.op(); + + rpy = endRoleRes.serder; + sigs = endRoleRes.sigs; + + ghab2 = await client2.identifiers().get('holder'); + ghabState2 = ghab2['state']; + seal = [ + 'SealEvent', + { i: ghab2['prefix'], s: ghabState2['ee']['s'], d: ghabState2['ee']['d'] }, + ]; + + sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); + roleims = signify.d( + signify.messagize(rpy, sigers, seal, undefined, undefined, false) + ); + atc = roleims.substring(rpy.size); + roleembeds = { + rpy: [rpy, atc], + }; + recp = [aid1['state']].map((state) => state['i']); + res = await client2 + .exchanges() + .send( + 'member2', + 'multisig', + aid2, + '/multisig/rpy', + { gid: ghab2['prefix'] }, + roleembeds, + recp + ); + + console.log( + `Member2 authorized agent role to ${eid2}, waiting for others to authorize...` + ); + // Check for completion + op1 = await waitOperation(client1, op1); + op2 = await waitOperation(client2, op2); + console.log(`End role authorization for agent ${eid2}completed!`); + + + // Holder resolve multisig OOBI + const oobiMultisig = await client1.oobis().get('holder', 'agent'); + console.log(`Memeber1: Holder multisig AID OOBIs` + JSON.stringify(oobiMultisig)); + + const oobiMultisig2 = await client2.oobis().get('holder', 'agent'); + console.log(`Memeber2: Holder multisig AID OOBIs` + JSON.stringify(oobiMultisig2)); + + + op3 = await client3.oobis().resolve(oobiMultisig.oobis[0], 'holder'); + op3 = await waitOperation(client3, op3); + console.log(`Issuer resolved multisig holder OOBI`); + + + let holderAid = await client1.identifiers().get('holder'); + aid1 = await client1.identifiers().get('member1'); + aid2 = await client2.identifiers().get('member2'); + + console.log(`Issuer starting credential issuance to holder...`); + const registires = await client3.registries().list('issuer'); + await issueCredential(client3, { + issuerName: 'issuer', + registryId: registires[0].regk, + schemaId: SCHEMA_SAID, + recipient: holderAid['prefix'], + data: { + LEI: '5493001KJTIIGC8Y1R17', + }, + }); + console.log(`Issuer sent credential grant to holder.`); + + console.log(`Member1 waits for grant notification...`); + let grantMsgSaid = await waitForNotification(client1, '/exn/ipex/grant') + console.log('Member1 received grant exn notification...'); + let exnRes = await client1.exchanges().get(grantMsgSaid) + + recp = [aid2['state']].map((state) => state['i']); + await multisigAdmitCredential( + client1, + 'holder', + 'member1', + exnRes.exn.d, + exnRes.exn.i, + recp + ) + console.log(`Member1 admitted credential with SAID : ${exnRes.exn.e.acdc.d}`) + + ////let grantMsgSaid2 = await waitAndMarkNotification(client2, '/exn/ipex/grant') + //let grantMsgSaid2 = await waitForNotification(client2, '/exn/ipex/grant', true) + let grantMsgSaid2_1 = await waitForNotification(client2, '/multisig/exn', true) + console.log('Member2 received grant exn notification...'); + //assert.equal(grantMsgSaid, grantMsgSaid2); + + //let exnRes2 = await client2.exchanges().get(grantMsgSaid2) + let exnRes2_1 = await client2.exchanges().get(grantMsgSaid2_1) + console.log(`Memeber2: received grant multisig/exn notifications` + JSON.stringify(exnRes2_1)); + + let recp2 = [aid1['state']].map((state) => state['i']); + await multisigAdmitCredential( + client2, + 'holder', + 'member2', + exnRes.exn.d, + exnRes.exn.i, + recp2 + ) + console.log(`Member2 admitted credential with SAID : ${exnRes.exn.e.acdc.d}`) + + // msgSaid = await waitForNotification(client3, '/exn/ipex/admit'); + // console.log('Member1 received exn notification with the admit response'); + + let creds = await client1.credentials().list(); + console.log(`Member1 has ${creds.length} credential`); + + while (creds.length < 1) { + console.log(' No credentials yet...'); + await new Promise((resolve) => setTimeout(resolve, 500)); + creds = await client1.credentials().list(); + } + console.log(`Holder has ${creds.length} credential ` + JSON.stringify(creds)); + + +}, 360000); + +async function waitAndMarkNotification(client: SignifyClient, route: string) { + const notes = await waitForNotifications(client, route); + + await Promise.all( + notes.map(async (note) => { + await client.notifications().mark(note.i); + }) + ); + + return notes[notes.length - 1]?.a.d ?? ''; +} + +export async function waitForNotification( + client: SignifyClient, + route: string, + enableLog: boolean = false +) { + if (enableLog === true) { + console.log(` Waiting for notification with route : ${route}`) + } + let msgSaid = '' + while (msgSaid == '') { + const notifications = await client.notifications().list() + if (enableLog === true) { + console.log(` Notifications list : ${JSON.stringify(notifications)}`) + } + for (const notif of notifications.notes) { + if (notif.a.r == route) { + msgSaid = notif.a.d + await client.notifications().mark(notif.i) + } + } + await new Promise((resolve) => setTimeout(resolve, 1000)) + } + return msgSaid +} + +async function createAID(client: SignifyClient, name: string, wits: string[]) { + const icpResult1 = await client.identifiers().create(name, { + toad: wits.length, + wits: wits, + }); + await waitOperation(client, await icpResult1.op()); + const aid = await client.identifiers().get(name); + await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); + console.log(name, 'AID:', aid.prefix); + return aid; +} + +async function createRegistry( + client: SignifyClient, + name: string, + registryName: string +) { + const result = await client.registries().create({ name, registryName }); + const op = await result.op(); + await waitOperation(client, op); + + const registries = await client.registries().list(name); + assert.equal(registries.length, 1); + assert.equal(registries[0].name, registryName); + + return registries[0]; +} + +async function issueCredential( + client: SignifyClient, + args: IssueCredentialArgs +) { + const result = await client.credentials().issue(args); + + await waitOperation(client, result.op); + + const creds = await client.credentials().list(); + assert.equal(creds.length, 1); + assert.equal(creds[0].sad.s, args.schemaId); + assert.equal(creds[0].status.s, '0'); + + const dt = createTimestamp(); + + if (args.recipient) { + const [grant, gsigs, end] = await client.ipex().grant({ + senderName: args.issuerName, + recipient: args.recipient, + datetime: dt, + acdc: result.acdc, + anc: result.anc, + iss: result.iss, + }); + + // await client + // .exchanges() + // .sendFromEvents(args.issuerName, 'credential', grant, gsigs, end, [ + // args.recipient, + // ]); + + await client.ipex().submitGrant(args.issuerName, grant, gsigs, end, [args.recipient]); + } + + console.log('Grant message sent'); + + return creds[0]; +} + +function createTimestamp() { + const dt = new Date().toISOString().replace('Z', '000+00:00'); + return dt; +} + +async function multisigAdmitCredential( + client: SignifyClient, + groupName: string, + memberAlias: string, + grantSaid: string, + issuerPrefix: string, + recipients: string[] +) { + const dt = createTimestamp() + + let mHab = await client.identifiers().get(memberAlias) + let gHab = await client.identifiers().get(groupName) + + const [admit, sigs, end] = await client + .ipex() + .admit(groupName, '', grantSaid, dt) + + await client.ipex().submitAdmit(groupName, admit, sigs, end, [issuerPrefix]); + // await client + // .exchanges() + // .sendFromEvents(groupName, 'credential', admit, sigs, end, [issuerPrefix]) + + if (recipients?.length < 1) { + return; + } + + let mstate = gHab['state'] + let seal = [ + 'SealEvent', + { i: gHab['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] } + ] + let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })) + let ims = signify.d(signify.messagize(admit, sigers, seal)) + let atc = ims.substring(admit.size) + atc += end + let gembeds = { + exn: [admit, atc] + } + + await client + .exchanges() + .send( + mHab.name, + 'multisig', + mHab, + '/multisig/exn', + { gid: gHab['prefix'] }, + gembeds, + recipients + ) +} + + +async function multisigIssue( + client: SignifyClient, + memberName: string, + groupName: string, + result: IssueCredentialResult +) { + const leaderHab = await client.identifiers().get(memberName); + const groupHab = await client.identifiers().get(groupName); + const members = await client.identifiers().members(groupName); + + const keeper = client.manager!.get(groupHab); + const sigs = await keeper.sign(signify.b(result.anc.raw)); + const sigers = sigs.map((sig: string) => new signify.Siger({ qb64: sig })); + const ims = signify.d(signify.messagize(result.anc, sigers)); + const atc = ims.substring(result.anc.size); + + const embeds = { + acdc: [result.acdc, ''], + iss: [result.iss, ''], + anc: [result.anc, atc], + }; + + const recipients = members.signing + .map((m: { aid: string }) => m.aid) + .filter((aid: string) => aid !== leaderHab.prefix); + + await client + .exchanges() + .send( + memberName, + 'multisig', + leaderHab, + '/multisig/iss', + { gid: groupHab.prefix }, + embeds, + recipients + ); +} From 1abc08c9b2435f27788f8a9705008f48d4f45b21 Mon Sep 17 00:00:00 2001 From: Arshdeep Date: Tue, 9 Jan 2024 19:33:15 -0500 Subject: [PATCH 153/186] add more logs to debug multisig-holder.test.ts script --- .../multisig-holder.test.ts | 173 +++++++----------- 1 file changed, 67 insertions(+), 106 deletions(-) diff --git a/examples/integration-scripts/multisig-holder.test.ts b/examples/integration-scripts/multisig-holder.test.ts index 7a69bd6a..5986cd87 100644 --- a/examples/integration-scripts/multisig-holder.test.ts +++ b/examples/integration-scripts/multisig-holder.test.ts @@ -4,9 +4,10 @@ import signify, { Serder, IssueCredentialResult, IssueCredentialArgs, + Operation, } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -import { waitForNotifications, waitOperation } from './utils/test-util'; +import { sleep, waitForNotifications } from './utils/test-util'; import { getOrCreateClient } from './utils/test-setup'; const { vleiServerUrl } = resolveEnvironment(); @@ -69,36 +70,6 @@ test('multisig', async function run() { op3 = await waitOperation(client3, op3); console.log('Issuer resolved 3 OOBIs'); - // // First member challenge the other members with a random list of words - // // List of words should be passed to the other members out of band - // // The other members should do the same challenge/response flow, not shown here for brevity - // const words = (await client1.challenges().generate(128)).words; - // console.log('Member1 generated challenge words:', words); - - // await client2.challenges().respond('member2', aid1.prefix, words); - // console.log('Member2 responded challenge with signed words'); - - // await client3.challenges().respond('member3', aid1.prefix, words); - // console.log('Member3 responded challenge with signed words'); - - // op1 = await client1.challenges().verify('member1', aid2.prefix, words); - // op1 = await waitOperation(client1, op1); - // console.log('Member1 verified challenge response from member2'); - // let exnwords = new Serder(op1.response.exn); - // op1 = await client1 - // .challenges() - // .responded('member1', aid2.prefix, exnwords.ked.d); - // console.log('Member1 marked challenge response as accepted'); - - // op1 = await client1.challenges().verify('member1', aid3.prefix, words); - // op1 = await waitOperation(client1, op1); - // console.log('Member1 verified challenge response from member3'); - // exnwords = new Serder(op1.response.exn); - // op1 = await client1 - // .challenges() - // .responded('member1', aid3.prefix, exnwords.ked.d); - // console.log('Member1 marked challenge response as accepted'); - //// First member start the creation of a multisig identifier let rstates = [aid1['state'], aid2['state']]; let states = rstates; @@ -313,7 +284,7 @@ test('multisig', async function run() { // Check for completion op1 = await waitOperation(client1, op1, 30); op2 = await waitOperation(client2, op2, 30); - console.log(`End role authorization for agent ${eid1}completed!`); + console.log(`End role authorization for agent ${eid1} completed!`); console.log(`Starting multisig end role authorization for agent ${eid2}`); @@ -408,15 +379,15 @@ test('multisig', async function run() { // Check for completion op1 = await waitOperation(client1, op1); op2 = await waitOperation(client2, op2); - console.log(`End role authorization for agent ${eid2}completed!`); + console.log(`End role authorization for agent ${eid2} completed!`); // Holder resolve multisig OOBI const oobiMultisig = await client1.oobis().get('holder', 'agent'); - console.log(`Memeber1: Holder multisig AID OOBIs` + JSON.stringify(oobiMultisig)); + console.log(`Memeber1: Holder multisig AID OOBIs: ` + JSON.stringify(oobiMultisig)); const oobiMultisig2 = await client2.oobis().get('holder', 'agent'); - console.log(`Memeber2: Holder multisig AID OOBIs` + JSON.stringify(oobiMultisig2)); + console.log(`Memeber2: Holder multisig AID OOBIs: ` + JSON.stringify(oobiMultisig2)); op3 = await client3.oobis().resolve(oobiMultisig.oobis[0], 'holder'); @@ -430,6 +401,7 @@ test('multisig', async function run() { console.log(`Issuer starting credential issuance to holder...`); const registires = await client3.registries().list('issuer'); + let recps: string[] = [aid1['prefix'], aid2['prefix']] await issueCredential(client3, { issuerName: 'issuer', registryId: registires[0].regk, @@ -438,12 +410,14 @@ test('multisig', async function run() { data: { LEI: '5493001KJTIIGC8Y1R17', }, - }); + } + , recps + ); console.log(`Issuer sent credential grant to holder.`); - console.log(`Member1 waits for grant notification...`); + let grantMsgSaid = await waitForNotification(client1, '/exn/ipex/grant') - console.log('Member1 received grant exn notification...'); + console.log(`Member1 received /exn/ipex/grant msg with SAID: ${grantMsgSaid} `); let exnRes = await client1.exchanges().get(grantMsgSaid) recp = [aid2['state']].map((state) => state['i']); @@ -457,15 +431,15 @@ test('multisig', async function run() { ) console.log(`Member1 admitted credential with SAID : ${exnRes.exn.e.acdc.d}`) - ////let grantMsgSaid2 = await waitAndMarkNotification(client2, '/exn/ipex/grant') - //let grantMsgSaid2 = await waitForNotification(client2, '/exn/ipex/grant', true) - let grantMsgSaid2_1 = await waitForNotification(client2, '/multisig/exn', true) - console.log('Member2 received grant exn notification...'); - //assert.equal(grantMsgSaid, grantMsgSaid2); - //let exnRes2 = await client2.exchanges().get(grantMsgSaid2) - let exnRes2_1 = await client2.exchanges().get(grantMsgSaid2_1) - console.log(`Memeber2: received grant multisig/exn notifications` + JSON.stringify(exnRes2_1)); + let grantMsgSaid2 = await waitForNotification(client2, '/exn/ipex/grant') + //grantMsgSaid2 = await waitForNotification(client2, '/multisig/exn', true) + console.log(`Member2 received /exn/ipex/grant msg with SAID: ${grantMsgSaid2} `); + let exnRes2 = await client2.exchanges().get(grantMsgSaid2) + + assert.equal(grantMsgSaid, grantMsgSaid2); + + console.log(`Member2 /exn/ipex/grant msg : ` + JSON.stringify(exnRes2)); let recp2 = [aid1['state']].map((state) => state['i']); await multisigAdmitCredential( @@ -476,21 +450,28 @@ test('multisig', async function run() { exnRes.exn.i, recp2 ) - console.log(`Member2 admitted credential with SAID : ${exnRes.exn.e.acdc.d}`) + console.log(`Member2 admitted credential with SAID : ${exnRes.exn.e.acdc.d}`) // msgSaid = await waitForNotification(client3, '/exn/ipex/admit'); - // console.log('Member1 received exn notification with the admit response'); + // console.log('Issuer received exn admit response'); - let creds = await client1.credentials().list(); - console.log(`Member1 has ${creds.length} credential`); + let creds1 = await client1.credentials().list(); + console.log(`Member1 has ${creds1.length} credential`); - while (creds.length < 1) { - console.log(' No credentials yet...'); - await new Promise((resolve) => setTimeout(resolve, 500)); - creds = await client1.credentials().list(); - } - console.log(`Holder has ${creds.length} credential ` + JSON.stringify(creds)); + const MAX_RETRIES: number = 10 + let retryCount = 0 + while (retryCount < MAX_RETRIES) { + retryCount = retryCount + 1 + console.log(` retry-${retryCount}: No credentials yet...`); + + creds1 = await client1.credentials().list(); + if (creds1.length > 0) + break; + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + console.log(`Member1 has ${creds1.length} credential : ` + JSON.stringify(creds1)); + assert.equal(creds1.length, 1); }, 360000); @@ -509,13 +490,17 @@ async function waitAndMarkNotification(client: SignifyClient, route: string) { export async function waitForNotification( client: SignifyClient, route: string, - enableLog: boolean = false + enableLog: boolean = false, + maxRetries: number = 10 ) { if (enableLog === true) { console.log(` Waiting for notification with route : ${route}`) } + let retryCount = 0 let msgSaid = '' while (msgSaid == '') { + retryCount = retryCount + 1 + const notifications = await client.notifications().list() if (enableLog === true) { console.log(` Notifications list : ${JSON.stringify(notifications)}`) @@ -526,11 +511,30 @@ export async function waitForNotification( await client.notifications().mark(notif.i) } } + if (retryCount >= maxRetries) { + console.log(`No notification found with route : ${route}`) + break; + } + await new Promise((resolve) => setTimeout(resolve, 1000)) } return msgSaid } +export async function waitOperation( + client: SignifyClient, + op: Operation, + retries: number = 10 +): Promise> { + const WAIT = 1000; + while (retries-- > 0) { + op = await client.operations().get(op.name); + if (op.done === true) return op; + await sleep(WAIT); + } + throw new Error(`Timeout: operation ${op.name}`); +} + async function createAID(client: SignifyClient, name: string, wits: string[]) { const icpResult1 = await client.identifiers().create(name, { toad: wits.length, @@ -561,7 +565,8 @@ async function createRegistry( async function issueCredential( client: SignifyClient, - args: IssueCredentialArgs + args: IssueCredentialArgs, + recps: string[] ) { const result = await client.credentials().issue(args); @@ -584,13 +589,9 @@ async function issueCredential( iss: result.iss, }); - // await client - // .exchanges() - // .sendFromEvents(args.issuerName, 'credential', grant, gsigs, end, [ - // args.recipient, - // ]); - - await client.ipex().submitGrant(args.issuerName, grant, gsigs, end, [args.recipient]); + //// TODO: use multisig holder as exn recipient + //await client.ipex().submitGrant(args.issuerName, grant, gsigs, end, [args.recipient]); + await client.ipex().submitGrant(args.issuerName, grant, gsigs, end, recps); } console.log('Grant message sent'); @@ -653,44 +654,4 @@ async function multisigAdmitCredential( gembeds, recipients ) -} - - -async function multisigIssue( - client: SignifyClient, - memberName: string, - groupName: string, - result: IssueCredentialResult -) { - const leaderHab = await client.identifiers().get(memberName); - const groupHab = await client.identifiers().get(groupName); - const members = await client.identifiers().members(groupName); - - const keeper = client.manager!.get(groupHab); - const sigs = await keeper.sign(signify.b(result.anc.raw)); - const sigers = sigs.map((sig: string) => new signify.Siger({ qb64: sig })); - const ims = signify.d(signify.messagize(result.anc, sigers)); - const atc = ims.substring(result.anc.size); - - const embeds = { - acdc: [result.acdc, ''], - iss: [result.iss, ''], - anc: [result.anc, atc], - }; - - const recipients = members.signing - .map((m: { aid: string }) => m.aid) - .filter((aid: string) => aid !== leaderHab.prefix); - - await client - .exchanges() - .send( - memberName, - 'multisig', - leaderHab, - '/multisig/iss', - { gid: groupHab.prefix }, - embeds, - recipients - ); -} +} \ No newline at end of file From ad5dc1a9cb23c5af07f5805fa811f32267072dd2 Mon Sep 17 00:00:00 2001 From: Arshdeep Date: Tue, 9 Jan 2024 20:27:18 -0500 Subject: [PATCH 154/186] format code --- .../multisig-holder.test.ts | 175 +++++++++++------- 1 file changed, 103 insertions(+), 72 deletions(-) diff --git a/examples/integration-scripts/multisig-holder.test.ts b/examples/integration-scripts/multisig-holder.test.ts index 5986cd87..848899da 100644 --- a/examples/integration-scripts/multisig-holder.test.ts +++ b/examples/integration-scripts/multisig-holder.test.ts @@ -26,7 +26,7 @@ test('multisig', async function run() { const [client1, client2, client3] = await Promise.all([ getOrCreateClient(), getOrCreateClient(), - getOrCreateClient() + getOrCreateClient(), ]); // Create three identifiers, one for each client @@ -43,7 +43,7 @@ test('multisig', async function run() { const [oobi1, oobi2, oobi3] = await Promise.all([ client1.oobis().get('member1', 'agent'), client2.oobis().get('member2', 'agent'), - client3.oobis().get('issuer', 'agent') + client3.oobis().get('issuer', 'agent'), ]); let op1 = await client1.oobis().resolve(oobi2.oobis[0], 'member2'); @@ -185,7 +185,7 @@ test('multisig', async function run() { const multisig = identifiers2.aids[1].prefix; - // Multisig end role + // Multisig end role aid1 = await client1.identifiers().get('member1'); aid2 = await client2.identifiers().get('member2'); @@ -197,17 +197,22 @@ test('multisig', async function run() { console.log(`Starting multisig end role authorization for agent ${eid1}`); - let stamp = createTimestamp(); - let endRoleRes = await client1.identifiers().addEndRole('holder', 'agent', eid1, stamp); + let endRoleRes = await client1 + .identifiers() + .addEndRole('holder', 'agent', eid1, stamp); op1 = await endRoleRes.op(); let rpy = endRoleRes.serder; sigs = endRoleRes.sigs; let ghabState1 = ghab1['state']; let seal = [ 'SealEvent', - { i: ghab1['prefix'], s: ghabState1['ee']['s'], d: ghabState1['ee']['d'] }, + { + i: ghab1['prefix'], + s: ghabState1['ee']['s'], + d: ghabState1['ee']['d'], + }, ]; sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); let roleims = signify.d( @@ -256,7 +261,11 @@ test('multisig', async function run() { let ghabState2 = ghab2['state']; seal = [ 'SealEvent', - { i: ghab2['prefix'], s: ghabState2['ee']['s'], d: ghabState2['ee']['d'] }, + { + i: ghab2['prefix'], + s: ghabState2['ee']['s'], + d: ghabState2['ee']['d'], + }, ]; sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); roleims = signify.d( @@ -286,7 +295,6 @@ test('multisig', async function run() { op2 = await waitOperation(client2, op2, 30); console.log(`End role authorization for agent ${eid1} completed!`); - console.log(`Starting multisig end role authorization for agent ${eid2}`); endRoleRes = await client1 @@ -300,7 +308,11 @@ test('multisig', async function run() { ghabState1 = ghab1['state']; seal = [ 'SealEvent', - { i: ghab1['prefix'], s: ghabState1['ee']['s'], d: ghabState1['ee']['d'] }, + { + i: ghab1['prefix'], + s: ghabState1['ee']['s'], + d: ghabState1['ee']['d'], + }, ]; sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); roleims = signify.d( @@ -349,7 +361,11 @@ test('multisig', async function run() { ghabState2 = ghab2['state']; seal = [ 'SealEvent', - { i: ghab2['prefix'], s: ghabState2['ee']['s'], d: ghabState2['ee']['d'] }, + { + i: ghab2['prefix'], + s: ghabState2['ee']['s'], + d: ghabState2['ee']['d'], + }, ]; sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); @@ -381,44 +397,48 @@ test('multisig', async function run() { op2 = await waitOperation(client2, op2); console.log(`End role authorization for agent ${eid2} completed!`); - // Holder resolve multisig OOBI const oobiMultisig = await client1.oobis().get('holder', 'agent'); - console.log(`Memeber1: Holder multisig AID OOBIs: ` + JSON.stringify(oobiMultisig)); + console.log( + `Memeber1: Holder multisig AID OOBIs: ` + JSON.stringify(oobiMultisig) + ); const oobiMultisig2 = await client2.oobis().get('holder', 'agent'); - console.log(`Memeber2: Holder multisig AID OOBIs: ` + JSON.stringify(oobiMultisig2)); - + console.log( + `Memeber2: Holder multisig AID OOBIs: ` + JSON.stringify(oobiMultisig2) + ); op3 = await client3.oobis().resolve(oobiMultisig.oobis[0], 'holder'); op3 = await waitOperation(client3, op3); console.log(`Issuer resolved multisig holder OOBI`); - let holderAid = await client1.identifiers().get('holder'); aid1 = await client1.identifiers().get('member1'); aid2 = await client2.identifiers().get('member2'); console.log(`Issuer starting credential issuance to holder...`); const registires = await client3.registries().list('issuer'); - let recps: string[] = [aid1['prefix'], aid2['prefix']] - await issueCredential(client3, { - issuerName: 'issuer', - registryId: registires[0].regk, - schemaId: SCHEMA_SAID, - recipient: holderAid['prefix'], - data: { - LEI: '5493001KJTIIGC8Y1R17', + let recps: string[] = [aid1['prefix'], aid2['prefix']]; + await issueCredential( + client3, + { + issuerName: 'issuer', + registryId: registires[0].regk, + schemaId: SCHEMA_SAID, + recipient: holderAid['prefix'], + data: { + LEI: '5493001KJTIIGC8Y1R17', + }, }, - } - , recps + recps ); console.log(`Issuer sent credential grant to holder.`); - - let grantMsgSaid = await waitForNotification(client1, '/exn/ipex/grant') - console.log(`Member1 received /exn/ipex/grant msg with SAID: ${grantMsgSaid} `); - let exnRes = await client1.exchanges().get(grantMsgSaid) + let grantMsgSaid = await waitForNotification(client1, '/exn/ipex/grant'); + console.log( + `Member1 received /exn/ipex/grant msg with SAID: ${grantMsgSaid} ` + ); + let exnRes = await client1.exchanges().get(grantMsgSaid); recp = [aid2['state']].map((state) => state['i']); await multisigAdmitCredential( @@ -428,14 +448,17 @@ test('multisig', async function run() { exnRes.exn.d, exnRes.exn.i, recp - ) - console.log(`Member1 admitted credential with SAID : ${exnRes.exn.e.acdc.d}`) - + ); + console.log( + `Member1 admitted credential with SAID : ${exnRes.exn.e.acdc.d}` + ); - let grantMsgSaid2 = await waitForNotification(client2, '/exn/ipex/grant') + let grantMsgSaid2 = await waitForNotification(client2, '/exn/ipex/grant'); //grantMsgSaid2 = await waitForNotification(client2, '/multisig/exn', true) - console.log(`Member2 received /exn/ipex/grant msg with SAID: ${grantMsgSaid2} `); - let exnRes2 = await client2.exchanges().get(grantMsgSaid2) + console.log( + `Member2 received /exn/ipex/grant msg with SAID: ${grantMsgSaid2} ` + ); + let exnRes2 = await client2.exchanges().get(grantMsgSaid2); assert.equal(grantMsgSaid, grantMsgSaid2); @@ -449,8 +472,10 @@ test('multisig', async function run() { exnRes.exn.d, exnRes.exn.i, recp2 - ) - console.log(`Member2 admitted credential with SAID : ${exnRes.exn.e.acdc.d}`) + ); + console.log( + `Member2 admitted credential with SAID : ${exnRes.exn.e.acdc.d}` + ); // msgSaid = await waitForNotification(client3, '/exn/ipex/admit'); // console.log('Issuer received exn admit response'); @@ -458,21 +483,21 @@ test('multisig', async function run() { let creds1 = await client1.credentials().list(); console.log(`Member1 has ${creds1.length} credential`); - const MAX_RETRIES: number = 10 - let retryCount = 0 + const MAX_RETRIES: number = 10; + let retryCount = 0; while (retryCount < MAX_RETRIES) { - retryCount = retryCount + 1 + retryCount = retryCount + 1; console.log(` retry-${retryCount}: No credentials yet...`); creds1 = await client1.credentials().list(); - if (creds1.length > 0) - break; + if (creds1.length > 0) break; await new Promise((resolve) => setTimeout(resolve, 1000)); } - console.log(`Member1 has ${creds1.length} credential : ` + JSON.stringify(creds1)); + console.log( + `Member1 has ${creds1.length} credential : ` + JSON.stringify(creds1) + ); assert.equal(creds1.length, 1); - }, 360000); async function waitAndMarkNotification(client: SignifyClient, route: string) { @@ -494,31 +519,33 @@ export async function waitForNotification( maxRetries: number = 10 ) { if (enableLog === true) { - console.log(` Waiting for notification with route : ${route}`) + console.log(` Waiting for notification with route : ${route}`); } - let retryCount = 0 - let msgSaid = '' + let retryCount = 0; + let msgSaid = ''; while (msgSaid == '') { - retryCount = retryCount + 1 + retryCount = retryCount + 1; - const notifications = await client.notifications().list() + const notifications = await client.notifications().list(); if (enableLog === true) { - console.log(` Notifications list : ${JSON.stringify(notifications)}`) + console.log( + ` Notifications list : ${JSON.stringify(notifications)}` + ); } for (const notif of notifications.notes) { if (notif.a.r == route) { - msgSaid = notif.a.d - await client.notifications().mark(notif.i) + msgSaid = notif.a.d; + await client.notifications().mark(notif.i); } } if (retryCount >= maxRetries) { - console.log(`No notification found with route : ${route}`) + console.log(`No notification found with route : ${route}`); break; } - await new Promise((resolve) => setTimeout(resolve, 1000)) + await new Promise((resolve) => setTimeout(resolve, 1000)); } - return msgSaid + return msgSaid; } export async function waitOperation( @@ -591,7 +618,9 @@ async function issueCredential( //// TODO: use multisig holder as exn recipient //await client.ipex().submitGrant(args.issuerName, grant, gsigs, end, [args.recipient]); - await client.ipex().submitGrant(args.issuerName, grant, gsigs, end, recps); + await client + .ipex() + .submitGrant(args.issuerName, grant, gsigs, end, recps); } console.log('Grant message sent'); @@ -612,16 +641,18 @@ async function multisigAdmitCredential( issuerPrefix: string, recipients: string[] ) { - const dt = createTimestamp() + const dt = createTimestamp(); - let mHab = await client.identifiers().get(memberAlias) - let gHab = await client.identifiers().get(groupName) + let mHab = await client.identifiers().get(memberAlias); + let gHab = await client.identifiers().get(groupName); const [admit, sigs, end] = await client .ipex() - .admit(groupName, '', grantSaid, dt) + .admit(groupName, '', grantSaid, dt); - await client.ipex().submitAdmit(groupName, admit, sigs, end, [issuerPrefix]); + await client + .ipex() + .submitAdmit(groupName, admit, sigs, end, [issuerPrefix]); // await client // .exchanges() // .sendFromEvents(groupName, 'credential', admit, sigs, end, [issuerPrefix]) @@ -630,18 +661,18 @@ async function multisigAdmitCredential( return; } - let mstate = gHab['state'] + let mstate = gHab['state']; let seal = [ 'SealEvent', - { i: gHab['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] } - ] - let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })) - let ims = signify.d(signify.messagize(admit, sigers, seal)) - let atc = ims.substring(admit.size) - atc += end + { i: gHab['prefix'], s: mstate['ee']['s'], d: mstate['ee']['d'] }, + ]; + let sigers = sigs.map((sig: any) => new signify.Siger({ qb64: sig })); + let ims = signify.d(signify.messagize(admit, sigers, seal)); + let atc = ims.substring(admit.size); + atc += end; let gembeds = { - exn: [admit, atc] - } + exn: [admit, atc], + }; await client .exchanges() @@ -653,5 +684,5 @@ async function multisigAdmitCredential( { gid: gHab['prefix'] }, gembeds, recipients - ) -} \ No newline at end of file + ); +} From b4b3bf3095597fbae14c230292975a144d5122b1 Mon Sep 17 00:00:00 2001 From: Arshdeep Date: Sun, 14 Jan 2024 20:49:16 -0500 Subject: [PATCH 155/186] refractor multisig-holder test - refractor multisig-holder test - fix multisig-holder not receiving credential bug in multisig-holder.test.ts --- .../multisig-holder.test.ts | 104 +++--------------- 1 file changed, 18 insertions(+), 86 deletions(-) diff --git a/examples/integration-scripts/multisig-holder.test.ts b/examples/integration-scripts/multisig-holder.test.ts index 848899da..d74819e8 100644 --- a/examples/integration-scripts/multisig-holder.test.ts +++ b/examples/integration-scripts/multisig-holder.test.ts @@ -1,13 +1,7 @@ import { strict as assert } from 'assert'; -import signify, { - SignifyClient, - Serder, - IssueCredentialResult, - IssueCredentialArgs, - Operation, -} from 'signify-ts'; +import signify, { SignifyClient, IssueCredentialArgs } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -import { sleep, waitForNotifications } from './utils/test-util'; +import { waitForNotifications, waitOperation } from './utils/test-util'; import { getOrCreateClient } from './utils/test-setup'; const { vleiServerUrl } = resolveEnvironment(); @@ -20,6 +14,8 @@ const WITNESS_AIDS = [ const SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; const SCHEMA_OOBI = `${vleiServerUrl}/oobi/${SCHEMA_SAID}`; +const TIME = createTimestamp(); + test('multisig', async function run() { await signify.ready(); // Boot Four clients @@ -291,8 +287,8 @@ test('multisig', async function run() { `Member2 authorized agent role to ${eid1}, waiting for others to authorize...` ); // Check for completion - op1 = await waitOperation(client1, op1, 30); - op2 = await waitOperation(client2, op2, 30); + op1 = await waitOperation(client1, op1); + op2 = await waitOperation(client2, op2); console.log(`End role authorization for agent ${eid1} completed!`); console.log(`Starting multisig end role authorization for agent ${eid2}`); @@ -398,17 +394,10 @@ test('multisig', async function run() { console.log(`End role authorization for agent ${eid2} completed!`); // Holder resolve multisig OOBI - const oobiMultisig = await client1.oobis().get('holder', 'agent'); - console.log( - `Memeber1: Holder multisig AID OOBIs: ` + JSON.stringify(oobiMultisig) - ); - - const oobiMultisig2 = await client2.oobis().get('holder', 'agent'); - console.log( - `Memeber2: Holder multisig AID OOBIs: ` + JSON.stringify(oobiMultisig2) - ); + const oobisRes = await client1.oobis().get('holder', 'agent'); + let oobiMultisig = oobisRes.oobis[0].split('/agent/')[0]; - op3 = await client3.oobis().resolve(oobiMultisig.oobis[0], 'holder'); + op3 = await client3.oobis().resolve(oobiMultisig, 'holder'); op3 = await waitOperation(client3, op3); console.log(`Issuer resolved multisig holder OOBI`); @@ -434,7 +423,10 @@ test('multisig', async function run() { ); console.log(`Issuer sent credential grant to holder.`); - let grantMsgSaid = await waitForNotification(client1, '/exn/ipex/grant'); + let grantMsgSaid = await waitAndMarkNotification( + client1, + '/exn/ipex/grant' + ); console.log( `Member1 received /exn/ipex/grant msg with SAID: ${grantMsgSaid} ` ); @@ -453,8 +445,10 @@ test('multisig', async function run() { `Member1 admitted credential with SAID : ${exnRes.exn.e.acdc.d}` ); - let grantMsgSaid2 = await waitForNotification(client2, '/exn/ipex/grant'); - //grantMsgSaid2 = await waitForNotification(client2, '/multisig/exn', true) + let grantMsgSaid2 = await waitAndMarkNotification( + client2, + '/exn/ipex/grant' + ); console.log( `Member2 received /exn/ipex/grant msg with SAID: ${grantMsgSaid2} ` ); @@ -477,9 +471,6 @@ test('multisig', async function run() { `Member2 admitted credential with SAID : ${exnRes.exn.e.acdc.d}` ); - // msgSaid = await waitForNotification(client3, '/exn/ipex/admit'); - // console.log('Issuer received exn admit response'); - let creds1 = await client1.credentials().list(); console.log(`Member1 has ${creds1.length} credential`); @@ -512,56 +503,6 @@ async function waitAndMarkNotification(client: SignifyClient, route: string) { return notes[notes.length - 1]?.a.d ?? ''; } -export async function waitForNotification( - client: SignifyClient, - route: string, - enableLog: boolean = false, - maxRetries: number = 10 -) { - if (enableLog === true) { - console.log(` Waiting for notification with route : ${route}`); - } - let retryCount = 0; - let msgSaid = ''; - while (msgSaid == '') { - retryCount = retryCount + 1; - - const notifications = await client.notifications().list(); - if (enableLog === true) { - console.log( - ` Notifications list : ${JSON.stringify(notifications)}` - ); - } - for (const notif of notifications.notes) { - if (notif.a.r == route) { - msgSaid = notif.a.d; - await client.notifications().mark(notif.i); - } - } - if (retryCount >= maxRetries) { - console.log(`No notification found with route : ${route}`); - break; - } - - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - return msgSaid; -} - -export async function waitOperation( - client: SignifyClient, - op: Operation, - retries: number = 10 -): Promise> { - const WAIT = 1000; - while (retries-- > 0) { - op = await client.operations().get(op.name); - if (op.done === true) return op; - await sleep(WAIT); - } - throw new Error(`Timeout: operation ${op.name}`); -} - async function createAID(client: SignifyClient, name: string, wits: string[]) { const icpResult1 = await client.identifiers().create(name, { toad: wits.length, @@ -641,25 +582,16 @@ async function multisigAdmitCredential( issuerPrefix: string, recipients: string[] ) { - const dt = createTimestamp(); - let mHab = await client.identifiers().get(memberAlias); let gHab = await client.identifiers().get(groupName); const [admit, sigs, end] = await client .ipex() - .admit(groupName, '', grantSaid, dt); + .admit(groupName, '', grantSaid, TIME); await client .ipex() .submitAdmit(groupName, admit, sigs, end, [issuerPrefix]); - // await client - // .exchanges() - // .sendFromEvents(groupName, 'credential', admit, sigs, end, [issuerPrefix]) - - if (recipients?.length < 1) { - return; - } let mstate = gHab['state']; let seal = [ From 8d010c9670676340ac1325c1811237464c91a9b1 Mon Sep 17 00:00:00 2001 From: Nuttawut Kongsuwan Date: Mon, 15 Jan 2024 19:27:07 +0700 Subject: [PATCH 156/186] fix privacy in issuance Signed-off-by: Nuttawut Kongsuwan --- src/keri/app/credentialing.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 0443b4ef..be55ee3e 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -201,7 +201,7 @@ export class Credentials { const [, subject] = Saider.saidify({ d: '', - u: args.privacy ? new Salter({}) : undefined, + u: args.privacy ? new Salter({}).qb64 : undefined, i: args.recipient, dt: dt, ...args.data, @@ -210,7 +210,7 @@ export class Credentials { const [, acdc] = Saider.saidify({ v: versify(Ident.ACDC, undefined, Serials.JSON, 0), d: '', - u: args.privacy ? new Salter({}) : undefined, + u: args.privacy ? new Salter({}).qb64 : undefined, i: hab.prefix, ri: args.registryId, s: args.schemaId, From b6d7059a8e7418f0729d89d2ffbcd1080003c27e Mon Sep 17 00:00:00 2001 From: Arshdeep Date: Mon, 15 Jan 2024 15:54:55 -0500 Subject: [PATCH 157/186] refractor: use multisig holder aid to send cred grant - refractor: use multisig holder aid to send cred grant instead of member AIDs Signed-off-by: arshdeep singh --- .../multisig-holder.test.ts | 36 +++++++------------ 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/examples/integration-scripts/multisig-holder.test.ts b/examples/integration-scripts/multisig-holder.test.ts index d74819e8..ccc76871 100644 --- a/examples/integration-scripts/multisig-holder.test.ts +++ b/examples/integration-scripts/multisig-holder.test.ts @@ -67,9 +67,9 @@ test('multisig', async function run() { console.log('Issuer resolved 3 OOBIs'); //// First member start the creation of a multisig identifier - let rstates = [aid1['state'], aid2['state']]; - let states = rstates; - let icpResult1 = await client1.identifiers().create('holder', { + const rstates = [aid1['state'], aid2['state']]; + const states = rstates; + const icpResult1 = await client1.identifiers().create('holder', { algo: signify.Algos.group, mhab: aid1, isith: 2, @@ -179,8 +179,6 @@ test('multisig', async function run() { `[${identifiers2.aids[1].prefix}]` ); - const multisig = identifiers2.aids[1].prefix; - // Multisig end role aid1 = await client1.identifiers().get('member1'); @@ -407,20 +405,15 @@ test('multisig', async function run() { console.log(`Issuer starting credential issuance to holder...`); const registires = await client3.registries().list('issuer'); - let recps: string[] = [aid1['prefix'], aid2['prefix']]; - await issueCredential( - client3, - { - issuerName: 'issuer', - registryId: registires[0].regk, - schemaId: SCHEMA_SAID, - recipient: holderAid['prefix'], - data: { - LEI: '5493001KJTIIGC8Y1R17', - }, + await issueCredential(client3, { + issuerName: 'issuer', + registryId: registires[0].regk, + schemaId: SCHEMA_SAID, + recipient: holderAid['prefix'], + data: { + LEI: '5493001KJTIIGC8Y1R17', }, - recps - ); + }); console.log(`Issuer sent credential grant to holder.`); let grantMsgSaid = await waitAndMarkNotification( @@ -533,8 +526,7 @@ async function createRegistry( async function issueCredential( client: SignifyClient, - args: IssueCredentialArgs, - recps: string[] + args: IssueCredentialArgs ) { const result = await client.credentials().issue(args); @@ -557,11 +549,9 @@ async function issueCredential( iss: result.iss, }); - //// TODO: use multisig holder as exn recipient - //await client.ipex().submitGrant(args.issuerName, grant, gsigs, end, [args.recipient]); await client .ipex() - .submitGrant(args.issuerName, grant, gsigs, end, recps); + .submitGrant(args.issuerName, grant, gsigs, end, [args.recipient]); } console.log('Grant message sent'); From 33d74b9f84592bca87447b711b44f9267ead2244 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Tue, 16 Jan 2024 11:53:25 -0800 Subject: [PATCH 158/186] Update keyState call to use hex string instead of int for sequence number. --- .../delegation-multisig.test.ts | 2 +- .../integration-scripts/delegation.test.ts | 2 +- examples/integration-scripts/multisig.test.ts | 26 +++++++++---------- .../integration-scripts/singlesig-ixn.test.ts | 2 +- .../integration-scripts/singlesig-rot.test.ts | 2 +- src/keri/app/coring.ts | 2 +- test/app/coring.test.ts | 4 +-- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/integration-scripts/delegation-multisig.test.ts b/examples/integration-scripts/delegation-multisig.test.ts index a9a9d5b2..206e3e3e 100644 --- a/examples/integration-scripts/delegation-multisig.test.ts +++ b/examples/integration-scripts/delegation-multisig.test.ts @@ -142,7 +142,7 @@ test('delegation-multisig', async () => { // Client 0 approves delegation const anchor = { i: delegatePrefix, - s: 0, + s: '0', d: delegatePrefix, }; await client0.identifiers().interact('delegator', anchor); diff --git a/examples/integration-scripts/delegation.test.ts b/examples/integration-scripts/delegation.test.ts index 7dbc70eb..ae771826 100644 --- a/examples/integration-scripts/delegation.test.ts +++ b/examples/integration-scripts/delegation.test.ts @@ -75,7 +75,7 @@ test('delegation', async () => { // Client 1 approves deletation const anchor = { i: delegatePrefix, - s: 0, + s: '0', d: delegatePrefix, }; await client1.identifiers().interact('delegator', anchor); diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index dae67d0f..fcd7fc6c 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -592,29 +592,29 @@ test('multisig', async function run() { console.log('Member3 rotated keys'); // Update new key states - op1 = await client1.keyStates().query(aid2.prefix, 1); + op1 = await client1.keyStates().query(aid2.prefix, "1"); op1 = await waitOperation(client1, op1); const aid2State = op1['response']; - op1 = await client1.keyStates().query(aid3.prefix, 1); + op1 = await client1.keyStates().query(aid3.prefix, "1"); op1 = await waitOperation(client1, op1); const aid3State = op1['response']; - op2 = await client2.keyStates().query(aid3.prefix, 1); + op2 = await client2.keyStates().query(aid3.prefix, "1"); op2 = await waitOperation(client2, op2); - op2 = await client2.keyStates().query(aid1.prefix, 1); + op2 = await client2.keyStates().query(aid1.prefix, "1"); op2 = await waitOperation(client2, op2); const aid1State = op2['response']; - op3 = await client3.keyStates().query(aid1.prefix, 1); + op3 = await client3.keyStates().query(aid1.prefix, "1"); op3 = await waitOperation(client3, op3); - op3 = await client3.keyStates().query(aid2.prefix, 1); + op3 = await client3.keyStates().query(aid2.prefix, "1"); op3 = await waitOperation(client3, op3); - op4 = await client4.keyStates().query(aid1.prefix, 1); + op4 = await client4.keyStates().query(aid1.prefix, "1"); op4 = await waitOperation(client4, op4); - op4 = await client4.keyStates().query(aid2.prefix, 1); + op4 = await client4.keyStates().query(aid2.prefix, "1"); op4 = await waitOperation(client4, op4); - op4 = await client4.keyStates().query(aid3.prefix, 1); + op4 = await client4.keyStates().query(aid3.prefix, "1"); op4 = await waitOperation(client4, op4); rstates = [aid1State, aid2State, aid3State]; @@ -945,13 +945,13 @@ test('multisig', async function run() { const m = await client1.identifiers().get('multisig'); // Update states - op1 = await client1.keyStates().query(m.prefix, 4); + op1 = await client1.keyStates().query(m.prefix, "4"); op1 = await waitOperation(client1, op1); - op2 = await client2.keyStates().query(m.prefix, 4); + op2 = await client2.keyStates().query(m.prefix, "4"); op2 = await waitOperation(client2, op2); - op3 = await client3.keyStates().query(m.prefix, 4); + op3 = await client3.keyStates().query(m.prefix, "4"); op3 = await waitOperation(client3, op3); - op4 = await client4.keyStates().query(m.prefix, 4); + op4 = await client4.keyStates().query(m.prefix, "4"); op4 = await waitOperation(client4, op4); // IPEX grant message diff --git a/examples/integration-scripts/singlesig-ixn.test.ts b/examples/integration-scripts/singlesig-ixn.test.ts index 1986ba6a..b65bbcd1 100644 --- a/examples/integration-scripts/singlesig-ixn.test.ts +++ b/examples/integration-scripts/singlesig-ixn.test.ts @@ -70,7 +70,7 @@ describe('singlesig-ixn', () => { // refresh remote keystate let op = await client2 .keyStates() - .query(contact1_id, parseInt(keystate1.s), undefined); + .query(contact1_id, keystate1.s, undefined); op = await waitOperation(client2, op); const keystate3: KeyState = op.response; // local and remote keystate match diff --git a/examples/integration-scripts/singlesig-rot.test.ts b/examples/integration-scripts/singlesig-rot.test.ts index d5a7af91..f40c7dd0 100644 --- a/examples/integration-scripts/singlesig-rot.test.ts +++ b/examples/integration-scripts/singlesig-rot.test.ts @@ -79,7 +79,7 @@ describe('singlesig-rot', () => { // refresh remote keystate let op = await client2 .keyStates() - .query(contact1_id, parseInt(keystate1.s), undefined); + .query(contact1_id, keystate1.s, undefined); op = await waitOperation(client2, op); const keystate3: KeyState = op.response; // local and remote keystate match diff --git a/src/keri/app/coring.ts b/src/keri/app/coring.ts index 1b23d79d..f96901ef 100644 --- a/src/keri/app/coring.ts +++ b/src/keri/app/coring.ts @@ -173,7 +173,7 @@ export class KeyStates { * @param {string} [anchor] Optional anchor SAID * @returns {Promise} A promise to the long-running operation */ - async query(pre: string, sn?: number, anchor?: string): Promise { + async query(pre: string, sn?: string, anchor?: string): Promise { const path = `/queries`; const data: any = { pre: pre, diff --git a/test/app/coring.test.ts b/test/app/coring.test.ts index 56b857d9..f3f60c60 100644 --- a/test/app/coring.test.ts +++ b/test/app/coring.test.ts @@ -261,7 +261,7 @@ describe('Coring', () => { await keyStates.query( 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX', - 1, + "1", 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' ); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; @@ -272,7 +272,7 @@ describe('Coring', () => { lastBody.pre, 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' ); - assert.equal(lastBody.sn, 1); + assert.equal(lastBody.sn, "1"); assert.equal( lastBody.anchor, 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' From f945bf1f5456aecd9b16587f89f5d3318774e7c4 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Tue, 16 Jan 2024 13:40:38 -0700 Subject: [PATCH 159/186] prettier --- examples/integration-scripts/multisig.test.ts | 26 +++++++++---------- test/app/coring.test.ts | 4 +-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index fcd7fc6c..bb98265c 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -592,29 +592,29 @@ test('multisig', async function run() { console.log('Member3 rotated keys'); // Update new key states - op1 = await client1.keyStates().query(aid2.prefix, "1"); + op1 = await client1.keyStates().query(aid2.prefix, '1'); op1 = await waitOperation(client1, op1); const aid2State = op1['response']; - op1 = await client1.keyStates().query(aid3.prefix, "1"); + op1 = await client1.keyStates().query(aid3.prefix, '1'); op1 = await waitOperation(client1, op1); const aid3State = op1['response']; - op2 = await client2.keyStates().query(aid3.prefix, "1"); + op2 = await client2.keyStates().query(aid3.prefix, '1'); op2 = await waitOperation(client2, op2); - op2 = await client2.keyStates().query(aid1.prefix, "1"); + op2 = await client2.keyStates().query(aid1.prefix, '1'); op2 = await waitOperation(client2, op2); const aid1State = op2['response']; - op3 = await client3.keyStates().query(aid1.prefix, "1"); + op3 = await client3.keyStates().query(aid1.prefix, '1'); op3 = await waitOperation(client3, op3); - op3 = await client3.keyStates().query(aid2.prefix, "1"); + op3 = await client3.keyStates().query(aid2.prefix, '1'); op3 = await waitOperation(client3, op3); - op4 = await client4.keyStates().query(aid1.prefix, "1"); + op4 = await client4.keyStates().query(aid1.prefix, '1'); op4 = await waitOperation(client4, op4); - op4 = await client4.keyStates().query(aid2.prefix, "1"); + op4 = await client4.keyStates().query(aid2.prefix, '1'); op4 = await waitOperation(client4, op4); - op4 = await client4.keyStates().query(aid3.prefix, "1"); + op4 = await client4.keyStates().query(aid3.prefix, '1'); op4 = await waitOperation(client4, op4); rstates = [aid1State, aid2State, aid3State]; @@ -945,13 +945,13 @@ test('multisig', async function run() { const m = await client1.identifiers().get('multisig'); // Update states - op1 = await client1.keyStates().query(m.prefix, "4"); + op1 = await client1.keyStates().query(m.prefix, '4'); op1 = await waitOperation(client1, op1); - op2 = await client2.keyStates().query(m.prefix, "4"); + op2 = await client2.keyStates().query(m.prefix, '4'); op2 = await waitOperation(client2, op2); - op3 = await client3.keyStates().query(m.prefix, "4"); + op3 = await client3.keyStates().query(m.prefix, '4'); op3 = await waitOperation(client3, op3); - op4 = await client4.keyStates().query(m.prefix, "4"); + op4 = await client4.keyStates().query(m.prefix, '4'); op4 = await waitOperation(client4, op4); // IPEX grant message diff --git a/test/app/coring.test.ts b/test/app/coring.test.ts index f3f60c60..ea68a0d7 100644 --- a/test/app/coring.test.ts +++ b/test/app/coring.test.ts @@ -261,7 +261,7 @@ describe('Coring', () => { await keyStates.query( 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX', - "1", + '1', 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' ); lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; @@ -272,7 +272,7 @@ describe('Coring', () => { lastBody.pre, 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX' ); - assert.equal(lastBody.sn, "1"); + assert.equal(lastBody.sn, '1'); assert.equal( lastBody.anchor, 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' From 4c081a1b539f57c310e53ac8b5b12f49645312c8 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Sat, 2 Dec 2023 01:23:16 +0200 Subject: [PATCH 160/186] delegate test --- .../integration-scripts/singlesig-dip.test.ts | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 examples/integration-scripts/singlesig-dip.test.ts diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts new file mode 100644 index 00000000..e376f4b8 --- /dev/null +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -0,0 +1,74 @@ +import { CreateIdentiferArgs, EventResult, SignifyClient } from "signify-ts"; +import { getOrCreateClients, getOrCreateContact, getOrCreateIdentifier } from "./utils/test-setup"; +import { waitOperation } from "./utils/test-util"; +import { resolveEnvironment } from "./utils/resolve-env"; + +let client1: SignifyClient, client2: SignifyClient; +let name1_id: string, name1_oobi: string; +let contact1_id: string; + +beforeAll(async () => { + [client1, client2] = await getOrCreateClients(2); +}); +beforeAll(async () => { + [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, "name1"); +}); +beforeAll(async () => { + contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); +}); + +describe("singlesig-dip", () => { + test("delegate1a", async () => { + let kargs: CreateIdentiferArgs = { + delpre: name1_id + }; + let result = await client2.identifiers().create("delegate1", kargs); + let op = await result.op(); + let dip1 = await client2.identifiers().get("delegate1"); + expect(op.name).toEqual(`delegation.${dip1.prefix}`); + }); + test("delegator1", async () => { + let dip1 = await client2.identifiers().get("delegate1"); + let seal = { + i: dip1.prefix, + s: 0, + d: dip1.prefix + }; + let result = await client1.identifiers().interact("name1", seal); + let op = waitOperation(client1, await result.op()); + }) + test("delegate1b", async () => { + let dip1 = await client2.identifiers().get("delegate1"); + let op: any = { name: `delegation.${dip1.prefix}` }; + op = await waitOperation(client2, op); + expect(dip1.prefix).toEqual(op.response.i); + }); + test("delegate2a", async () => { + let env = resolveEnvironment(); + let kargs: CreateIdentiferArgs = { + delpre: name1_id, + toad: env.witnessIds.length, + wits: env.witnessIds + }; + let result = await client2.identifiers().create("delegate2", kargs); + let op = await result.op(); + let dip1 = await client2.identifiers().get("delegate2"); + expect(op.name).toEqual(`delegation.${dip1.prefix}`); + }); + test("delegator2", async () => { + let dip1 = await client2.identifiers().get("delegate2"); + let seal = { + i: dip1.prefix, + s: 0, + d: dip1.prefix + }; + let result = await client1.identifiers().interact("name1", seal); + let op = waitOperation(client1, await result.op()); + }) + test("delegate2b", async () => { + let dip1 = await client2.identifiers().get("delegate2"); + let op: any = { name: `delegation.${dip1.prefix}` }; + op = await waitOperation(client2, op); + expect(dip1.prefix).toEqual(op.response.i); + }); +}); From e144f2e6aadd7494496f294f77f76c7d619d5161 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Sat, 2 Dec 2023 10:16:57 +0200 Subject: [PATCH 161/186] cleanup --- examples/integration-scripts/singlesig-dip.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index e376f4b8..a1439ab1 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -1,4 +1,4 @@ -import { CreateIdentiferArgs, EventResult, SignifyClient } from "signify-ts"; +import { CreateIdentiferArgs, SignifyClient } from "signify-ts"; import { getOrCreateClients, getOrCreateContact, getOrCreateIdentifier } from "./utils/test-setup"; import { waitOperation } from "./utils/test-util"; import { resolveEnvironment } from "./utils/resolve-env"; From 5ab8b3ddd581fc585c1b2c90a84bfcb756802436 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Sat, 2 Dec 2023 10:26:33 +0200 Subject: [PATCH 162/186] cleanup --- .../integration-scripts/singlesig-dip.test.ts | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index a1439ab1..38a9a418 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -19,31 +19,35 @@ beforeAll(async () => { describe("singlesig-dip", () => { test("delegate1a", async () => { + // delegate creates identifier without witnesses let kargs: CreateIdentiferArgs = { delpre: name1_id }; let result = await client2.identifiers().create("delegate1", kargs); let op = await result.op(); - let dip1 = await client2.identifiers().get("delegate1"); - expect(op.name).toEqual(`delegation.${dip1.prefix}`); + let delegate1 = await client2.identifiers().get("delegate1"); + expect(op.name).toEqual(`delegation.${delegate1.prefix}`); }); test("delegator1", async () => { - let dip1 = await client2.identifiers().get("delegate1"); + // delegator approves delegate + let delegate1 = await client2.identifiers().get("delegate1"); let seal = { - i: dip1.prefix, + i: delegate1.prefix, s: 0, - d: dip1.prefix + d: delegate1.prefix }; let result = await client1.identifiers().interact("name1", seal); let op = waitOperation(client1, await result.op()); }) test("delegate1b", async () => { - let dip1 = await client2.identifiers().get("delegate1"); - let op: any = { name: `delegation.${dip1.prefix}` }; + // delegate waits for completion + let delegate1 = await client2.identifiers().get("delegate1"); + let op: any = { name: `delegation.${delegate1.prefix}` }; op = await waitOperation(client2, op); - expect(dip1.prefix).toEqual(op.response.i); + expect(delegate1.prefix).toEqual(op.response.i); }); test("delegate2a", async () => { + // delegate creates identifier with default witness config let env = resolveEnvironment(); let kargs: CreateIdentiferArgs = { delpre: name1_id, @@ -52,23 +56,26 @@ describe("singlesig-dip", () => { }; let result = await client2.identifiers().create("delegate2", kargs); let op = await result.op(); - let dip1 = await client2.identifiers().get("delegate2"); - expect(op.name).toEqual(`delegation.${dip1.prefix}`); + let delegate2 = await client2.identifiers().get("delegate2"); + expect(op.name).toEqual(`delegation.${delegate2.prefix}`); }); test("delegator2", async () => { - let dip1 = await client2.identifiers().get("delegate2"); + // delegator approves delegate + let delegate2 = await client2.identifiers().get("delegate2"); let seal = { - i: dip1.prefix, + i: delegate2.prefix, s: 0, - d: dip1.prefix + d: delegate2.prefix }; let result = await client1.identifiers().interact("name1", seal); let op = waitOperation(client1, await result.op()); }) - test("delegate2b", async () => { - let dip1 = await client2.identifiers().get("delegate2"); - let op: any = { name: `delegation.${dip1.prefix}` }; + // https://github.com/WebOfTrust/signify-ts/issues/145 + test.failing("delegate2b", async () => { + // delegate waits for completion + let delegate2 = await client2.identifiers().get("delegate2"); + let op: any = { name: `delegation.${delegate2.prefix}` }; op = await waitOperation(client2, op); - expect(dip1.prefix).toEqual(op.response.i); - }); + expect(delegate2.prefix).toEqual(op.response.i); + }, 30000); }); From 2272f43b0b813f6ef08369aa86f17464c2c98827 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Sat, 2 Dec 2023 10:34:11 +0200 Subject: [PATCH 163/186] fix code style issues --- .../integration-scripts/singlesig-dip.test.ts | 76 ++++++++++--------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index 38a9a418..037dca0e 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -1,7 +1,11 @@ -import { CreateIdentiferArgs, SignifyClient } from "signify-ts"; -import { getOrCreateClients, getOrCreateContact, getOrCreateIdentifier } from "./utils/test-setup"; -import { waitOperation } from "./utils/test-util"; -import { resolveEnvironment } from "./utils/resolve-env"; +import { CreateIdentiferArgs, SignifyClient } from 'signify-ts'; +import { + getOrCreateClients, + getOrCreateContact, + getOrCreateIdentifier, +} from './utils/test-setup'; +import { waitOperation } from './utils/test-util'; +import { resolveEnvironment } from './utils/resolve-env'; let client1: SignifyClient, client2: SignifyClient; let name1_id: string, name1_oobi: string; @@ -11,71 +15,75 @@ beforeAll(async () => { [client1, client2] = await getOrCreateClients(2); }); beforeAll(async () => { - [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, "name1"); + [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, 'name1'); }); beforeAll(async () => { - contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); + contact1_id = await getOrCreateContact(client2, 'contact1', name1_oobi); }); -describe("singlesig-dip", () => { - test("delegate1a", async () => { +describe('singlesig-dip', () => { + test('delegate1a', async () => { // delegate creates identifier without witnesses let kargs: CreateIdentiferArgs = { - delpre: name1_id + delpre: name1_id, }; - let result = await client2.identifiers().create("delegate1", kargs); + let result = await client2.identifiers().create('delegate1', kargs); let op = await result.op(); - let delegate1 = await client2.identifiers().get("delegate1"); + let delegate1 = await client2.identifiers().get('delegate1'); expect(op.name).toEqual(`delegation.${delegate1.prefix}`); }); - test("delegator1", async () => { + test('delegator1', async () => { // delegator approves delegate - let delegate1 = await client2.identifiers().get("delegate1"); + let delegate1 = await client2.identifiers().get('delegate1'); let seal = { i: delegate1.prefix, s: 0, - d: delegate1.prefix + d: delegate1.prefix, }; - let result = await client1.identifiers().interact("name1", seal); + let result = await client1.identifiers().interact('name1', seal); let op = waitOperation(client1, await result.op()); - }) - test("delegate1b", async () => { + }); + test('delegate1b', async () => { // delegate waits for completion - let delegate1 = await client2.identifiers().get("delegate1"); + let delegate1 = await client2.identifiers().get('delegate1'); let op: any = { name: `delegation.${delegate1.prefix}` }; op = await waitOperation(client2, op); expect(delegate1.prefix).toEqual(op.response.i); }); - test("delegate2a", async () => { + test('delegate2a', async () => { // delegate creates identifier with default witness config let env = resolveEnvironment(); let kargs: CreateIdentiferArgs = { delpre: name1_id, toad: env.witnessIds.length, - wits: env.witnessIds + wits: env.witnessIds, }; - let result = await client2.identifiers().create("delegate2", kargs); + let result = await client2.identifiers().create('delegate2', kargs); let op = await result.op(); - let delegate2 = await client2.identifiers().get("delegate2"); + let delegate2 = await client2.identifiers().get('delegate2'); expect(op.name).toEqual(`delegation.${delegate2.prefix}`); }); - test("delegator2", async () => { + test('delegator2', async () => { // delegator approves delegate - let delegate2 = await client2.identifiers().get("delegate2"); + let delegate2 = await client2.identifiers().get('delegate2'); let seal = { i: delegate2.prefix, s: 0, - d: delegate2.prefix + d: delegate2.prefix, }; - let result = await client1.identifiers().interact("name1", seal); + let result = await client1.identifiers().interact('name1', seal); let op = waitOperation(client1, await result.op()); - }) + }); // https://github.com/WebOfTrust/signify-ts/issues/145 - test.failing("delegate2b", async () => { - // delegate waits for completion - let delegate2 = await client2.identifiers().get("delegate2"); - let op: any = { name: `delegation.${delegate2.prefix}` }; - op = await waitOperation(client2, op); - expect(delegate2.prefix).toEqual(op.response.i); - }, 30000); + test.failing( + 'delegate2b', + async () => { + // delegate waits for completion + let delegate2 = await client2.identifiers().get('delegate2'); + let op: any = { name: `delegation.${delegate2.prefix}` }; + op = await waitOperation(client2, op); + expect(delegate2.prefix).toEqual(op.response.i); + }, + 30000 + ); }); From 926b76b67e440af9b91efd89fc32f56a5c02f5fc Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Sat, 16 Dec 2023 10:58:18 +0200 Subject: [PATCH 164/186] issue #145 - integration test to reproduce --- .../integration-scripts/singlesig-dip.test.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index 037dca0e..1b3fc9c8 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -75,15 +75,11 @@ describe('singlesig-dip', () => { let op = waitOperation(client1, await result.op()); }); // https://github.com/WebOfTrust/signify-ts/issues/145 - test.failing( - 'delegate2b', - async () => { - // delegate waits for completion - let delegate2 = await client2.identifiers().get('delegate2'); - let op: any = { name: `delegation.${delegate2.prefix}` }; - op = await waitOperation(client2, op); - expect(delegate2.prefix).toEqual(op.response.i); - }, - 30000 - ); + test('delegate2b', async () => { + // delegate waits for completion + let delegate2 = await client2.identifiers().get('delegate2'); + let op: any = { name: `delegation.${delegate2.prefix}` }; + op = await waitOperation(client2, op); + expect(delegate2.prefix).toEqual(op.response.i); + }); }); From aa2d651363d246045ccb5e79d339c07fc41e9319 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Tue, 16 Jan 2024 23:32:30 +0200 Subject: [PATCH 165/186] change number to hex string --- examples/integration-scripts/singlesig-dip.test.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index 1b3fc9c8..7a413e2c 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -37,7 +37,7 @@ describe('singlesig-dip', () => { let delegate1 = await client2.identifiers().get('delegate1'); let seal = { i: delegate1.prefix, - s: 0, + s: '0', d: delegate1.prefix, }; let result = await client1.identifiers().interact('name1', seal); @@ -68,13 +68,12 @@ describe('singlesig-dip', () => { let delegate2 = await client2.identifiers().get('delegate2'); let seal = { i: delegate2.prefix, - s: 0, + s: '0', d: delegate2.prefix, }; let result = await client1.identifiers().interact('name1', seal); let op = waitOperation(client1, await result.op()); }); - // https://github.com/WebOfTrust/signify-ts/issues/145 test('delegate2b', async () => { // delegate waits for completion let delegate2 = await client2.identifiers().get('delegate2'); From 0a250f58a986fd673fcc65613df57f5b005d764d Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Tue, 16 Jan 2024 16:58:15 -0700 Subject: [PATCH 166/186] RE-enable witnesses for multisig delegation test --- .../integration-scripts/delegation-multisig.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/integration-scripts/delegation-multisig.test.ts b/examples/integration-scripts/delegation-multisig.test.ts index 206e3e3e..39aacf68 100644 --- a/examples/integration-scripts/delegation-multisig.test.ts +++ b/examples/integration-scripts/delegation-multisig.test.ts @@ -46,12 +46,12 @@ test('delegation-multisig', async () => { mhab: aid1, isith: 2, nsith: 2, - // toad: 3, - // wits: [ - // 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - // 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - // 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - // ], + toad: 3, + wits: [ + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], states: states, rstates: rstates, delpre: aid0.prefix, From 180645b3128b570a00b450811e782dc55743c5a2 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Wed, 17 Jan 2024 18:28:56 -0600 Subject: [PATCH 167/186] Delegated rotation for single sig AID integration test. --- .../integration-scripts/singlesig-drt.test.ts | 84 +++++++++++++++++++ .../integration-scripts/utils/test-util.ts | 1 + src/keri/app/aiding.ts | 6 +- 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 examples/integration-scripts/singlesig-drt.test.ts diff --git a/examples/integration-scripts/singlesig-drt.test.ts b/examples/integration-scripts/singlesig-drt.test.ts new file mode 100644 index 00000000..b6d6748a --- /dev/null +++ b/examples/integration-scripts/singlesig-drt.test.ts @@ -0,0 +1,84 @@ +import { + CreateIdentiferArgs, + SignifyClient, +} from 'signify-ts'; +import { + getOrCreateClients, + getOrCreateContact, + getOrCreateIdentifier, +} from './utils/test-setup'; +import {waitOperation} from './utils/test-util'; + +let delegator: SignifyClient, delegate: SignifyClient; +let name1_id: string, name1_oobi: string; +let contact1_id: string; + +beforeAll(async () => { + [delegator, delegate] = await getOrCreateClients(2); +}); +beforeAll(async () => { + [name1_id, name1_oobi] = await getOrCreateIdentifier(delegator, 'name1'); +}); +beforeAll(async () => { + contact1_id = await getOrCreateContact(delegate, 'contact1', name1_oobi); +}); + +describe('singlesig-drt', () => { + test('delegate1a', async () => { + // delegate creates identifier without witnesses + let kargs: CreateIdentiferArgs = { + delpre: name1_id, + }; + let result = await delegate.identifiers().create('delegate1', kargs); + let op = await result.op(); + let delegate1 = await delegate.identifiers().get('delegate1'); + expect(op.name).toEqual(`delegation.${delegate1.prefix}`); + + // delegator approves delegate + let seal = { + i: delegate1.prefix, + s: '0', + d: delegate1.prefix, + }; + result = await delegator.identifiers().interact('name1', seal); + let op1 = await result.op(); + + let op2 = await delegate.keyStates().query(name1_id, '1'); + + + await Promise.all([ + waitOperation(delegate, op), + waitOperation(delegator, op1), + waitOperation(delegate, op2) + ]) + + kargs = {}; + result = await delegate.identifiers().rotate('delegate1', kargs); + op = await result.op(); + expect(op.name).toEqual(`delegation.${delegate1.prefix}`); + + // delegator approves delegate + delegate1 = await delegate.identifiers().get('delegate1'); + + seal = { + i: delegate1.prefix, + s: '1', + d: delegate1.state.d, + }; + + result = await delegator.identifiers().interact('name1', seal); + op1 = await result.op(); + op2 = await delegate.keyStates().query(name1_id, '2'); + + await Promise.all([ + op = await waitOperation(delegate, op), + waitOperation(delegator, op1), + waitOperation(delegate, op2) + ]) + + expect(op.response.t).toEqual(`drt`); + expect(op.response.s).toEqual(`1`); + + + }); +}); \ No newline at end of file diff --git a/examples/integration-scripts/utils/test-util.ts b/examples/integration-scripts/utils/test-util.ts index dbb4260f..108c5c32 100644 --- a/examples/integration-scripts/utils/test-util.ts +++ b/examples/integration-scripts/utils/test-util.ts @@ -22,6 +22,7 @@ export async function waitOperation( throw new Error(`Operation ${op.name} not done`); } + console.log("DONE", op.name) return op; }, options); } diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index aca4ac24..32a406df 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -2,7 +2,7 @@ import { SignifyClient } from './clienting'; import { Tier } from '../core/salter'; import { Algos } from '../core/manager'; import { incept, interact, reply, rotate } from '../core/eventing'; -import { b, Serials, Versionage } from '../core/core'; +import {b, Ilks, Serials, Versionage} from '../core/core'; import { Tholder } from '../core/tholder'; import { MtrDex } from '../core/matter'; import { Serder } from '../core/serder'; @@ -287,6 +287,7 @@ export class Identifier { const hab = await this.get(name); const pre = hab.prefix; + const delegated = hab.state.di !== '' const state = hab.state; const count = state.k.length; @@ -326,8 +327,11 @@ export class Identifier { const adds = kargs.adds ?? []; const data = kargs.data != undefined ? [kargs.data] : []; const toad = kargs.toad; + const ilk = delegated ? Ilks.drt : Ilks.rot; + const serder = rotate({ pre: pre, + ilk: ilk, keys: keys, dig: dig, sn: ridx, From 698200162e92b57612477c755536ad2e8c74370a Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Thu, 18 Jan 2024 13:11:09 -0600 Subject: [PATCH 168/186] Fixing delegation tests to work correctly now. --- .../delegation-multisig.test.ts | 7 +- .../integration-scripts/delegation.test.ts | 3 + .../integration-scripts/singlesig-dip.test.ts | 64 +++++++++++-------- 3 files changed, 45 insertions(+), 29 deletions(-) diff --git a/examples/integration-scripts/delegation-multisig.test.ts b/examples/integration-scripts/delegation-multisig.test.ts index 39aacf68..6285227a 100644 --- a/examples/integration-scripts/delegation-multisig.test.ts +++ b/examples/integration-scripts/delegation-multisig.test.ts @@ -46,7 +46,7 @@ test('delegation-multisig', async () => { mhab: aid1, isith: 2, nsith: 2, - toad: 3, + toad: 2, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', @@ -148,10 +148,15 @@ test('delegation-multisig', async () => { await client0.identifiers().interact('delegator', anchor); console.log('Delegator approved delegation'); + let op3 = await client1.keyStates().query(aid0.prefix, '1'); + let op4 = await client2.keyStates().query(aid0.prefix, '1'); + // Check for completion await Promise.all([ waitOperation(client1, op1), waitOperation(client2, op2), + waitOperation(client1, op3), + waitOperation(client2, op4), ]); console.log('Delegated multisig created!'); diff --git a/examples/integration-scripts/delegation.test.ts b/examples/integration-scripts/delegation.test.ts index ae771826..c1fff692 100644 --- a/examples/integration-scripts/delegation.test.ts +++ b/examples/integration-scripts/delegation.test.ts @@ -81,6 +81,9 @@ test('delegation', async () => { await client1.identifiers().interact('delegator', anchor); console.log('Delegator approved delegation'); + let op3 = await client2.keyStates().query(aid1.prefix, '1'); + await waitOperation(client2, op3); + // Client 2 check approval await waitOperation(client2, op2); const aid2 = await client2.identifiers().get('delegate'); diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index 7a413e2c..12f11042 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -31,54 +31,62 @@ describe('singlesig-dip', () => { let op = await result.op(); let delegate1 = await client2.identifiers().get('delegate1'); expect(op.name).toEqual(`delegation.${delegate1.prefix}`); - }); - test('delegator1', async () => { - // delegator approves delegate - let delegate1 = await client2.identifiers().get('delegate1'); + + + delegate1 = await client2.identifiers().get('delegate1'); let seal = { i: delegate1.prefix, s: '0', d: delegate1.prefix, }; - let result = await client1.identifiers().interact('name1', seal); - let op = waitOperation(client1, await result.op()); - }); - test('delegate1b', async () => { - // delegate waits for completion - let delegate1 = await client2.identifiers().get('delegate1'); - let op: any = { name: `delegation.${delegate1.prefix}` }; - op = await waitOperation(client2, op); + result = await client1.identifiers().interact('name1', seal); + let op1 = await result.op() + + let op2 = await client2.keyStates().query(name1_id, '1'); + + await Promise.all([ + op = await waitOperation(client2, op), + waitOperation(client1, op1), + waitOperation(client2, op2) + ]) + + delegate1 = await client2.identifiers().get('delegate1'); expect(delegate1.prefix).toEqual(op.response.i); - }); - test('delegate2a', async () => { + // delegate creates identifier with default witness config let env = resolveEnvironment(); - let kargs: CreateIdentiferArgs = { + kargs = { delpre: name1_id, toad: env.witnessIds.length, wits: env.witnessIds, }; - let result = await client2.identifiers().create('delegate2', kargs); - let op = await result.op(); + result = await client2.identifiers().create('delegate2', kargs); + op = await result.op(); let delegate2 = await client2.identifiers().get('delegate2'); expect(op.name).toEqual(`delegation.${delegate2.prefix}`); - }); - test('delegator2', async () => { + + // delegator approves delegate - let delegate2 = await client2.identifiers().get('delegate2'); - let seal = { + delegate2 = await client2.identifiers().get('delegate2'); + seal = { i: delegate2.prefix, s: '0', d: delegate2.prefix, }; - let result = await client1.identifiers().interact('name1', seal); - let op = waitOperation(client1, await result.op()); - }); - test('delegate2b', async () => { + result = await client1.identifiers().interact('name1', seal); + op1 = await result.op() + + op2 = await client2.keyStates().query(name1_id, '2'); + + await Promise.all([ + op = await waitOperation(client2, op), + waitOperation(client1, op1), + waitOperation(client2, op2) + ]) + // delegate waits for completion - let delegate2 = await client2.identifiers().get('delegate2'); - let op: any = { name: `delegation.${delegate2.prefix}` }; - op = await waitOperation(client2, op); + delegate2 = await client2.identifiers().get('delegate2'); expect(delegate2.prefix).toEqual(op.response.i); + }); }); From 6aa421afd5b0f9fc4fb8b673879f233f42c05e4b Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Thu, 18 Jan 2024 13:24:08 -0600 Subject: [PATCH 169/186] prettier --- .../integration-scripts/singlesig-dip.test.ts | 19 +++++++--------- .../integration-scripts/singlesig-drt.test.ts | 22 +++++++------------ .../integration-scripts/utils/test-util.ts | 2 +- src/keri/app/aiding.ts | 4 ++-- 4 files changed, 19 insertions(+), 28 deletions(-) diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index 12f11042..626b494d 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -32,7 +32,6 @@ describe('singlesig-dip', () => { let delegate1 = await client2.identifiers().get('delegate1'); expect(op.name).toEqual(`delegation.${delegate1.prefix}`); - delegate1 = await client2.identifiers().get('delegate1'); let seal = { i: delegate1.prefix, @@ -40,15 +39,15 @@ describe('singlesig-dip', () => { d: delegate1.prefix, }; result = await client1.identifiers().interact('name1', seal); - let op1 = await result.op() + let op1 = await result.op(); let op2 = await client2.keyStates().query(name1_id, '1'); await Promise.all([ - op = await waitOperation(client2, op), + (op = await waitOperation(client2, op)), waitOperation(client1, op1), - waitOperation(client2, op2) - ]) + waitOperation(client2, op2), + ]); delegate1 = await client2.identifiers().get('delegate1'); expect(delegate1.prefix).toEqual(op.response.i); @@ -65,7 +64,6 @@ describe('singlesig-dip', () => { let delegate2 = await client2.identifiers().get('delegate2'); expect(op.name).toEqual(`delegation.${delegate2.prefix}`); - // delegator approves delegate delegate2 = await client2.identifiers().get('delegate2'); seal = { @@ -74,19 +72,18 @@ describe('singlesig-dip', () => { d: delegate2.prefix, }; result = await client1.identifiers().interact('name1', seal); - op1 = await result.op() + op1 = await result.op(); op2 = await client2.keyStates().query(name1_id, '2'); await Promise.all([ - op = await waitOperation(client2, op), + (op = await waitOperation(client2, op)), waitOperation(client1, op1), - waitOperation(client2, op2) - ]) + waitOperation(client2, op2), + ]); // delegate waits for completion delegate2 = await client2.identifiers().get('delegate2'); expect(delegate2.prefix).toEqual(op.response.i); - }); }); diff --git a/examples/integration-scripts/singlesig-drt.test.ts b/examples/integration-scripts/singlesig-drt.test.ts index b6d6748a..4253c752 100644 --- a/examples/integration-scripts/singlesig-drt.test.ts +++ b/examples/integration-scripts/singlesig-drt.test.ts @@ -1,13 +1,10 @@ -import { - CreateIdentiferArgs, - SignifyClient, -} from 'signify-ts'; +import { CreateIdentiferArgs, SignifyClient } from 'signify-ts'; import { getOrCreateClients, getOrCreateContact, getOrCreateIdentifier, } from './utils/test-setup'; -import {waitOperation} from './utils/test-util'; +import { waitOperation } from './utils/test-util'; let delegator: SignifyClient, delegate: SignifyClient; let name1_id: string, name1_oobi: string; @@ -45,12 +42,11 @@ describe('singlesig-drt', () => { let op2 = await delegate.keyStates().query(name1_id, '1'); - await Promise.all([ waitOperation(delegate, op), waitOperation(delegator, op1), - waitOperation(delegate, op2) - ]) + waitOperation(delegate, op2), + ]); kargs = {}; result = await delegate.identifiers().rotate('delegate1', kargs); @@ -71,14 +67,12 @@ describe('singlesig-drt', () => { op2 = await delegate.keyStates().query(name1_id, '2'); await Promise.all([ - op = await waitOperation(delegate, op), + (op = await waitOperation(delegate, op)), waitOperation(delegator, op1), - waitOperation(delegate, op2) - ]) + waitOperation(delegate, op2), + ]); expect(op.response.t).toEqual(`drt`); expect(op.response.s).toEqual(`1`); - - }); -}); \ No newline at end of file +}); diff --git a/examples/integration-scripts/utils/test-util.ts b/examples/integration-scripts/utils/test-util.ts index 108c5c32..6ebecdee 100644 --- a/examples/integration-scripts/utils/test-util.ts +++ b/examples/integration-scripts/utils/test-util.ts @@ -22,7 +22,7 @@ export async function waitOperation( throw new Error(`Operation ${op.name} not done`); } - console.log("DONE", op.name) + console.log('DONE', op.name); return op; }, options); } diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index 32a406df..fb3272c7 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -2,7 +2,7 @@ import { SignifyClient } from './clienting'; import { Tier } from '../core/salter'; import { Algos } from '../core/manager'; import { incept, interact, reply, rotate } from '../core/eventing'; -import {b, Ilks, Serials, Versionage} from '../core/core'; +import { b, Ilks, Serials, Versionage } from '../core/core'; import { Tholder } from '../core/tholder'; import { MtrDex } from '../core/matter'; import { Serder } from '../core/serder'; @@ -287,7 +287,7 @@ export class Identifier { const hab = await this.get(name); const pre = hab.prefix; - const delegated = hab.state.di !== '' + const delegated = hab.state.di !== ''; const state = hab.state; const count = state.k.length; From 3532e720dff3ad6741bcc34d4889bbade39ff369 Mon Sep 17 00:00:00 2001 From: Arshdeep Date: Thu, 18 Jan 2024 19:45:28 -0500 Subject: [PATCH 170/186] update credential rules type to support value as string - update credential rules type to support value as string for usecases when schema rules can be just SAID of the rules block object Signed-off-by: arshdeep singh --- src/keri/app/credentialing.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index be55ee3e..5be18dbe 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -65,7 +65,7 @@ export interface IssueCredentialArgs { /** * Credential rules */ - rules?: Record; + rules?: string | Record; /** * Credential sources From 2b76effed980e5ce23f7bcdf47028798e01bedb6 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 19 Jan 2024 17:30:18 +0200 Subject: [PATCH 171/186] fix signature of KeyStates.query --- src/keri/app/coring.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/keri/app/coring.ts b/src/keri/app/coring.ts index f96901ef..09349d15 100644 --- a/src/keri/app/coring.ts +++ b/src/keri/app/coring.ts @@ -166,14 +166,14 @@ export class KeyStates { } /** - * Query the key state of an identifier for a given sequence number or anchor SAID + * Query the key state of an identifier for a given sequence number or anchor * @async * @param {string} pre Identifier prefix * @param {number} [sn] Optional sequence number - * @param {string} [anchor] Optional anchor SAID + * @param {any} [anchor] Optional anchor * @returns {Promise} A promise to the long-running operation */ - async query(pre: string, sn?: string, anchor?: string): Promise { + async query(pre: string, sn?: string, anchor?: any): Promise { const path = `/queries`; const data: any = { pre: pre, From 11bf30b8f9a64049f7dbdab2cadfeb11a4b3598e Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Fri, 19 Jan 2024 17:30:59 +0200 Subject: [PATCH 172/186] uses KeyStates.query with seal --- examples/integration-scripts/singlesig-dip.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index 626b494d..cc8ef8ac 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -41,6 +41,7 @@ describe('singlesig-dip', () => { result = await client1.identifiers().interact('name1', seal); let op1 = await result.op(); + // refresh keystate to sn=1 let op2 = await client2.keyStates().query(name1_id, '1'); await Promise.all([ @@ -74,7 +75,8 @@ describe('singlesig-dip', () => { result = await client1.identifiers().interact('name1', seal); op1 = await result.op(); - op2 = await client2.keyStates().query(name1_id, '2'); + // refresh keystate to seal event + op2 = await client2.keyStates().query(name1_id, undefined, seal); await Promise.all([ (op = await waitOperation(client2, op)), From 0d3212fd6c4cbb057377fe1b38f80069f291deb9 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Sat, 20 Jan 2024 09:58:47 +0200 Subject: [PATCH 173/186] add one more query test --- examples/integration-scripts/singlesig-dip.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index cc8ef8ac..0858ee66 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -87,5 +87,9 @@ describe('singlesig-dip', () => { // delegate waits for completion delegate2 = await client2.identifiers().get('delegate2'); expect(delegate2.prefix).toEqual(op.response.i); + + // make sure query with seal is idempotent + op = await client2.keyStates().query(name1_id, undefined, seal); + await waitOperation(client2, op) }); }); From 12c53ab6e4ba0f413c7a4022962de4c2bbf133f5 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Tue, 23 Jan 2024 14:55:44 +0200 Subject: [PATCH 174/186] run npm pretty --- examples/integration-scripts/singlesig-dip.test.ts | 2 +- src/keri/app/coring.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index 0858ee66..857f1e99 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -90,6 +90,6 @@ describe('singlesig-dip', () => { // make sure query with seal is idempotent op = await client2.keyStates().query(name1_id, undefined, seal); - await waitOperation(client2, op) + await waitOperation(client2, op); }); }); diff --git a/src/keri/app/coring.ts b/src/keri/app/coring.ts index 09349d15..3cfce93e 100644 --- a/src/keri/app/coring.ts +++ b/src/keri/app/coring.ts @@ -166,11 +166,11 @@ export class KeyStates { } /** - * Query the key state of an identifier for a given sequence number or anchor + * Query the key state of an identifier for a given sequence number or anchor * @async * @param {string} pre Identifier prefix * @param {number} [sn] Optional sequence number - * @param {any} [anchor] Optional anchor + * @param {any} [anchor] Optional anchor * @returns {Promise} A promise to the long-running operation */ async query(pre: string, sn?: string, anchor?: any): Promise { From c91be0b5dd65fa4d15d1a0e45fe5aed3d7b9651a Mon Sep 17 00:00:00 2001 From: Nuttawut Kongsuwan Date: Tue, 23 Jan 2024 12:42:22 +0700 Subject: [PATCH 175/186] add test for singlesig vlei Signed-off-by: Nuttawut Kongsuwan --- .../singlesig-vlei-issuance.test.ts | 580 ++++++++++++++++++ 1 file changed, 580 insertions(+) create mode 100644 examples/integration-scripts/singlesig-vlei-issuance.test.ts diff --git a/examples/integration-scripts/singlesig-vlei-issuance.test.ts b/examples/integration-scripts/singlesig-vlei-issuance.test.ts new file mode 100644 index 00000000..e7a1c0f5 --- /dev/null +++ b/examples/integration-scripts/singlesig-vlei-issuance.test.ts @@ -0,0 +1,580 @@ +import { strict as assert } from 'assert'; +import { Saider, Serder, SignifyClient } from 'signify-ts'; +import { resolveEnvironment } from './utils/resolve-env'; +import { + resolveOobi, + waitForNotifications, + waitOperation, +} from './utils/test-util'; +import { retry } from './utils/retry'; +import { + getOrCreateClients, + getOrCreateContact, + getOrCreateIdentifier, +} from './utils/test-setup'; + +const { vleiServerUrl } = resolveEnvironment(); + +const QVI_SCHEMA_SAID = 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao'; +const LE_SCHEMA_SAID = 'ENPXp1vQzRF6JwIuS-mp2U8Uf1MoADoP_GqQ62VsDZWY'; +const ECR_AUTH_SCHEMA_SAID = 'EH6ekLjSr8V32WyFbGe1zXjTzFs9PkTYmupJ9H65O14g'; +const ECR_SCHEMA_SAID = 'EEy9PkikFcANV1l7EHukCeXqrzT1hNZjGlUk7wuMO5jw'; +const OOR_AUTH_SCHEMA_SAID = 'EKA57bKBKxr_kN7iN5i7lMUxpMG-s19dRcmov1iDxz-E'; +const OOR_SCHEMA_SAID = 'EBNaNu-M9P5cgrnfl2Fvymy4E_jvxxyjb70PRtiANlJy'; + +const vLEIServerHostUrl = `${vleiServerUrl}/oobi`; +const QVI_SCHEMA_URL = `${vLEIServerHostUrl}/${QVI_SCHEMA_SAID}`; +const LE_SCHEMA_URL = `${vLEIServerHostUrl}/${LE_SCHEMA_SAID}`; +const ECR_AUTH_SCHEMA_URL = `${vLEIServerHostUrl}/${ECR_AUTH_SCHEMA_SAID}`; +const ECR_SCHEMA_URL = `${vLEIServerHostUrl}/${ECR_SCHEMA_SAID}`; +const OOR_AUTH_SCHEMA_URL = `${vLEIServerHostUrl}/${OOR_AUTH_SCHEMA_SAID}`; +const OOR_SCHEMA_URL = `${vLEIServerHostUrl}/${OOR_SCHEMA_SAID}`; + +const qviData = { + LEI: '254900OPPU84GM83MG36', +}; + +const leData = { + LEI: '875500ELOZEL05BVXV37', +}; + +const ecrData = { + LEI: leData.LEI, + personLegalName: 'John Doe', + engagementContextRole: 'EBA Submitter', +}; + +const ecrAuthData = { + AID: '', + LEI: ecrData.LEI, + personLegalName: ecrData.personLegalName, + engagementContextRole: ecrData.engagementContextRole, +}; + +const oorData = { + LEI: leData.LEI, + personLegalName: 'John Doe', + officialRole: 'HR Manager', +}; + +const oorAuthData = { + AID: '', + LEI: oorData.LEI, + personLegalName: oorData.personLegalName, + officialRole: oorData.officialRole, +}; + +const LE_RULES = Saider.saidify({ + d: '', + usageDisclaimer: { + l: 'Usage of a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, does not assert that the Legal Entity is trustworthy, honest, reputable in its business dealings, safe to do business with, or compliant with any laws or that an implied or expressly intended purpose will be fulfilled.', + }, + issuanceDisclaimer: { + l: 'All information in a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, is accurate as of the date the validation process was complete. The vLEI Credential has been issued to the legal entity or person named in the vLEI Credential as the subject; and the qualified vLEI Issuer exercised reasonable care to perform the validation process set forth in the vLEI Ecosystem Governance Framework.', + }, +})[1]; + +const ECR_RULES = Saider.saidify({ + d: '', + usageDisclaimer: { + l: 'Usage of a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, does not assert that the Legal Entity is trustworthy, honest, reputable in its business dealings, safe to do business with, or compliant with any laws or that an implied or expressly intended purpose will be fulfilled.', + }, + issuanceDisclaimer: { + l: 'All information in a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, is accurate as of the date the validation process was complete. The vLEI Credential has been issued to the legal entity or person named in the vLEI Credential as the subject; and the qualified vLEI Issuer exercised reasonable care to perform the validation process set forth in the vLEI Ecosystem Governance Framework.', + }, + privacyDisclaimer: { + l: 'It is the sole responsibility of Holders as Issuees of an ECR vLEI Credential to present that Credential in a privacy-preserving manner using the mechanisms provided in the Issuance and Presentation Exchange (IPEX) protocol specification and the Authentic Chained Data Container (ACDC) specification. https://github.com/WebOfTrust/IETF-IPEX and https://github.com/trustoverip/tswg-acdc-specification.', + }, +})[1]; + +const ECR_AUTH_RULES = Saider.saidify({ + d: '', + usageDisclaimer: { + l: 'Usage of a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, does not assert that the Legal Entity is trustworthy, honest, reputable in its business dealings, safe to do business with, or compliant with any laws or that an implied or expressly intended purpose will be fulfilled.', + }, + issuanceDisclaimer: { + l: 'All information in a valid, unexpired, and non-revoked vLEI Credential, as defined in the associated Ecosystem Governance Framework, is accurate as of the date the validation process was complete. The vLEI Credential has been issued to the legal entity or person named in the vLEI Credential as the subject; and the qualified vLEI Issuer exercised reasonable care to perform the validation process set forth in the vLEI Ecosystem Governance Framework.', + }, + privacyDisclaimer: { + l: 'Privacy Considerations are applicable to QVI ECR AUTH vLEI Credentials. It is the sole responsibility of QVIs as Issuees of QVI ECR AUTH vLEI Credentials to present these Credentials in a privacy-preserving manner using the mechanisms provided in the Issuance and Presentation Exchange (IPEX) protocol specification and the Authentic Chained Data Container (ACDC) specification. https://github.com/WebOfTrust/IETF-IPEX and https://github.com/trustoverip/tswg-acdc-specification.', + }, +})[1]; + +const OOR_RULES = LE_RULES; +const OOR_AUTH_RULES = LE_RULES; + +interface Aid { + name: string; + prefix: string; + oobi: string; +} + +function createTimestamp() { + return new Date().toISOString().replace('Z', '000+00:00'); +} + +async function createAid(client: SignifyClient, name: string): Promise { + const [prefix, oobi] = await getOrCreateIdentifier(client, name); + return { name, prefix, oobi }; +} + +test('singlesig-vlei-issuance', async function run() { + const [gleifClient, qviClient, leClient, roleClient] = + await getOrCreateClients(4); + + const [gleifAid, qviAid, leAid, roleAid] = await Promise.all([ + createAid(gleifClient, 'gleif'), + createAid(qviClient, 'qvi'), + createAid(leClient, 'le'), + createAid(roleClient, 'role'), + ]); + + await Promise.all([ + getOrCreateContact(gleifClient, 'qvi', qviAid.oobi), + getOrCreateContact(qviClient, 'gleif', gleifAid.oobi), + getOrCreateContact(qviClient, 'le', leAid.oobi), + getOrCreateContact(qviClient, 'role', roleAid.oobi), + getOrCreateContact(leClient, 'gleif', gleifAid.oobi), + getOrCreateContact(leClient, 'qvi', qviAid.oobi), + getOrCreateContact(leClient, 'role', roleAid.oobi), + getOrCreateContact(roleClient, 'gleif', gleifAid.oobi), + getOrCreateContact(roleClient, 'qvi', qviAid.oobi), + getOrCreateContact(roleClient, 'le', leAid.oobi), + ]); + + await Promise.all([ + resolveOobi(gleifClient, QVI_SCHEMA_URL), + resolveOobi(qviClient, QVI_SCHEMA_URL), + resolveOobi(qviClient, LE_SCHEMA_URL), + resolveOobi(qviClient, ECR_AUTH_SCHEMA_URL), + resolveOobi(qviClient, ECR_SCHEMA_URL), + resolveOobi(qviClient, OOR_AUTH_SCHEMA_URL), + resolveOobi(qviClient, OOR_SCHEMA_URL), + resolveOobi(leClient, QVI_SCHEMA_URL), + resolveOobi(leClient, LE_SCHEMA_URL), + resolveOobi(leClient, ECR_AUTH_SCHEMA_URL), + resolveOobi(leClient, ECR_SCHEMA_URL), + resolveOobi(leClient, OOR_AUTH_SCHEMA_URL), + resolveOobi(leClient, OOR_SCHEMA_URL), + resolveOobi(roleClient, QVI_SCHEMA_URL), + resolveOobi(roleClient, LE_SCHEMA_URL), + resolveOobi(roleClient, ECR_AUTH_SCHEMA_URL), + resolveOobi(roleClient, ECR_SCHEMA_URL), + resolveOobi(roleClient, OOR_AUTH_SCHEMA_URL), + resolveOobi(roleClient, OOR_SCHEMA_URL), + ]); + + const [gleifRegistry, qviRegistry, leRegistry] = await Promise.all([ + getOrCreateRegistry(gleifClient, gleifAid, 'gleifRegistry'), + getOrCreateRegistry(qviClient, qviAid, 'qviRegistry'), + getOrCreateRegistry(leClient, leAid, 'leRegistry'), + ]); + + console.log('Issuing QVI vLEI Credential'); + const qviCred = await getOrIssueCredential( + gleifClient, + gleifAid, + qviAid, + gleifRegistry, + qviData, + QVI_SCHEMA_SAID + ); + + let qviCredHolder = await getGrantedCredential(qviClient, qviCred.sad.d); + + if (!qviCredHolder) { + await sendGrantMessage(gleifClient, gleifAid, qviAid, qviCred); + await sendAdmitMessage(qviClient, qviAid, gleifAid); + + qviCredHolder = await retry(async () => { + const cred = await getGrantedCredential(qviClient, qviCred.sad.d); + assert(cred !== undefined); + return cred; + }); + } + assert.equal(qviCredHolder.sad.d, qviCred.sad.d); + assert.equal(qviCredHolder.sad.s, QVI_SCHEMA_SAID); + assert.equal(qviCredHolder.sad.i, gleifAid.prefix); + assert.equal(qviCredHolder.sad.a.i, qviAid.prefix); + assert.equal(qviCredHolder.status.s, '0'); + assert(qviCredHolder.atc !== undefined); + + console.log('Issuing LE vLEI Credential'); + const leCredSource = Saider.saidify({ + d: '', + qvi: { + n: qviCred.sad.d, + s: qviCred.sad.s, + }, + })[1]; + + const leCred = await getOrIssueCredential( + qviClient, + qviAid, + leAid, + qviRegistry, + leData, + LE_SCHEMA_SAID, + LE_RULES, + leCredSource + ); + + let leCredHolder = await getGrantedCredential(leClient, leCred.sad.d); + + if (!leCredHolder) { + await sendGrantMessage(qviClient, qviAid, leAid, leCred); + await sendAdmitMessage(leClient, leAid, qviAid); + + leCredHolder = await retry(async () => { + const cred = await getGrantedCredential(leClient, leCred.sad.d); + assert(cred !== undefined); + return cred; + }); + } + assert.equal(leCredHolder.sad.d, leCred.sad.d); + assert.equal(leCredHolder.sad.s, LE_SCHEMA_SAID); + assert.equal(leCredHolder.sad.i, qviAid.prefix); + assert.equal(leCredHolder.sad.a.i, leAid.prefix); + assert.equal(leCredHolder.sad.e.qvi.n, qviCred.sad.d); + assert.equal(leCredHolder.status.s, '0'); + assert(leCredHolder.atc !== undefined); + + console.log('Issuing ECR vLEI Credential from LE'); + const ecrCredSource = Saider.saidify({ + d: '', + le: { + n: leCred.sad.d, + s: leCred.sad.s, + }, + })[1]; + + const ecrCred = await getOrIssueCredential( + leClient, + leAid, + roleAid, + leRegistry, + ecrData, + ECR_SCHEMA_SAID, + ECR_RULES, + ecrCredSource, + true + ); + + let ecrCredHolder = await getGrantedCredential(roleClient, ecrCred.sad.d); + + if (!ecrCredHolder) { + await sendGrantMessage(leClient, leAid, roleAid, ecrCred); + await sendAdmitMessage(roleClient, roleAid, leAid); + + ecrCredHolder = await retry(async () => { + const cred = await getGrantedCredential(roleClient, ecrCred.sad.d); + assert(cred !== undefined); + return cred; + }); + } + assert.equal(ecrCredHolder.sad.d, ecrCred.sad.d); + assert.equal(ecrCredHolder.sad.s, ECR_SCHEMA_SAID); + assert.equal(ecrCredHolder.sad.i, leAid.prefix); + assert.equal(ecrCredHolder.sad.a.i, roleAid.prefix); + assert.equal(ecrCredHolder.sad.e.le.n, leCred.sad.d); + assert.equal(ecrCredHolder.status.s, '0'); + assert(ecrCredHolder.atc !== undefined); + + console.log('Issuing ECR AUTH vLEI Credential'); + ecrAuthData.AID = roleAid.prefix; + const ecrAuthCredSource = Saider.saidify({ + d: '', + le: { + n: leCred.sad.d, + s: leCred.sad.s, + }, + })[1]; + + const ecrAuthCred = await getOrIssueCredential( + leClient, + leAid, + qviAid, + leRegistry, + ecrAuthData, + ECR_AUTH_SCHEMA_SAID, + ECR_AUTH_RULES, + ecrAuthCredSource + ); + + let ecrAuthCredHolder = await getGrantedCredential( + qviClient, + ecrAuthCred.sad.d + ); + + if (!ecrAuthCredHolder) { + await sendGrantMessage(leClient, leAid, qviAid, ecrAuthCred); + await sendAdmitMessage(qviClient, qviAid, leAid); + + ecrAuthCredHolder = await retry(async () => { + const cred = await getGrantedCredential( + qviClient, + ecrAuthCred.sad.d + ); + assert(cred !== undefined); + return cred; + }); + } + assert.equal(ecrAuthCredHolder.sad.d, ecrAuthCred.sad.d); + assert.equal(ecrAuthCredHolder.sad.s, ECR_AUTH_SCHEMA_SAID); + assert.equal(ecrAuthCredHolder.sad.i, leAid.prefix); + assert.equal(ecrAuthCredHolder.sad.a.i, qviAid.prefix); + assert.equal(ecrAuthCredHolder.sad.a.AID, roleAid.prefix); + assert.equal(ecrAuthCredHolder.sad.e.le.n, leCred.sad.d); + assert.equal(ecrAuthCredHolder.status.s, '0'); + assert(ecrAuthCredHolder.atc !== undefined); + + console.log('Issuing ECR vLEI Credential from ECR AUTH'); + const ecrCredSource2 = Saider.saidify({ + d: '', + auth: { + n: ecrAuthCred.sad.d, + s: ecrAuthCred.sad.s, + o: 'I2I', + }, + })[1]; + + const ecrCred2 = await getOrIssueCredential( + qviClient, + qviAid, + roleAid, + qviRegistry, + ecrData, + ECR_SCHEMA_SAID, + ECR_RULES, + ecrCredSource2, + true + ); + + let ecrCredHolder2 = await getGrantedCredential(roleClient, ecrCred2.sad.d); + + if (!ecrCredHolder2) { + await sendGrantMessage(qviClient, qviAid, roleAid, ecrCred2); + await sendAdmitMessage(roleClient, roleAid, qviAid); + + ecrCredHolder2 = await retry(async () => { + const cred = await getGrantedCredential(roleClient, ecrCred2.sad.d); + assert(cred !== undefined); + return cred; + }); + } + assert.equal(ecrCredHolder2.sad.d, ecrCred2.sad.d); + assert.equal(ecrCredHolder2.sad.s, ECR_SCHEMA_SAID); + assert.equal(ecrCredHolder2.sad.i, qviAid.prefix); + assert.equal(ecrCredHolder2.sad.e.auth.n, ecrAuthCred.sad.d); + assert.equal(ecrCredHolder2.status.s, '0'); + assert(ecrCredHolder2.atc !== undefined); + + console.log('Issuing OOR AUTH vLEI Credential'); + oorAuthData.AID = roleAid.prefix; + const oorAuthCredSource = Saider.saidify({ + d: '', + le: { + n: leCred.sad.d, + s: leCred.sad.s, + }, + })[1]; + + const oorAuthCred = await getOrIssueCredential( + leClient, + leAid, + qviAid, + leRegistry, + oorAuthData, + OOR_AUTH_SCHEMA_SAID, + OOR_AUTH_RULES, + oorAuthCredSource + ); + + let oorAuthCredHolder = await getGrantedCredential( + qviClient, + oorAuthCred.sad.d + ); + + if (!oorAuthCredHolder) { + await sendGrantMessage(leClient, leAid, qviAid, oorAuthCred); + await sendAdmitMessage(qviClient, qviAid, leAid); + + oorAuthCredHolder = await retry(async () => { + const cred = await getGrantedCredential( + qviClient, + oorAuthCred.sad.d + ); + assert(cred !== undefined); + return cred; + }); + } + assert.equal(oorAuthCredHolder.sad.d, oorAuthCred.sad.d); + assert.equal(oorAuthCredHolder.sad.s, OOR_AUTH_SCHEMA_SAID); + assert.equal(oorAuthCredHolder.sad.i, leAid.prefix); + assert.equal(oorAuthCredHolder.sad.a.i, qviAid.prefix); + assert.equal(oorAuthCredHolder.sad.a.AID, roleAid.prefix); + assert.equal(oorAuthCredHolder.sad.e.le.n, leCred.sad.d); + assert.equal(oorAuthCredHolder.status.s, '0'); + assert(oorAuthCredHolder.atc !== undefined); + + console.log('Issuing OOR vLEI Credential from OOR AUTH'); + const oorCredSource = Saider.saidify({ + d: '', + auth: { + n: oorAuthCred.sad.d, + s: oorAuthCred.sad.s, + o: 'I2I', + }, + })[1]; + + const oorCred = await getOrIssueCredential( + qviClient, + qviAid, + roleAid, + qviRegistry, + oorData, + OOR_SCHEMA_SAID, + OOR_RULES, + oorCredSource + ); + + let oorCredHolder = await getGrantedCredential(roleClient, oorCred.sad.d); + + if (!oorCredHolder) { + await sendGrantMessage(qviClient, qviAid, roleAid, oorCred); + await sendAdmitMessage(roleClient, roleAid, qviAid); + + oorCredHolder = await retry(async () => { + const cred = await getGrantedCredential(roleClient, oorCred.sad.d); + assert(cred !== undefined); + return cred; + }); + } + assert.equal(oorCredHolder.sad.d, oorCred.sad.d); + assert.equal(oorCredHolder.sad.s, OOR_SCHEMA_SAID); + assert.equal(oorCredHolder.sad.i, qviAid.prefix); + assert.equal(oorCredHolder.sad.e.auth.n, oorAuthCred.sad.d); + assert.equal(oorCredHolder.status.s, '0'); + assert(oorCredHolder.atc !== undefined); +}, 360000); + +async function getOrCreateRegistry( + client: SignifyClient, + aid: Aid, + registryName: string +): Promise<{ name: string; regk: string }> { + let registries = await client.registries().list(aid.name); + if (registries.length > 0) { + assert.equal(registries.length, 1); + } else { + const regResult = await client + .registries() + .create({ name: aid.name, registryName: registryName }); + await waitOperation(client, await regResult.op()); + registries = await client.registries().list(aid.name); + } + return registries[0]; +} + +async function getOrIssueCredential( + issuerClient: SignifyClient, + issuerAid: Aid, + recipientAid: Aid, + issuerRegistry: { regk: string }, + credData: any, + schema: string, + rules?: any, + source?: any, + privacy: boolean = false +): Promise { + const credentialList = await issuerClient.credentials().list(); + + if (credentialList.length > 0) { + for (let cred of credentialList) { + } + const credential = credentialList.find( + (cred: any) => + cred.sad.s === schema && + cred.sad.i === issuerAid.prefix && + cred.sad.a.i === recipientAid.prefix + ); + if (credential) return credential; + } + + const issResult = await issuerClient.credentials().issue({ + issuerName: issuerAid.name, + registryId: issuerRegistry.regk, + schemaId: schema, + recipient: recipientAid.prefix, + data: credData, + rules: rules, + source: source, + privacy: privacy, + }); + + await waitOperation(issuerClient, issResult.op); + const credential = await issuerClient + .credentials() + .get(issuerAid.name, issResult.acdc.ked.d); + + return credential; +} + +async function getGrantedCredential( + client: SignifyClient, + credId: string +): Promise { + const credentialList = await client.credentials().list({ + filter: { '-d': credId }, + }); + let credential: any; + if (credentialList.length > 0) { + assert.equal(credentialList.length, 1); + credential = credentialList[0]; + } + return credential; +} + +async function sendGrantMessage( + senderClient: SignifyClient, + senderAid: Aid, + recipientAid: Aid, + credential: any +) { + const [grant, gsigs, gend] = await senderClient.ipex().grant({ + senderName: senderAid.name, + acdc: new Serder(credential.sad), + anc: new Serder(credential.anc), + iss: new Serder(credential.iss), + ancAttachment: credential.ancAttachment, + recipient: recipientAid.prefix, + datetime: createTimestamp(), + }); + + await senderClient + .ipex() + .submitGrant(senderAid.name, grant, gsigs, gend, [recipientAid.prefix]); +} + +async function sendAdmitMessage( + senderClient: SignifyClient, + senderAid: Aid, + recipientAid: Aid +) { + const notifications = await waitForNotifications( + senderClient, + '/exn/ipex/grant' + ); + assert.equal(notifications.length, 1); + const grantNotification = notifications[0]; + + const [admit, sigs, aend] = await senderClient + .ipex() + .admit(senderAid.name, '', grantNotification.a.d!, createTimestamp()); + + await senderClient + .ipex() + .submitAdmit(senderAid.name, admit, sigs, aend, [recipientAid.prefix]); + + await senderClient.notifications().mark(grantNotification.i); +} From 78d8fb056f2e8d141b5299eba75a990c6419076c Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 25 Jan 2024 15:36:05 +0100 Subject: [PATCH 176/186] chore: add http status information in error message --- src/keri/app/clienting.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/keri/app/clienting.ts b/src/keri/app/clienting.ts index 1e3a6e69..20b8e8d2 100644 --- a/src/keri/app/clienting.ts +++ b/src/keri/app/clienting.ts @@ -210,7 +210,8 @@ export class SignifyClient { }); if (!res.ok) { const error = await res.text(); - throw new Error(error); + const message = `HTTP ${method} ${path} - ${res.status} ${res.statusText} - ${error}`; + throw new Error(message); } const isSameAgent = this.agent?.pre === res.headers.get('signify-resource'); From dfd37b00867363cfb60b27f06d276608766c2bfe Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 25 Jan 2024 15:42:37 +0100 Subject: [PATCH 177/186] add unit test for http status info --- test/app/clienting.test.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/app/clienting.test.ts b/test/app/clienting.test.ts index 1506b4c8..ede08d6f 100644 --- a/test/app/clienting.test.ts +++ b/test/app/clienting.test.ts @@ -377,4 +377,29 @@ describe('SignifyClient', () => { 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK' ); }); + + test('includes HTTP status info in error message', async () => { + await libsodium.ready; + const bran = '0123456789abcdefghijk'; + const client = new SignifyClient(url, bran, Tier.low, boot_url); + + await client.connect(); + + fetchMock.mockResolvedValue( + new Response('Error info', { + status: 400, + statusText: 'Bad Request', + }) + ); + + const error = await client + .fetch('/somepath', 'GET', undefined) + .catch((e) => e); + + assert(error instanceof Error); + assert.equal( + error.message, + 'HTTP GET /somepath - 400 Bad Request - Error info' + ); + }); }); From 8c030f275e3c2b3ad97613faafe8987853221735 Mon Sep 17 00:00:00 2001 From: lenkan Date: Fri, 26 Jan 2024 13:37:13 +0100 Subject: [PATCH 178/186] fix: remove hardcoded toad, use function parameter --- src/keri/core/vdring.ts | 4 ++-- test/core/vdring.test.ts | 20 +++++++++++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/keri/core/vdring.ts b/src/keri/core/vdring.ts index df601a7a..0d3b97b0 100644 --- a/src/keri/core/vdring.ts +++ b/src/keri/core/vdring.ts @@ -16,7 +16,7 @@ import { Serder } from './serder'; namespace vdr { export interface VDRInceptArgs { pre: string; - toad?: string | number | undefined; + toad?: number | string; nonce?: string; baks?: string[]; cnfg?: string[]; @@ -78,7 +78,7 @@ namespace vdr { ii: pre, s: '' + isn, c: cnfg, - bt: '0', + bt: _toad.toString(16), b: baks, n: nonce, }; diff --git a/test/core/vdring.test.ts b/test/core/vdring.test.ts index 4cbe81f7..6e585a07 100644 --- a/test/core/vdring.test.ts +++ b/test/core/vdring.test.ts @@ -126,16 +126,26 @@ describe('vdr', () => { pre: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', nonce: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', baks: ['a backer'], + toad: 1, }); - assert.equal( - actual.pre, - 'ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou' - ); + const expectedPrefix = 'ENlghG6_krj9YMzy5-E3j5sEjsd6FR1nskBtbtSQGOFL'; + assert.equal(actual.pre, expectedPrefix); assert.equal(actual.code, 'E'); assert.equal( actual.raw, - '{"v":"KERI10JSON000119_","t":"vcp","d":"ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou","i":"ELdKGV_ojDYC47GVHBRakgib5LJQLKcA72oAMUF5Jsou","ii":"ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g","s":"0","c":[],"bt":"0","b":["a backer"],"n":"AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s"}' + JSON.stringify({ + v: 'KERI10JSON000119_', + t: 'vcp', + d: expectedPrefix, + i: expectedPrefix, + ii: 'ECJIoBpEcCWMzvquk861dXP8JJZ-vbmJczlDR-NYcE3g', + s: '0', + c: [], + bt: '1', + b: ['a backer'], + n: 'AHSNDV3ABI6U8OIgKaj3aky91ZpNL54I5_7-qwtC6q2s', + }) ); assert.equal(actual.size, 281); }); From 1e258b8d40e7952a00e303fc7d569cb1529f3acb Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Wed, 31 Jan 2024 17:48:51 -0500 Subject: [PATCH 179/186] Update challenge and credential endpoints to remove unneeded path parameters --- examples/integration-scripts/challenge.test.ts | 4 ++-- .../integration-scripts/credentials.test.ts | 18 +++++++++--------- examples/integration-scripts/multisig.test.ts | 8 ++++---- .../singlesig-vlei-issuance.test.ts | 2 +- src/keri/app/contacting.ts | 8 ++------ src/keri/app/credentialing.ts | 8 +++----- test/app/contacting.test.ts | 6 ++---- test/app/credentialing.test.ts | 5 ++--- 8 files changed, 25 insertions(+), 34 deletions(-) diff --git a/examples/integration-scripts/challenge.test.ts b/examples/integration-scripts/challenge.test.ts index 99a0f7c3..942d8f50 100644 --- a/examples/integration-scripts/challenge.test.ts +++ b/examples/integration-scripts/challenge.test.ts @@ -104,7 +104,7 @@ test('challenge', async () => { client1, await client1 .challenges() - .verify('alice', aid2.i, challenge1_small.words) + .verify(aid2.i, challenge1_small.words) ); console.log('Alice verified challenge response'); @@ -114,7 +114,7 @@ test('challenge', async () => { }; const exn = new Serder(verifyResponse.exn); - await client1.challenges().responded('alice', aid2.i, exn.ked.d); + await client1.challenges().responded(aid2.i, exn.ked.d); console.log('Alice marked challenge response as accepted'); // Check Bob's challenge in conctats diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index 61f9a124..767c1f81 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -188,7 +188,7 @@ test('single signature credentials', async () => { await step('issuer get credential by id', async () => { const issuerCredential = await issuerClient .credentials() - .get(issuerAid.name, qviCredentialId); + .get(qviCredentialId); assert.equal(issuerCredential.sad.s, QVI_SCHEMA_SAID); assert.equal(issuerCredential.sad.i, issuerAid.prefix); assert.equal(issuerCredential.status.s, '0'); @@ -198,7 +198,7 @@ test('single signature credentials', async () => { const dt = createTimestamp(); const issuerCredential = await issuerClient .credentials() - .get(issuerAid.name, qviCredentialId); + .get(qviCredentialId); assert(issuerCredential !== undefined); const [grant, gsigs, gend] = await issuerClient.ipex().grant({ @@ -244,7 +244,7 @@ test('single signature credentials', async () => { const holderCredential = await retry(async () => { const result = await holderClient .credentials() - .get(holderAid.name, qviCredentialId); + .get(qviCredentialId); assert(result !== undefined); return result; }); @@ -257,7 +257,7 @@ test('single signature credentials', async () => { await step('holder IPEX present', async () => { const holderCredential = await holderClient .credentials() - .get(holderAid.name, qviCredentialId); + .get(qviCredentialId); const [grant2, gsigs2, gend2] = await holderClient.ipex().grant({ senderName: holderAid.name, @@ -308,7 +308,7 @@ test('single signature credentials', async () => { await verifierClient.notifications().mark(verifierGrantNote.i); const verifierCredential = await retry(async () => - verifierClient.credentials().get(verifierAid.name, qviCredentialId) + verifierClient.credentials().get(qviCredentialId) ); assert.equal(verifierCredential.sad.s, QVI_SCHEMA_SAID); @@ -338,7 +338,7 @@ test('single signature credentials', async () => { async () => { const qviCredential = await holderClient .credentials() - .get(holderAid.name, qviCredentialId); + .get(qviCredentialId); const result = await holderClient.credentials().issue({ issuerName: holderAid.name, @@ -375,7 +375,7 @@ test('single signature credentials', async () => { const dt = createTimestamp(); const leCredential = await holderClient .credentials() - .get(holderAid.name, leCredentialId); + .get(leCredentialId); assert(leCredential !== undefined); const [grant, gsigs, gend] = await holderClient.ipex().grant({ @@ -424,7 +424,7 @@ test('single signature credentials', async () => { const legalEntityCredential = await retry(async () => legalEntityClient .credentials() - .get(legalEntityAid.name, leCredentialId) + .get(leCredentialId) ); assert.equal(legalEntityCredential.sad.s, LE_SCHEMA_SAID); @@ -443,7 +443,7 @@ test('single signature credentials', async () => { await waitOperation(issuerClient, revokeOperation); const issuerCredential = await issuerClient .credentials() - .get(issuerAid.name, qviCredentialId); + .get(qviCredentialId); assert.equal(issuerCredential.status.s, '1'); }); diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index bb98265c..efc7a39b 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -99,22 +99,22 @@ test('multisig', async function run() { await client3.challenges().respond('member3', aid1.prefix, words); console.log('Member3 responded challenge with signed words'); - op1 = await client1.challenges().verify('member1', aid2.prefix, words); + op1 = await client1.challenges().verify(aid2.prefix, words); op1 = await waitOperation(client1, op1); console.log('Member1 verified challenge response from member2'); let exnwords = new Serder(op1.response.exn); op1 = await client1 .challenges() - .responded('member1', aid2.prefix, exnwords.ked.d); + .responded(aid2.prefix, exnwords.ked.d); console.log('Member1 marked challenge response as accepted'); - op1 = await client1.challenges().verify('member1', aid3.prefix, words); + op1 = await client1.challenges().verify(aid3.prefix, words); op1 = await waitOperation(client1, op1); console.log('Member1 verified challenge response from member3'); exnwords = new Serder(op1.response.exn); op1 = await client1 .challenges() - .responded('member1', aid3.prefix, exnwords.ked.d); + .responded(aid3.prefix, exnwords.ked.d); console.log('Member1 marked challenge response as accepted'); // First member start the creation of a multisig identifier diff --git a/examples/integration-scripts/singlesig-vlei-issuance.test.ts b/examples/integration-scripts/singlesig-vlei-issuance.test.ts index e7a1c0f5..7347a083 100644 --- a/examples/integration-scripts/singlesig-vlei-issuance.test.ts +++ b/examples/integration-scripts/singlesig-vlei-issuance.test.ts @@ -515,7 +515,7 @@ async function getOrIssueCredential( await waitOperation(issuerClient, issResult.op); const credential = await issuerClient .credentials() - .get(issuerAid.name, issResult.acdc.ked.d); + .get(issResult.acdc.ked.d); return credential; } diff --git a/src/keri/app/contacting.ts b/src/keri/app/contacting.ts index cb3ef2f4..02617767 100644 --- a/src/keri/app/contacting.ts +++ b/src/keri/app/contacting.ts @@ -155,17 +155,15 @@ export class Challenges { /** * Ask Agent to verify a given sender signed the provided words - * @param {string} name Name or alias of the identifier * @param {string} source Prefix of the identifier that was challenged * @param {Array} words List of challenge words to check for * @returns A promise to the long running operation */ async verify( - name: string, source: string, words: string[] ): Promise> { - const path = `/challenges/${name}/verify/${source}`; + const path = `/challenges_verify/${source}`; const method = 'POST'; const data = { words: words, @@ -177,17 +175,15 @@ export class Challenges { /** * Mark challenge response as signed and accepted - * @param {string} name Name or alias of the identifier * @param {string} source Prefix of the identifier that was challenged * @param {string} said qb64 AID of exn message representing the signed response * @returns {Promise} A promise to the result */ async responded( - name: string, source: string, said: string ): Promise { - const path = `/challenges/${name}/verify/${source}`; + const path = `/challenges_verify/${source}`; const method = 'PUT'; const data = { said: said, diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index 5be18dbe..e06fa8d2 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -160,17 +160,15 @@ export class Credentials { /** * Get a credential * @async - * @param {string} name - Name or alias of the identifier * @param {string} said - SAID of the credential * @param {boolean} [includeCESR=false] - Optional flag export the credential in CESR format * @returns {Promise} A promise to the credential */ async get( - name: string, said: string, includeCESR: boolean = false ): Promise { - const path = `/identifiers/${name}/credentials/${said}`; + const path = `/credentials/${said}`; const method = 'GET'; const headers = includeCESR ? new Headers({ Accept: 'application/json+cesr' }) @@ -286,7 +284,7 @@ export class Credentials { const vs = versify(Ident.KERI, undefined, Serials.JSON, 0); const dt = new Date().toISOString().replace('Z', '000+00:00'); - const cred = await this.get(name, said); + const cred = await this.get(said); // Create rev const _rev = { @@ -373,7 +371,7 @@ export class Credentials { const hab = await this.client.identifiers().get(name); const pre: string = hab.prefix; - const cred = await this.get(name, said); + const cred = await this.get(said); const data = { i: cred.sad.i, s: cred.sad.s, diff --git a/test/app/contacting.test.ts b/test/app/contacting.test.ts index 7018720d..ea9fce52 100644 --- a/test/app/contacting.test.ts +++ b/test/app/contacting.test.ts @@ -272,7 +272,6 @@ describe('Contacting', () => { assert.equal(lastBody.sigs[0].length, 88); await challenges.verify( - 'aid1', 'EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p', words ); @@ -280,14 +279,13 @@ describe('Contacting', () => { assert.equal( lastCall[0]!, url + - '/challenges/aid1/verify/EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p' + '/challenges_verify/EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p' ); assert.equal(lastCall[1]!.method, 'POST'); lastBody = JSON.parse(lastCall[1]!.body!.toString()); assert.deepEqual(lastBody.words, words); await challenges.responded( - 'aid1', 'EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p', 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' ); @@ -295,7 +293,7 @@ describe('Contacting', () => { assert.equal( lastCall[0]!, url + - '/challenges/aid1/verify/EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p' + '/challenges_verify/EG2XjQN-3jPN5rcR4spLjaJyM4zA6Lgg-Hd5vSMymu5p' ); assert.equal(lastCall[1]!.method, 'PUT'); lastBody = JSON.parse(lastCall[1]!.body!.toString()); diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index b016fb31..d86f2bc8 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -157,7 +157,7 @@ fetchMock.mockResponse((req) => { req.method, requrl.pathname.split('?')[0] ); - const body = req.url.startsWith(url + '/identifiers/aid1/credentials') + const body = req.url.startsWith(url + '/credentials') ? mockCredential : mockGetAID; @@ -196,7 +196,6 @@ describe('Credentialing', () => { assert.deepEqual(lastBody, kargs); await credentials.get( - 'aid1', 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', true ); @@ -204,7 +203,7 @@ describe('Credentialing', () => { assert.equal( lastCall[0]!, url + - '/identifiers/aid1/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + '/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' ); assert.equal(lastCall[1]!.method, 'GET'); From 72df42f9f299317b182e1fc845ba5d77b36e4273 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Wed, 31 Jan 2024 17:55:13 -0500 Subject: [PATCH 180/186] pretty --- examples/integration-scripts/challenge.test.ts | 4 +--- examples/integration-scripts/credentials.test.ts | 4 +--- examples/integration-scripts/multisig.test.ts | 8 ++------ src/keri/app/contacting.ts | 10 ++-------- src/keri/app/credentialing.ts | 5 +---- test/app/credentialing.test.ts | 3 +-- 6 files changed, 8 insertions(+), 26 deletions(-) diff --git a/examples/integration-scripts/challenge.test.ts b/examples/integration-scripts/challenge.test.ts index 942d8f50..12aa4a56 100644 --- a/examples/integration-scripts/challenge.test.ts +++ b/examples/integration-scripts/challenge.test.ts @@ -102,9 +102,7 @@ test('challenge', async () => { // Alice verifies Bob's response const verifyOperation = await waitOperation( client1, - await client1 - .challenges() - .verify(aid2.i, challenge1_small.words) + await client1.challenges().verify(aid2.i, challenge1_small.words) ); console.log('Alice verified challenge response'); diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index 767c1f81..38e82f71 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -422,9 +422,7 @@ test('single signature credentials', async () => { await step('Legal Entity has chained credential', async () => { const legalEntityCredential = await retry(async () => - legalEntityClient - .credentials() - .get(leCredentialId) + legalEntityClient.credentials().get(leCredentialId) ); assert.equal(legalEntityCredential.sad.s, LE_SCHEMA_SAID); diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index efc7a39b..0492c9ca 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -103,18 +103,14 @@ test('multisig', async function run() { op1 = await waitOperation(client1, op1); console.log('Member1 verified challenge response from member2'); let exnwords = new Serder(op1.response.exn); - op1 = await client1 - .challenges() - .responded(aid2.prefix, exnwords.ked.d); + op1 = await client1.challenges().responded(aid2.prefix, exnwords.ked.d); console.log('Member1 marked challenge response as accepted'); op1 = await client1.challenges().verify(aid3.prefix, words); op1 = await waitOperation(client1, op1); console.log('Member1 verified challenge response from member3'); exnwords = new Serder(op1.response.exn); - op1 = await client1 - .challenges() - .responded(aid3.prefix, exnwords.ked.d); + op1 = await client1.challenges().responded(aid3.prefix, exnwords.ked.d); console.log('Member1 marked challenge response as accepted'); // First member start the creation of a multisig identifier diff --git a/src/keri/app/contacting.ts b/src/keri/app/contacting.ts index 02617767..98a71ca5 100644 --- a/src/keri/app/contacting.ts +++ b/src/keri/app/contacting.ts @@ -159,10 +159,7 @@ export class Challenges { * @param {Array} words List of challenge words to check for * @returns A promise to the long running operation */ - async verify( - source: string, - words: string[] - ): Promise> { + async verify(source: string, words: string[]): Promise> { const path = `/challenges_verify/${source}`; const method = 'POST'; const data = { @@ -179,10 +176,7 @@ export class Challenges { * @param {string} said qb64 AID of exn message representing the signed response * @returns {Promise} A promise to the result */ - async responded( - source: string, - said: string - ): Promise { + async responded(source: string, said: string): Promise { const path = `/challenges_verify/${source}`; const method = 'PUT'; const data = { diff --git a/src/keri/app/credentialing.ts b/src/keri/app/credentialing.ts index e06fa8d2..058ccdd4 100644 --- a/src/keri/app/credentialing.ts +++ b/src/keri/app/credentialing.ts @@ -164,10 +164,7 @@ export class Credentials { * @param {boolean} [includeCESR=false] - Optional flag export the credential in CESR format * @returns {Promise} A promise to the credential */ - async get( - said: string, - includeCESR: boolean = false - ): Promise { + async get(said: string, includeCESR: boolean = false): Promise { const path = `/credentials/${said}`; const method = 'GET'; const headers = includeCESR diff --git a/test/app/credentialing.test.ts b/test/app/credentialing.test.ts index d86f2bc8..e426a041 100644 --- a/test/app/credentialing.test.ts +++ b/test/app/credentialing.test.ts @@ -202,8 +202,7 @@ describe('Credentialing', () => { lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; assert.equal( lastCall[0]!, - url + - '/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' + url + '/credentials/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao' ); assert.equal(lastCall[1]!.method, 'GET'); From 1be89892c07733f8c6dceeef5b42c699dbf3e4ce Mon Sep 17 00:00:00 2001 From: lenkan Date: Fri, 26 Jan 2024 16:54:47 +0100 Subject: [PATCH 181/186] fix: rotate should use the next threshold as default value for rotate --- src/keri/app/aiding.ts | 33 ++- src/keri/app/controller.ts | 2 - test/app/aiding.test.ts | 528 ++++++++++++++++++------------------- test/app/test-utils.ts | 109 ++++++++ 4 files changed, 387 insertions(+), 285 deletions(-) create mode 100644 test/app/test-utils.ts diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index fb3272c7..adcbd4fb 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -51,14 +51,23 @@ export interface RotateIdentifierArgs { rstates?: any[]; } +/** + * Reducing the SignifyClient dependencies used by Identifier class + */ +export type IdentifierSignifyClient = Pick< + SignifyClient, + 'fetch' | 'pidx' | 'manager' +>; + /** Identifier */ export class Identifier { - public client: SignifyClient; + public client: IdentifierSignifyClient; + /** * Identifier - * @param {SignifyClient} client + * @param {IdentifierSignifyClient} client */ - constructor(client: SignifyClient) { + constructor(client: IdentifierSignifyClient) { this.client = client; } @@ -263,7 +272,7 @@ export class Identifier { }; jsondata[keeper.algo] = keeper.params(); - const res = this.client.fetch( + const res = await this.client.fetch( '/identifiers/' + name + '?type=ixn', 'PUT', jsondata @@ -294,7 +303,7 @@ export class Identifier { const dig = state.d; const ridx = Number(state.s) + 1; const wits = state.b; - let isith = state.kt; + let isith = state.nt; let nsith = kargs.nsith ?? isith; @@ -361,7 +370,11 @@ export class Identifier { }; jsondata[keeper.algo] = keeper.params(); - const res = this.client.fetch('/identifiers/' + name, 'PUT', jsondata); + const res = await this.client.fetch( + '/identifiers/' + name, + 'PUT', + jsondata + ); return new EventResult(serder, sigs, res); } @@ -447,9 +460,13 @@ export class Identifier { export class EventResult { private readonly _serder: Serder; private readonly _sigs: string[]; - private readonly promise: Promise; + private readonly promise: Promise | Response; - constructor(serder: Serder, sigs: string[], promise: Promise) { + constructor( + serder: Serder, + sigs: string[], + promise: Promise | Response + ) { this._serder = serder; this._sigs = sigs; this.promise = promise; diff --git a/src/keri/app/controller.ts b/src/keri/app/controller.ts index af4c5c6a..bdfcc7ba 100644 --- a/src/keri/app/controller.ts +++ b/src/keri/app/controller.ts @@ -282,8 +282,6 @@ export class Controller { for (const aid of aids) { const pre: string = aid['prefix'] as string; if ('salty' in aid) { - console.log('salty aid to rotate'); - console.log(aid); const salty: any = aid['salty']; const cipher = new Cipher({ qb64: salty['sxlt'] }); const dnxt = decrypter.decrypt(null, cipher).qb64; diff --git a/test/app/aiding.test.ts b/test/app/aiding.test.ts index 3b601765..de7a08e7 100644 --- a/test/app/aiding.test.ts +++ b/test/app/aiding.test.ts @@ -1,190 +1,77 @@ import { strict as assert } from 'assert'; -import { SignifyClient } from '../../src/keri/app/clienting'; import { CreateIdentiferArgs, RotateIdentifierArgs, } from '../../src/keri/app/aiding'; -import { Authenticater } from '../../src/keri/core/authing'; -import { Salter, Tier } from '../../src/keri/core/salter'; import { Algos } from '../../src/keri/core/manager'; import libsodium from 'libsodium-wrappers-sumo'; -import fetchMock from 'jest-fetch-mock'; -import 'whatwg-fetch'; - -fetchMock.enableMocks(); - -const url = 'http://127.0.0.1:3901'; -const boot_url = 'http://127.0.0.1:3903'; - -const mockConnect = - '{"agent":{"vn":[1,0],"i":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei",' + - '"s":"0","p":"","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","f":"0",' + - '"dt":"2023-08-19T21:04:57.948863+00:00","et":"dip","kt":"1",' + - '"k":["DMZh_y-H5C3cSbZZST-fqnsmdNTReZxIh0t2xSTOJQ8a"],"nt":"1",' + - '"n":["EM9M2EQNCBK0MyAhVYBvR98Q0tefpvHgE-lHLs82XgqC"],"bt":"0","b":[],' + - '"c":[],"ee":{"s":"0","d":"EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei","br":[],"ba":[]},' + - '"di":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose"},"controller":{"state":{"vn":[1,0],' + - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","p":"",' + - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","f":"0","dt":"2023-08-19T21:04:57.959047+00:00",' + - '"et":"icp","kt":"1","k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"ee":{"s":"0",' + - '"d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","br":[],"ba":[]},"di":""},' + - '"ee":{"v":"KERI10JSON00012b_","t":"icp","d":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose",' + - '"i":"ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose","s":"0","kt":"1",' + - '"k":["DAbWjobbaLqRB94KiAutAHb_qzPpOHm3LURA_ksxetVc"],"nt":"1",' + - '"n":["EIFG_uqfr1yN560LoHYHfvPAhxQ5sN6xZZT_E3h7d2tL"],"bt":"0","b":[],"c":[],"a":[]}},"ridx":0,' + - '"pidx":0}'; -const mockGetAID = { - name: 'aid1', - prefix: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', - salty: { - sxlt: '1AAHnNQTkD0yxOC9tSz_ukbB2e-qhDTStH18uCsi5PCwOyXLONDR3MeKwWv_AVJKGKGi6xiBQH25_R1RXLS2OuK3TN3ovoUKH7-A', - pidx: 0, - kidx: 0, - stem: 'signify:aid', - tier: 'low', - dcode: 'E', - icodes: ['A'], - ncodes: ['A'], - transferable: true, - }, - transferable: true, - state: { - vn: [1, 0], - i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', - s: '0', - p: '', - d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', - f: '0', - dt: '2023-08-21T22:30:46.473545+00:00', - et: 'icp', - kt: '1', - k: ['DPmhSfdhCPxr3EqjxzEtF8TVy0YX7ATo0Uc8oo2cnmY9'], - nt: '1', - n: ['EAORnRtObOgNiOlMolji-KijC_isa3lRDpHCsol79cOc'], - bt: '0', - b: [], - c: [], - ee: { - s: '0', - d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', - br: [], - ba: [], - }, - di: '', - }, - windexes: [], -}; - -const mockCredential = { - sad: { - v: 'ACDC10JSON000197_', - d: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', - i: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', - ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', - s: 'EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao', - a: { - d: 'EK0GOjijKd8_RLYz9qDuuG29YbbXjU8yJuTQanf07b6P', - i: 'EKvn1M6shPLnXTb47bugVJblKMuWC0TcLIePP8p98Bby', - dt: '2023-08-23T15:16:07.553000+00:00', - LEI: '5493001KJTIIGC8Y1R17', - }, - }, - pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', - sadsigers: [ - { - path: '-', - pre: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', - sn: 0, - d: 'EMQQpnSkgfUOgWdzQTWfrgiVHKIDAhvAZIPQ6z3EAfz1', - }, - ], - sadcigars: [], - chains: [], - status: { - v: 'KERI10JSON000135_', - i: 'EMwcsEMUEruPXVwPCW7zmqmN8m0I3CihxolBm-RDrsJo', - s: '0', - d: 'ENf3IEYwYtFmlq5ZzoI-zFzeR7E3ZNRN2YH_0KAFbdJW', - ri: 'EGK216v1yguLfex4YRFnG7k1sXRjh3OKY7QqzdKsx7df', - ra: {}, - a: { s: 2, d: 'EIpgyKVF0z0Pcn2_HgbWhEKmJhOXFeD4SA62SrxYXOLt' }, - dt: '2023-08-23T15:16:07.553000+00:00', - et: 'iss', - }, -}; - -fetchMock.mockResponse((req) => { - if (req.url.startsWith(url + '/agent')) { - return Promise.resolve({ body: mockConnect, init: { status: 202 } }); - } else if (req.url == boot_url + '/boot') { - return Promise.resolve({ body: '', init: { status: 202 } }); - } else { - const headers = new Headers(); - let signed_headers = new Headers(); - - headers.set( - 'Signify-Resource', - 'EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei' - ); - headers.set( - 'Signify-Timestamp', - new Date().toISOString().replace('Z', '000+00:00') - ); - headers.set('Content-Type', 'application/json'); - - const requrl = new URL(req.url); - const salter = new Salter({ qb64: '0AAwMTIzNDU2Nzg5YWJjZGVm' }); - const signer = salter.signer( - 'A', - true, - 'agentagent-ELI7pg979AdhmvrjDeam2eAO2SR5niCgnjAJXJHtJose00', - Tier.low - ); - - const authn = new Authenticater(signer!, signer!.verfer); - signed_headers = authn.sign( - headers, - req.method, - requrl.pathname.split('?')[0] - ); - const body = req.url.startsWith(url + '/identifiers/aid1/credentials') - ? mockCredential - : mockGetAID; - - return Promise.resolve({ - body: JSON.stringify(body), - init: { status: 202, headers: signed_headers }, - }); +import { randomUUID } from 'crypto'; +import { + Controller, + Identifier, + IdentifierSignifyClient, + KeyManager, + Tier, + randomPasscode, +} from '../../src'; +import { createMockIdentifierState } from './test-utils'; + +const bran = '0123456789abcdefghijk'; + +export class MockClient implements IdentifierSignifyClient { + manager: KeyManager; + controller: Controller; + pidx = 0; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + fetch = jest.fn, [string, string, any]>(); + + constructor(bran: string) { + this.controller = new Controller(bran, Tier.low); + this.manager = new KeyManager(this.controller.salter); } -}); -describe('Aiding', () => { - it('Salty identifiers', async () => { - await libsodium.ready; - const bran = '0123456789abcdefghijk'; + identifiers() { + return new Identifier(this); + } - const client = new SignifyClient(url, bran, Tier.low, boot_url); + getLastMockRequest() { + const [pathname, method, body] = this.fetch.mock.lastCall ?? []; - await client.boot(); - await client.connect(); + return { + path: pathname, + method: method, + body: body, + }; + } +} - const identifiers = client.identifiers(); +let client: MockClient; +beforeEach(async () => { + await libsodium.ready; + client = new MockClient(bran); +}); - await identifiers.list(); - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - assert.equal(lastCall[0]!, url + '/identifiers'); - assert.equal(lastCall[1]!.method, 'GET'); +describe('Aiding', () => { + it('Can list identifiers', async () => { + client.fetch.mockResolvedValue(Response.json({})); + await client.identifiers().list(); + const lastCall = client.getLastMockRequest(); + expect(lastCall.path).toEqual('/identifiers'); + expect(lastCall.method).toEqual('GET'); + }); + it('Can create salty identifiers', async () => { + client.fetch.mockResolvedValue(Response.json({})); await client .identifiers() .create('aid1', { bran: '0123456789abcdefghijk' }); - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - let lastBody = JSON.parse(lastCall[1]!.body!.toString()); - assert.equal(lastCall[0]!, url + '/identifiers'); - assert.equal(lastCall[1]!.method, 'POST'); - assert.equal(lastBody.name, 'aid1'); - assert.deepEqual(lastBody.icp, { + + const lastCall = client.getLastMockRequest(); + assert.equal(lastCall.path, '/identifiers'); + assert.equal(lastCall.method, 'POST'); + assert.equal(lastCall.body.name, 'aid1'); + assert.deepEqual(lastCall.body.icp, { v: 'KERI10JSON00012b_', t: 'icp', d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', @@ -199,31 +86,36 @@ describe('Aiding', () => { c: [], a: [], }); - assert.deepEqual(lastBody.sigs, [ + assert.deepEqual(lastCall.body.sigs, [ 'AACZZe75PvUZ1lCREPxFAcX59XHo-BGMYTAGni-I4E0eqKznrEoK2d-mtWmWHwKns7tfnjOzTfDUcv7PLFJ52g0A', ]); - assert.deepEqual(lastBody.salty.pidx, 0); - assert.deepEqual(lastBody.salty.kidx, 0); - assert.deepEqual(lastBody.salty.stem, 'signify:aid'); - assert.deepEqual(lastBody.salty.tier, 'low'); - assert.deepEqual(lastBody.salty.icodes, ['A']); - assert.deepEqual(lastBody.salty.ncodes, ['A']); - assert.deepEqual(lastBody.salty.dcode, 'E'); - assert.deepEqual(lastBody.salty.transferable, true); - - await client.identifiers().create('aid2', { + assert.deepEqual(lastCall.body.salty.pidx, 0); + assert.deepEqual(lastCall.body.salty.kidx, 0); + assert.deepEqual(lastCall.body.salty.stem, 'signify:aid'); + assert.deepEqual(lastCall.body.salty.tier, 'low'); + assert.deepEqual(lastCall.body.salty.icodes, ['A']); + assert.deepEqual(lastCall.body.salty.ncodes, ['A']); + assert.deepEqual(lastCall.body.salty.dcode, 'E'); + assert.deepEqual(lastCall.body.salty.transferable, true); + }); + + it('Can create salty AID with multiple signatures', async () => { + client.fetch.mockResolvedValue(Response.json({})); + + const result = await client.identifiers().create('aid2', { count: 3, ncount: 3, isith: '2', nsith: '2', bran: '0123456789lmnopqrstuv', }); - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - lastBody = JSON.parse(lastCall[1]!.body!.toString()); - assert.equal(lastCall[0]!, url + '/identifiers'); - assert.equal(lastCall[1]!.method, 'POST'); - assert.equal(lastBody.name, 'aid2'); - assert.deepEqual(lastBody.icp, { + + await result.op(); + const lastCall = client.getLastMockRequest(); + assert.equal(lastCall.path, '/identifiers'); + assert.equal(lastCall.method, 'POST'); + assert.equal(lastCall.body.name, 'aid2'); + assert.deepEqual(lastCall.body.icp, { v: 'KERI10JSON0001e7_', t: 'icp', d: 'EP10ooRj0DJF0HWZePEYMLPl-arMV-MAoTKK-o3DXbgX', @@ -246,26 +138,31 @@ describe('Aiding', () => { c: [], a: [], }); - assert.deepEqual(lastBody.sigs, [ + assert.deepEqual(lastCall.body.sigs, [ 'AAD9_IgPaUEBjAl1Ck61Jkn78ErzsnVkIxpaFBYSdSEAW4NbtXsLiUn1olijzdTQYn_Byq6MaEk-eoMN3Oc0WEEC', 'ABBWJ7KkAXXiRK8JyEUpeARHJTTzlBHu_ev-jUrNEhV9sX4_4lI7wxowrQisumt5r50bUNfYBK7pxSwHk8I4IFQP', 'ACDTITaEquHdYKkS-94tVCxL3IYrtvhlTt__sSUavTJT6fI3KB-uwXV7L0SfzMq0gFqYxkheH2LdC4HkAW2mH4QJ', ]); - assert.deepEqual(lastBody.salty.pidx, 1); - assert.deepEqual(lastBody.salty.kidx, 0); - assert.deepEqual(lastBody.salty.stem, 'signify:aid'); - assert.deepEqual(lastBody.salty.tier, 'low'); - assert.deepEqual(lastBody.salty.icodes, ['A', 'A', 'A']); - assert.deepEqual(lastBody.salty.ncodes, ['A', 'A', 'A']); - assert.deepEqual(lastBody.salty.dcode, 'E'); - assert.deepEqual(lastBody.salty.transferable, true); + assert.deepEqual(lastCall.body.salty.pidx, 0); + assert.deepEqual(lastCall.body.salty.kidx, 0); + assert.deepEqual(lastCall.body.salty.stem, 'signify:aid'); + assert.deepEqual(lastCall.body.salty.tier, 'low'); + assert.deepEqual(lastCall.body.salty.icodes, ['A', 'A', 'A']); + assert.deepEqual(lastCall.body.salty.ncodes, ['A', 'A', 'A']); + assert.deepEqual(lastCall.body.salty.dcode, 'E'); + assert.deepEqual(lastCall.body.salty.transferable, true); + }); + + it('Can rotate salty identifier', async () => { + const aid1 = await createMockIdentifierState('aid1', bran, {}); + client.fetch.mockResolvedValueOnce(Response.json(aid1)); + client.fetch.mockResolvedValueOnce(Response.json({})); await client.identifiers().rotate('aid1'); - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - lastBody = JSON.parse(lastCall[1]!.body!.toString()); - assert.equal(lastCall[0]!, url + '/identifiers/aid1'); - assert.equal(lastCall[1]!.method, 'PUT'); - assert.deepEqual(lastBody.rot, { + const lastCall = client.getLastMockRequest(); + assert.equal(lastCall.path, '/identifiers/aid1'); + assert.equal(lastCall.method, 'PUT'); + assert.deepEqual(lastCall.body.rot, { v: 'KERI10JSON000160_', t: 'rot', d: 'EBQABdRgaxJONrSLcgrdtbASflkvLxJkiDO0H-XmuhGg', @@ -281,18 +178,20 @@ describe('Aiding', () => { ba: [], a: [], }); - assert.deepEqual(lastBody.sigs, [ + assert.deepEqual(lastCall.body.sigs, [ 'AABWSckRpAWLpfFSrpnDR3SzQASrRSVKGh8AnHxauhN_43qKkqPb9l04utnTm2ixNpGGJ-UB8qdKMjfkEQ61AIQC', ]); - assert.deepEqual(lastBody.salty.pidx, 0); - assert.deepEqual(lastBody.salty.kidx, 1); - assert.deepEqual(lastBody.salty.stem, 'signify:aid'); - assert.deepEqual(lastBody.salty.tier, 'low'); - assert.deepEqual(lastBody.salty.icodes, ['A']); - assert.deepEqual(lastBody.salty.ncodes, ['A']); - assert.deepEqual(lastBody.salty.dcode, 'E'); - assert.deepEqual(lastBody.salty.transferable, true); + assert.deepEqual(lastCall.body.salty.pidx, 0); + assert.deepEqual(lastCall.body.salty.kidx, 1); + assert.deepEqual(lastCall.body.salty.stem, 'signify:aid'); + assert.deepEqual(lastCall.body.salty.tier, 'low'); + assert.deepEqual([...lastCall.body.salty.icodes], ['A']); + assert.deepEqual([...lastCall.body.salty.ncodes], ['A']); + assert.deepEqual(lastCall.body.salty.dcode, 'E'); + assert.deepEqual(lastCall.body.salty.transferable, true); + }); + it('Can create interact event', async () => { const data = [ { i: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', @@ -300,12 +199,18 @@ describe('Aiding', () => { d: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', }, ]; + + const aid1 = await createMockIdentifierState('aid1', bran); + client.fetch.mockResolvedValueOnce(Response.json(aid1)); + client.fetch.mockResolvedValueOnce(Response.json({})); + await client.identifiers().interact('aid1', data); - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - lastBody = JSON.parse(lastCall[1]!.body!.toString()); - assert.equal(lastCall[0]!, url + '/identifiers/aid1?type=ixn'); - assert.equal(lastCall[1]!.method, 'PUT'); - assert.deepEqual(lastBody.ixn, { + + const lastCall = client.getLastMockRequest(); + + expect(lastCall.path).toEqual('/identifiers/aid1?type=ixn'); + expect(lastCall.method).toEqual('PUT'); + expect(lastCall.body.ixn).toMatchObject({ v: 'KERI10JSON000138_', t: 'ixn', d: 'EPtNJLDft3CB-oz3qIhe86fnTKs-GYWiWyx8fJv3VO5e', @@ -320,86 +225,159 @@ describe('Aiding', () => { }, ], }); - assert.deepEqual(lastBody.sigs, [ + + assert.deepEqual(lastCall.body.sigs, [ 'AADEzKk-5LT6vH-PWFb_1i1A8FW-KGHORtTOCZrKF4gtWkCr9vN1z_mDSVKRc6MKktpdeB3Ub1fWCGpnS50hRgoJ', ]); + }); + + it('Can add end role', async () => { + const aid1 = await createMockIdentifierState('aid1', bran, {}); + client.fetch.mockResolvedValueOnce(Response.json(aid1)); + client.fetch.mockResolvedValueOnce(Response.json({})); await client.identifiers().addEndRole('aid1', 'agent'); - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - lastBody = JSON.parse(lastCall[1]!.body!.toString()); - assert.equal(lastCall[0]!, url + '/identifiers/aid1/endroles'); - assert.equal(lastCall[1]!.method, 'POST'); - assert.equal(lastBody.rpy.t, 'rpy'); - assert.equal(lastBody.rpy.r, '/end/role/add'); - assert.deepEqual(lastBody.rpy.a, { + const lastCall = client.getLastMockRequest(); + assert.equal(lastCall.path, '/identifiers/aid1/endroles'); + assert.equal(lastCall.method, 'POST'); + assert.equal(lastCall.body.rpy.t, 'rpy'); + assert.equal(lastCall.body.rpy.r, '/end/role/add'); + assert.deepEqual(lastCall.body.rpy.a, { cid: 'ELUvZ8aJEHAQE-0nsevyYTP98rBbGJUrTj5an-pCmwrK', role: 'agent', }); + }); + it('Can get members', async () => { + client.fetch.mockResolvedValue(Response.json({})); await client.identifiers().members('aid1'); - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - assert.equal(lastCall[0]!, url + '/identifiers/aid1/members'); - assert.equal(lastCall[1]!.method, 'GET'); + const lastCall = client.getLastMockRequest(); + assert.equal(lastCall.path, '/identifiers/aid1/members'); + assert.equal(lastCall.method, 'GET'); }); it('Randy identifiers', async () => { - await libsodium.ready; - const bran = '0123456789abcdefghijk'; + client.fetch.mockResolvedValue(Response.json({})); + await client.identifiers().create('aid1', { + bran: '0123456789abcdefghijk', + algo: Algos.randy, + }); + const lastCall = client.getLastMockRequest(); + assert.equal(lastCall.path, '/identifiers'); + assert.equal(lastCall.method, 'POST'); + assert.equal(lastCall.body.name, 'aid1'); + assert.deepEqual(lastCall.body.icp.s, '0'); + assert.deepEqual(lastCall.body.icp.kt, '1'); + assert.deepEqual(lastCall.body.randy.transferable, true); + }); - const client = new SignifyClient(url, bran, Tier.low, boot_url); + describe('Group identifiers', () => { + it('Can Rotate group', async () => { + const member1 = await createMockIdentifierState( + randomUUID(), + bran, + {} + ); + const member2 = await createMockIdentifierState( + randomUUID(), + randomPasscode(), + {} + ); - await client.boot(); - await client.connect(); + const group = await createMockIdentifierState(randomUUID(), bran, { + algo: Algos.group, + mhab: member1, + nsith: '1', + isith: '1', + states: [member1.state, member2.state], + rstates: [member1.state, member2.state], + }); - const identifiers = client.identifiers(); + client.fetch.mockResolvedValueOnce( + Response.json(group, { status: 200 }) + ); + client.fetch.mockResolvedValueOnce( + Response.json({}, { status: 202 }) + ); - await identifiers.list(); - let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - assert.equal(lastCall[0]!, url + '/identifiers'); - assert.equal(lastCall[1]!.method, 'GET'); + const args: RotateIdentifierArgs = { + nsith: '1', + states: [member1.state, member2.state], + rstates: [member1.state, member2.state], + }; - await client.identifiers().create('aid1', { - bran: '0123456789abcdefghijk', - algo: Algos.randy, + await client.identifiers().rotate(group.alias, args); + const request = client.getLastMockRequest(); + const body = request.body; + expect(body).toMatchObject({ + rot: { + t: 'rot', + }, + }); }); - lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; - const lastBody = JSON.parse(lastCall[1]!.body!.toString()); - assert.equal(lastCall[0]!, url + '/identifiers'); - assert.equal(lastCall[1]!.method, 'POST'); - assert.equal(lastBody.name, 'aid1'); - assert.deepEqual(lastBody.icp.s, '0'); - assert.deepEqual(lastBody.icp.kt, '1'); - assert.deepEqual(lastBody.randy.transferable, true); - }); - it('CreateIdentiferArgs', () => { - let args: CreateIdentiferArgs; - args = { - isith: 1, - nsith: 1, - }; - args = { - isith: '1', - nsith: '1', - }; - args = { - isith: ['1'], - nsith: ['1'], - }; - args !== null; // avoids TS6133 + it('Should use the previous sign threshold as the default next threshold', async () => { + const member1 = await createMockIdentifierState(randomUUID(), bran); + const member2 = await createMockIdentifierState( + randomUUID(), + randomPasscode() + ); + + const nextThreshold = ['1/2', '1/2']; + const group = await createMockIdentifierState(randomUUID(), bran, { + algo: Algos.group, + mhab: member1, + isith: ['1/3', '2/3'], + nsith: nextThreshold, + states: [member1.state, member2.state], + rstates: [member1.state, member2.state], + }); + + client.fetch.mockResolvedValueOnce(Response.json(group)); + client.fetch.mockResolvedValueOnce(Response.json({})); + await client.identifiers().rotate(group.alias, { + nsith: '1', + states: [member1.state, member2.state], + rstates: [member1.state, member2.state], + }); + const request = client.getLastMockRequest(); + expect(request.body.rot).toMatchObject({ + t: 'rot', + kt: nextThreshold, + }); + }); }); - it('RotateIdentifierArgs', () => { - let args: RotateIdentifierArgs; - args = { - nsith: 1, - }; - args = { - nsith: '1', - }; - args = { - nsith: ['1'], - }; - args !== null; // avoids TS6133 + describe('Typings test', () => { + it('CreateIdentiferArgs', () => { + let args: CreateIdentiferArgs; + args = { + isith: 1, + nsith: 1, + }; + args = { + isith: '1', + nsith: '1', + }; + args = { + isith: ['1'], + nsith: ['1'], + }; + args !== null; // avoids TS6133 + }); + + it('RotateIdentifierArgs', () => { + let args: RotateIdentifierArgs; + args = { + nsith: 1, + }; + args = { + nsith: '1', + }; + args = { + nsith: ['1'], + }; + args !== null; // avoids TS6133 + }); }); }); diff --git a/test/app/test-utils.ts b/test/app/test-utils.ts new file mode 100644 index 00000000..93fdca82 --- /dev/null +++ b/test/app/test-utils.ts @@ -0,0 +1,109 @@ +import { + Algos, + Controller, + CreateIdentiferArgs, + KeyManager, + MtrDex, + Serials, + Tier, + Versionage, + incept, +} from '../../src'; + +export async function createMockIdentifierState( + name: string, + bran: string, + kargs: CreateIdentiferArgs = {} +) { + const controller = new Controller(bran, Tier.low); + const manager = new KeyManager(controller.salter); + const algo = kargs.algo == undefined ? Algos.salty : kargs.algo; + + const transferable = kargs.transferable ?? true; + const isith = kargs.isith ?? '1'; + const nsith = kargs.nsith ?? '1'; + const wits = kargs.wits ?? []; + const toad = kargs.toad ?? 0; + const dcode = kargs.dcode ?? MtrDex.Blake3_256; + const proxy = kargs.proxy; + const delpre = kargs.delpre; + const data = kargs.data != undefined ? [kargs.data] : []; + const pre = kargs.pre; + const states = kargs.states; + const rstates = kargs.rstates; + const prxs = kargs.prxs; + const nxts = kargs.nxts; + const mhab = kargs.mhab; + const _keys = kargs.keys; + const _ndigs = kargs.ndigs; + const count = kargs.count; + const ncount = kargs.ncount; + const tier = kargs.tier; + const extern_type = kargs.extern_type; + const extern = kargs.extern; + + const keeper = manager!.new(algo, 0, { + transferable: transferable, + isith: isith, + nsith: nsith, + wits: wits, + toad: toad, + proxy: proxy, + delpre: delpre, + dcode: dcode, + data: data, + algo: algo, + pre: pre, + prxs: prxs, + nxts: nxts, + mhab: mhab, + states: states, + rstates: rstates, + keys: _keys, + ndigs: _ndigs, + bran: bran, + count: count, + ncount: ncount, + tier: tier, + extern_type: extern_type, + extern: extern, + }); + const [keys, ndigs] = await keeper!.incept(transferable); + const serder = incept({ + keys: keys!, + isith: isith, + ndigs: ndigs, + nsith: nsith, + toad: toad, + wits: wits, + cnfg: [], + data: data, + version: Versionage, + kind: Serials.JSON, + code: dcode, + intive: false, + ...(delpre ? { delpre } : {}), + }); + + return { + name: name, + prefix: serder.pre, + [algo]: keeper.params(), + state: { + vn: [serder.version.major, serder.version.minor], + s: serder.ked.s, + d: serder.ked.d, + i: serder.pre, + ee: serder.ked, + kt: serder.ked.kt, + k: serder.ked.k, + nt: serder.ked.nt, + n: serder.ked.n, + bt: serder.ked.bt, + b: serder.ked.b, + p: serder.ked.p ?? '', + c: [], + di: serder.ked.di ?? '', + }, + }; +} From bfbe5180baf64bb74bb24a706826e0cf15337e16 Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 1 Feb 2024 09:48:59 +0100 Subject: [PATCH 182/186] explicitly declare identifier dependencies interface --- src/keri/app/aiding.ts | 22 ++++++++++++++-------- test/app/aiding.test.ts | 4 ++-- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index adcbd4fb..360004a7 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -1,4 +1,3 @@ -import { SignifyClient } from './clienting'; import { Tier } from '../core/salter'; import { Algos } from '../core/manager'; import { incept, interact, reply, rotate } from '../core/eventing'; @@ -7,6 +6,7 @@ import { Tholder } from '../core/tholder'; import { MtrDex } from '../core/matter'; import { Serder } from '../core/serder'; import { parseRangeHeaders } from '../core/httping'; +import { KeyManager } from '../core/keeping'; /** Arguments required to create an identfier */ export interface CreateIdentiferArgs { @@ -54,20 +54,26 @@ export interface RotateIdentifierArgs { /** * Reducing the SignifyClient dependencies used by Identifier class */ -export type IdentifierSignifyClient = Pick< - SignifyClient, - 'fetch' | 'pidx' | 'manager' ->; +export interface IdentifierDeps { + fetch( + pathname: string, + method: string, + body: unknown, + headers?: Headers + ): Promise; + pidx: number; + manager: KeyManager | null; +} /** Identifier */ export class Identifier { - public client: IdentifierSignifyClient; + public client: IdentifierDeps; /** * Identifier - * @param {IdentifierSignifyClient} client + * @param {IdentifierDeps} client */ - constructor(client: IdentifierSignifyClient) { + constructor(client: IdentifierDeps) { this.client = client; } diff --git a/test/app/aiding.test.ts b/test/app/aiding.test.ts index de7a08e7..094389d3 100644 --- a/test/app/aiding.test.ts +++ b/test/app/aiding.test.ts @@ -9,7 +9,7 @@ import { randomUUID } from 'crypto'; import { Controller, Identifier, - IdentifierSignifyClient, + IdentifierDeps, KeyManager, Tier, randomPasscode, @@ -18,7 +18,7 @@ import { createMockIdentifierState } from './test-utils'; const bran = '0123456789abcdefghijk'; -export class MockClient implements IdentifierSignifyClient { +export class MockClient implements IdentifierDeps { manager: KeyManager; controller: Controller; pidx = 0; From 5292b246286a2d063f5fb4650b4ecd61967a87f1 Mon Sep 17 00:00:00 2001 From: Petteri Stenius Date: Sun, 11 Feb 2024 11:04:49 +0200 Subject: [PATCH 183/186] Fix flaky integration tests by waiting for operations (#210) * fix addEndRole return type * update Operation type, add list and delete methods to Operations * fix Notifications.delete * make waitOperation check dependent operations client side fix for https://github.com/WebOfTrust/keria/issues/147 add markNotification and markAndRemoveNotification * use waitOperation and markAndRemoveNotification where needed * rename to assertOperations * rename to assertNotifications * cleanup * simplify with toHaveLength(0) * adds warnNotifications * uses warnNotifications * fixed to handle all notifications * npm run pretty * unit tests for operations.list and .delete * add missing await --- .../integration-scripts/challenge.test.ts | 16 +- .../integration-scripts/credentials.test.ts | 80 +++++++--- .../delegation-multisig.test.ts | 30 ++-- .../integration-scripts/delegation.test.ts | 16 +- .../externalModule.test.ts | 5 +- .../multisig-holder.test.ts | 54 ++++--- examples/integration-scripts/multisig.test.ts | 56 ++++--- examples/integration-scripts/randy.test.ts | 4 +- examples/integration-scripts/salty.test.ts | 8 +- .../integration-scripts/singlesig-dip.test.ts | 5 +- .../integration-scripts/singlesig-drt.test.ts | 5 +- .../integration-scripts/singlesig-ixn.test.ts | 5 +- .../integration-scripts/singlesig-rot.test.ts | 5 +- .../singlesig-vlei-issuance.test.ts | 14 +- .../test-setup-clients.test.ts | 4 + .../test-setup-single-client.test.ts | 4 + .../integration-scripts/utils/test-util.ts | 143 ++++++++++++++++-- src/keri/app/aiding.ts | 2 +- src/keri/app/coring.ts | 37 ++++- src/keri/app/notifying.ts | 5 +- test/app/coring.test.ts | 17 ++- 21 files changed, 404 insertions(+), 111 deletions(-) diff --git a/examples/integration-scripts/challenge.test.ts b/examples/integration-scripts/challenge.test.ts index 12aa4a56..94c57f5e 100644 --- a/examples/integration-scripts/challenge.test.ts +++ b/examples/integration-scripts/challenge.test.ts @@ -1,7 +1,11 @@ import { strict as assert } from 'assert'; import signify, { Serder } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -import { resolveOobi, waitOperation } from './utils/test-util'; +import { + assertOperations, + resolveOobi, + waitOperation, +} from './utils/test-util'; const { url, bootUrl } = resolveEnvironment(); @@ -59,9 +63,10 @@ test('challenge', async () => { client1, await icpResult1.op() ); - await client1 + let rpyResult1 = await client1 .identifiers() .addEndRole('alice', 'agent', client1!.agent!.pre); + await waitOperation(client1, await rpyResult1.op()); console.log("Alice's AID:", aid1.i); const icpResult2 = await client2.identifiers().create('bob', { @@ -76,7 +81,10 @@ test('challenge', async () => { client2, await icpResult2.op() ); - await client2.identifiers().addEndRole('bob', 'agent', client2!.agent!.pre); + let rpyResult2 = await client2 + .identifiers() + .addEndRole('bob', 'agent', client2!.agent!.pre); + await waitOperation(client2, await rpyResult2.op()); // Exchenge OOBIs const oobi1 = await client1.oobis().get('alice', 'agent'); @@ -121,4 +129,6 @@ test('challenge', async () => { (contact: { alias: string }) => contact.alias === 'bob' ); expect(bobContact.challenges[0].authenticated).toEqual(true); + + await assertOperations(client1, client2); }, 30000); diff --git a/examples/integration-scripts/credentials.test.ts b/examples/integration-scripts/credentials.test.ts index 38e82f71..220fa276 100644 --- a/examples/integration-scripts/credentials.test.ts +++ b/examples/integration-scripts/credentials.test.ts @@ -2,6 +2,9 @@ import { strict as assert } from 'assert'; import { Saider, Serder, SignifyClient } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; import { + assertNotifications, + assertOperations, + markAndRemoveNotification, resolveOobi, waitForNotifications, waitOperation, @@ -75,6 +78,21 @@ beforeAll(async () => { ]); }); +afterAll(async () => { + await assertOperations( + issuerClient, + holderClient, + verifierClient, + legalEntityClient + ); + await assertNotifications( + issuerClient, + holderClient, + verifierClient, + legalEntityClient + ); +}); + test('single signature credentials', async () => { await step('Resolve schema oobis', async () => { await Promise.all([ @@ -211,11 +229,12 @@ test('single signature credentials', async () => { datetime: dt, }); - await issuerClient + let op = await issuerClient .ipex() .submitGrant(issuerAid.name, grant, gsigs, gend, [ holderAid.prefix, ]); + await waitOperation(issuerClient, op); }); await step('holder IPEX admit', async () => { @@ -233,11 +252,20 @@ test('single signature credentials', async () => { grantNotification.a.d!, createTimestamp() ); - await holderClient + let op = await holderClient .ipex() .submitAdmit(holderAid.name, admit, sigs, aend, [issuerAid.prefix]); + await waitOperation(holderClient, op); - await holderClient.notifications().mark(grantNotification.i); + await markAndRemoveNotification(holderClient, grantNotification); + }); + + await step('issuer IPEX grant response', async () => { + const issuerNotifications = await waitForNotifications( + issuerClient, + '/exn/ipex/admit' + ); + await markAndRemoveNotification(issuerClient, issuerNotifications[0]); }); await step('holder has credential', async () => { @@ -270,16 +298,13 @@ test('single signature credentials', async () => { issAttachment: holderCredential.issAtc, datetime: createTimestamp(), }); - await holderClient - .exchanges() - .sendFromEvents( - holderAid.name, - 'presentation', - grant2, - gsigs2, - gend2, - [verifierAid.prefix] - ); + + let op = await holderClient + .ipex() + .submitGrant(holderAid.name, grant2, gsigs2, gend2, [ + verifierAid.prefix, + ]); + await waitOperation(holderClient, op); }); await step('verifier receives IPEX grant', async () => { @@ -299,13 +324,14 @@ test('single signature credentials', async () => { createTimestamp() ); - await verifierClient + let op = await verifierClient .ipex() .submitAdmit(verifierAid.name, admit3, sigs3, aend3, [ holderAid.prefix, ]); + await waitOperation(verifierClient, op); - await verifierClient.notifications().mark(verifierGrantNote.i); + await markAndRemoveNotification(verifierClient, verifierGrantNote); const verifierCredential = await retry(async () => verifierClient.credentials().get(qviCredentialId) @@ -316,6 +342,14 @@ test('single signature credentials', async () => { assert.equal(verifierCredential.status.s, '0'); // 0 = issued }); + await step('holder IPEX present response', async () => { + const holderNotifications = await waitForNotifications( + holderClient, + '/exn/ipex/admit' + ); + await markAndRemoveNotification(holderClient, holderNotifications[0]); + }); + const holderRegistry: { regk: string } = await step( 'holder create registry for LE credential', async () => { @@ -388,11 +422,12 @@ test('single signature credentials', async () => { datetime: dt, }); - await holderClient + let op = await holderClient .ipex() .submitGrant(holderAid.name, grant, gsigs, gend, [ legalEntityAid.prefix, ]); + await waitOperation(holderClient, op); }); await step('Legal Entity IPEX admit', async () => { @@ -411,13 +446,22 @@ test('single signature credentials', async () => { createTimestamp() ); - await legalEntityClient + let op = await legalEntityClient .ipex() .submitAdmit(legalEntityAid.name, admit, sigs, aend, [ holderAid.prefix, ]); + await waitOperation(legalEntityClient, op); - await legalEntityClient.notifications().mark(grantNotification.i); + await markAndRemoveNotification(legalEntityClient, grantNotification); + }); + + await step('LE credential IPEX grant response', async () => { + const notifications = await waitForNotifications( + holderClient, + '/exn/ipex/admit' + ); + await markAndRemoveNotification(holderClient, notifications[0]); }); await step('Legal Entity has chained credential', async () => { diff --git a/examples/integration-scripts/delegation-multisig.test.ts b/examples/integration-scripts/delegation-multisig.test.ts index 6285227a..9b8b7ff9 100644 --- a/examples/integration-scripts/delegation-multisig.test.ts +++ b/examples/integration-scripts/delegation-multisig.test.ts @@ -1,11 +1,14 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { + assertOperations, + markAndRemoveNotification, resolveOobi, waitForNotifications, waitOperation, + warnNotifications, } from './utils/test-util'; -import { getOrCreateClient } from './utils/test-setup'; +import { getOrCreateClient, getOrCreateIdentifier } from './utils/test-setup'; test('delegation-multisig', async () => { await signify.ready(); @@ -85,14 +88,16 @@ test('delegation-multisig', async () => { // Second member check notifications and join the multisig const notifications = await waitForNotifications(client2, '/multisig/icp'); - await Promise.all( - notifications.map((note) => client2.notifications().mark(note.i)) - ); const msgSaid = notifications[notifications.length - 1].a.d; assert(msgSaid !== undefined); console.log('Member2 received exchange message to join multisig'); const res = await client2.groups().getRequest(msgSaid); + + await Promise.all( + notifications.map((note) => markAndRemoveNotification(client2, note)) + ); + const exn = res[0].exn; const icp = exn.e.icp; @@ -145,7 +150,8 @@ test('delegation-multisig', async () => { s: '0', d: delegatePrefix, }; - await client0.identifiers().interact('delegator', anchor); + let ixnResult = await client0.identifiers().interact('delegator', anchor); + await waitOperation(client0, await ixnResult.op()); console.log('Delegator approved delegation'); let op3 = await client1.keyStates().query(aid0.prefix, '1'); @@ -162,20 +168,14 @@ test('delegation-multisig', async () => { const aid_delegate = await client1.identifiers().get('multisig'); assert.equal(aid_delegate.prefix, delegatePrefix); + + await assertOperations(client0, client1, client2); + await warnNotifications(client0, client1, client2); }, 30000); async function createAID(client: signify.SignifyClient, name: string) { - const icpResult1 = await client.identifiers().create(name, { - toad: 3, - wits: [ - 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', - 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', - 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', - ], - }); - await waitOperation(client, await icpResult1.op()); + await getOrCreateIdentifier(client, name); const aid = await client.identifiers().get(name); - await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); console.log(name, 'AID:', aid.prefix); return aid; } diff --git a/examples/integration-scripts/delegation.test.ts b/examples/integration-scripts/delegation.test.ts index c1fff692..d07b59f5 100644 --- a/examples/integration-scripts/delegation.test.ts +++ b/examples/integration-scripts/delegation.test.ts @@ -1,7 +1,11 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -import { resolveOobi, waitOperation } from './utils/test-util'; +import { + assertOperations, + resolveOobi, + waitOperation, +} from './utils/test-util'; const { url, bootUrl } = resolveEnvironment(); @@ -52,9 +56,10 @@ test('delegation', async () => { }); await waitOperation(client1, await icpResult1.op()); const aid1 = await client1.identifiers().get('delegator'); - await client1 + const rpyResult1 = await client1 .identifiers() .addEndRole('delegator', 'agent', client1!.agent!.pre); + await waitOperation(client1, await rpyResult1.op()); console.log("Delegator's AID:", aid1.prefix); // Client 2 resolves delegator OOBI @@ -78,7 +83,10 @@ test('delegation', async () => { s: '0', d: delegatePrefix, }; - await client1.identifiers().interact('delegator', anchor); + const ixnResult1 = await client1 + .identifiers() + .interact('delegator', anchor); + await waitOperation(client1, await ixnResult1.op()); console.log('Delegator approved delegation'); let op3 = await client2.keyStates().query(aid1.prefix, '1'); @@ -89,4 +97,6 @@ test('delegation', async () => { const aid2 = await client2.identifiers().get('delegate'); assert.equal(aid2.prefix, delegatePrefix); console.log('Delegation approved for aid:', aid2.prefix); + + await assertOperations(client1, client2); }, 60000); diff --git a/examples/integration-scripts/externalModule.test.ts b/examples/integration-scripts/externalModule.test.ts index 8729ec02..2f95c3a3 100644 --- a/examples/integration-scripts/externalModule.test.ts +++ b/examples/integration-scripts/externalModule.test.ts @@ -2,6 +2,7 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { BIP39Shim } from './modules/bip39_shim'; import { resolveEnvironment } from './utils/resolve-env'; +import { assertOperations, waitOperation } from './utils/test-util'; const { url, bootUrl } = resolveEnvironment(); @@ -35,6 +36,8 @@ test('bip39_shim', async () => { extern_type: 'bip39_shim', extern: { mnemonics: words }, }); - const op = await icpResult.op(); + const op = await waitOperation(client1, await icpResult.op()); assert.equal(op['done'], true); + + await assertOperations(client1); }, 30000); diff --git a/examples/integration-scripts/multisig-holder.test.ts b/examples/integration-scripts/multisig-holder.test.ts index ccc76871..6b2ed129 100644 --- a/examples/integration-scripts/multisig-holder.test.ts +++ b/examples/integration-scripts/multisig-holder.test.ts @@ -1,8 +1,18 @@ import { strict as assert } from 'assert'; -import signify, { SignifyClient, IssueCredentialArgs } from 'signify-ts'; +import signify, { + SignifyClient, + IssueCredentialArgs, + Operation, +} from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -import { waitForNotifications, waitOperation } from './utils/test-util'; -import { getOrCreateClient } from './utils/test-setup'; +import { + assertOperations, + markNotification, + waitForNotifications, + waitOperation, + warnNotifications, +} from './utils/test-util'; +import { getOrCreateClient, getOrCreateIdentifier } from './utils/test-setup'; const { vleiServerUrl } = resolveEnvironment(); const WITNESS_AIDS = [ @@ -285,8 +295,8 @@ test('multisig', async function run() { `Member2 authorized agent role to ${eid1}, waiting for others to authorize...` ); // Check for completion - op1 = await waitOperation(client1, op1); - op2 = await waitOperation(client2, op2); + await waitOperation(client1, op1); + await waitOperation(client2, op2); console.log(`End role authorization for agent ${eid1} completed!`); console.log(`Starting multisig end role authorization for agent ${eid2}`); @@ -387,8 +397,8 @@ test('multisig', async function run() { `Member2 authorized agent role to ${eid2}, waiting for others to authorize...` ); // Check for completion - op1 = await waitOperation(client1, op1); - op2 = await waitOperation(client2, op2); + await waitOperation(client1, op1); + await waitOperation(client2, op2); console.log(`End role authorization for agent ${eid2} completed!`); // Holder resolve multisig OOBI @@ -396,7 +406,7 @@ test('multisig', async function run() { let oobiMultisig = oobisRes.oobis[0].split('/agent/')[0]; op3 = await client3.oobis().resolve(oobiMultisig, 'holder'); - op3 = await waitOperation(client3, op3); + await waitOperation(client3, op3); console.log(`Issuer resolved multisig holder OOBI`); let holderAid = await client1.identifiers().get('holder'); @@ -426,7 +436,7 @@ test('multisig', async function run() { let exnRes = await client1.exchanges().get(grantMsgSaid); recp = [aid2['state']].map((state) => state['i']); - await multisigAdmitCredential( + op1 = await multisigAdmitCredential( client1, 'holder', 'member1', @@ -452,7 +462,7 @@ test('multisig', async function run() { console.log(`Member2 /exn/ipex/grant msg : ` + JSON.stringify(exnRes2)); let recp2 = [aid1['state']].map((state) => state['i']); - await multisigAdmitCredential( + op2 = await multisigAdmitCredential( client2, 'holder', 'member2', @@ -464,6 +474,9 @@ test('multisig', async function run() { `Member2 admitted credential with SAID : ${exnRes.exn.e.acdc.d}` ); + await waitOperation(client1, op1); + await waitOperation(client2, op2); + let creds1 = await client1.credentials().list(); console.log(`Member1 has ${creds1.length} credential`); @@ -482,6 +495,9 @@ test('multisig', async function run() { `Member1 has ${creds1.length} credential : ` + JSON.stringify(creds1) ); assert.equal(creds1.length, 1); + + await assertOperations(client1, client2, client3); + await warnNotifications(client1, client2, client3); }, 360000); async function waitAndMarkNotification(client: SignifyClient, route: string) { @@ -489,7 +505,7 @@ async function waitAndMarkNotification(client: SignifyClient, route: string) { await Promise.all( notes.map(async (note) => { - await client.notifications().mark(note.i); + await markNotification(client, note); }) ); @@ -497,13 +513,8 @@ async function waitAndMarkNotification(client: SignifyClient, route: string) { } async function createAID(client: SignifyClient, name: string, wits: string[]) { - const icpResult1 = await client.identifiers().create(name, { - toad: wits.length, - wits: wits, - }); - await waitOperation(client, await icpResult1.op()); + await getOrCreateIdentifier(client, name); const aid = await client.identifiers().get(name); - await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); console.log(name, 'AID:', aid.prefix); return aid; } @@ -549,9 +560,10 @@ async function issueCredential( iss: result.iss, }); - await client + let op = await client .ipex() .submitGrant(args.issuerName, grant, gsigs, end, [args.recipient]); + op = await waitOperation(client, op); } console.log('Grant message sent'); @@ -571,7 +583,7 @@ async function multisigAdmitCredential( grantSaid: string, issuerPrefix: string, recipients: string[] -) { +): Promise { let mHab = await client.identifiers().get(memberAlias); let gHab = await client.identifiers().get(groupName); @@ -579,7 +591,7 @@ async function multisigAdmitCredential( .ipex() .admit(groupName, '', grantSaid, TIME); - await client + let op = await client .ipex() .submitAdmit(groupName, admit, sigs, end, [issuerPrefix]); @@ -607,4 +619,6 @@ async function multisigAdmitCredential( gembeds, recipients ); + + return op; } diff --git a/examples/integration-scripts/multisig.test.ts b/examples/integration-scripts/multisig.test.ts index 0492c9ca..7eb75625 100644 --- a/examples/integration-scripts/multisig.test.ts +++ b/examples/integration-scripts/multisig.test.ts @@ -5,8 +5,14 @@ import signify, { IssueCredentialResult, } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -import { waitForNotifications, waitOperation } from './utils/test-util'; -import { getOrCreateClient } from './utils/test-setup'; +import { + assertOperations, + markNotification, + waitForNotifications, + waitOperation, + warnNotifications, +} from './utils/test-util'; +import { getOrCreateClient, getOrCreateIdentifier } from './utils/test-setup'; const { vleiServerUrl } = resolveEnvironment(); const WITNESS_AIDS = [ @@ -963,9 +969,9 @@ test('multisig', async function run() { datetime: stamp, }); - await client1 - .exchanges() - .sendFromEvents('multisig', 'credential', grant, gsigs, end, [holder]); + op1 = await client1 + .ipex() + .submitGrant('multisig', grant, gsigs, end, [holder]); mstate = m['state']; seal = [ @@ -1011,11 +1017,9 @@ test('multisig', async function run() { datetime: stamp, }); - await client2 - .exchanges() - .sendFromEvents('multisig', 'credential', grant2, gsigs2, end2, [ - holder, - ]); + op2 = await client2 + .ipex() + .submitGrant('multisig', grant2, gsigs2, end2, [holder]); sigers = gsigs2.map((sig) => new signify.Siger({ qb64: sig })); @@ -1055,11 +1059,9 @@ test('multisig', async function run() { datetime: stamp, }); - await client3 - .exchanges() - .sendFromEvents('multisig', 'credential', grant3, gsigs3, end3, [ - holder, - ]); + op3 = await client3 + .ipex() + .submitGrant('multisig', grant3, gsigs3, end3, [holder]); sigers = gsigs3.map((sig) => new signify.Siger({ qb64: sig })); @@ -1093,16 +1095,26 @@ test('multisig', async function run() { .ipex() .admit('holder', '', res.exn.d); - res = await client4 + op4 = await client4 .ipex() .submitAdmit('holder', admit, asigs, aend, [m['prefix']]); + await Promise.all([ + waitOperation(client1, op1), + waitOperation(client2, op2), + waitOperation(client3, op3), + waitOperation(client4, op4), + ]); + console.log('Holder creates and sends admit message'); msgSaid = await waitAndMarkNotification(client1, '/exn/ipex/admit'); console.log('Member1 received exchange message with the admit response'); const creds = await client4.credentials().list(); console.log(`Holder holds ${creds.length} credential`); + + await assertOperations(client1, client2, client3, client4); + await warnNotifications(client1, client2, client3, client4); }, 360000); async function waitAndMarkNotification(client: SignifyClient, route: string) { @@ -1110,7 +1122,7 @@ async function waitAndMarkNotification(client: SignifyClient, route: string) { await Promise.all( notes.map(async (note) => { - await client.notifications().mark(note.i); + await markNotification(client, note); }) ); @@ -1118,15 +1130,11 @@ async function waitAndMarkNotification(client: SignifyClient, route: string) { } async function createAID(client: SignifyClient, name: string, wits: string[]) { - const icpResult1 = await client.identifiers().create(name, { - toad: wits.length, + await getOrCreateIdentifier(client, name, { wits: wits, + toad: wits.length, }); - await waitOperation(client, await icpResult1.op()); - const aid = await client.identifiers().get(name); - await client.identifiers().addEndRole(name, 'agent', client!.agent!.pre); - console.log(name, 'AID:', aid.prefix); - return aid; + return await client.identifiers().get(name); } async function multisigIssue( diff --git a/examples/integration-scripts/randy.test.ts b/examples/integration-scripts/randy.test.ts index 3c6ef978..cb0434e2 100644 --- a/examples/integration-scripts/randy.test.ts +++ b/examples/integration-scripts/randy.test.ts @@ -1,7 +1,7 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -import { waitOperation } from './utils/test-util'; +import { assertOperations, waitOperation } from './utils/test-util'; const { url, bootUrl } = resolveEnvironment(); @@ -68,4 +68,6 @@ test('randy', async () => { assert.equal(dig.qb64, icp.digers[0].qb64); log = await events.get(aid['prefix']); assert.equal(log.length, 3); + + await assertOperations(client1); }, 30000); diff --git a/examples/integration-scripts/salty.test.ts b/examples/integration-scripts/salty.test.ts index 6a84f044..95b88d19 100644 --- a/examples/integration-scripts/salty.test.ts +++ b/examples/integration-scripts/salty.test.ts @@ -1,7 +1,7 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; -import { waitOperation } from './utils/test-util'; +import { assertOperations, waitOperation } from './utils/test-util'; const { url, bootUrl } = resolveEnvironment(); @@ -102,7 +102,8 @@ test('salty', async () => { assert.equal(salt.stem, 'signify:aid'); assert.equal(aid.prefix, icp2.pre); - await client1.identifiers().create('aid3'); + icpResult = await client1.identifiers().create('aid3'); + await waitOperation(client1, await icpResult.op()); aids = await client1.identifiers().list(); assert.equal(aids.aids.length, 3); aid = aids.aids[0]; @@ -164,5 +165,8 @@ test('salty', async () => { serder = new signify.Serder(log[2]); assert.equal(serder.pre, ixn.pre); assert.equal(serder.ked['d'], ixn.ked['d']); + + await assertOperations(client1); + console.log('Salty test passed'); }, 30000); diff --git a/examples/integration-scripts/singlesig-dip.test.ts b/examples/integration-scripts/singlesig-dip.test.ts index 857f1e99..dc154fc9 100644 --- a/examples/integration-scripts/singlesig-dip.test.ts +++ b/examples/integration-scripts/singlesig-dip.test.ts @@ -4,7 +4,7 @@ import { getOrCreateContact, getOrCreateIdentifier, } from './utils/test-setup'; -import { waitOperation } from './utils/test-util'; +import { assertOperations, waitOperation } from './utils/test-util'; import { resolveEnvironment } from './utils/resolve-env'; let client1: SignifyClient, client2: SignifyClient; @@ -20,6 +20,9 @@ beforeAll(async () => { beforeAll(async () => { contact1_id = await getOrCreateContact(client2, 'contact1', name1_oobi); }); +afterAll(async () => { + await assertOperations(client1, client2); +}); describe('singlesig-dip', () => { test('delegate1a', async () => { diff --git a/examples/integration-scripts/singlesig-drt.test.ts b/examples/integration-scripts/singlesig-drt.test.ts index 4253c752..c30e5e29 100644 --- a/examples/integration-scripts/singlesig-drt.test.ts +++ b/examples/integration-scripts/singlesig-drt.test.ts @@ -4,7 +4,7 @@ import { getOrCreateContact, getOrCreateIdentifier, } from './utils/test-setup'; -import { waitOperation } from './utils/test-util'; +import { assertOperations, waitOperation } from './utils/test-util'; let delegator: SignifyClient, delegate: SignifyClient; let name1_id: string, name1_oobi: string; @@ -19,6 +19,9 @@ beforeAll(async () => { beforeAll(async () => { contact1_id = await getOrCreateContact(delegate, 'contact1', name1_oobi); }); +afterAll(async () => { + await assertOperations(delegator, delegate); +}); describe('singlesig-drt', () => { test('delegate1a', async () => { diff --git a/examples/integration-scripts/singlesig-ixn.test.ts b/examples/integration-scripts/singlesig-ixn.test.ts index b65bbcd1..73fe67e1 100644 --- a/examples/integration-scripts/singlesig-ixn.test.ts +++ b/examples/integration-scripts/singlesig-ixn.test.ts @@ -4,7 +4,7 @@ import { getOrCreateContact, getOrCreateIdentifier, } from './utils/test-setup'; -import { waitOperation } from './utils/test-util'; +import { assertOperations, waitOperation } from './utils/test-util'; let client1: SignifyClient, client2: SignifyClient; let name1_id: string, name1_oobi: string; @@ -19,6 +19,9 @@ beforeAll(async () => { beforeAll(async () => { contact1_id = await getOrCreateContact(client2, 'contact1', name1_oobi); }); +afterAll(async () => { + await assertOperations(client1, client2); +}); interface KeyState { i: string; diff --git a/examples/integration-scripts/singlesig-rot.test.ts b/examples/integration-scripts/singlesig-rot.test.ts index f40c7dd0..89a3bf40 100644 --- a/examples/integration-scripts/singlesig-rot.test.ts +++ b/examples/integration-scripts/singlesig-rot.test.ts @@ -4,7 +4,7 @@ import { getOrCreateContact, getOrCreateIdentifier, } from './utils/test-setup'; -import { waitOperation } from './utils/test-util'; +import { assertOperations, waitOperation } from './utils/test-util'; let client1: SignifyClient, client2: SignifyClient; let name1_id: string, name1_oobi: string; @@ -19,6 +19,9 @@ beforeAll(async () => { beforeAll(async () => { contact1_id = await getOrCreateContact(client2, 'contact1', name1_oobi); }); +afterAll(async () => { + await assertOperations(client1, client2); +}); interface KeyState { i: string; diff --git a/examples/integration-scripts/singlesig-vlei-issuance.test.ts b/examples/integration-scripts/singlesig-vlei-issuance.test.ts index 7347a083..7eee0d1b 100644 --- a/examples/integration-scripts/singlesig-vlei-issuance.test.ts +++ b/examples/integration-scripts/singlesig-vlei-issuance.test.ts @@ -2,9 +2,12 @@ import { strict as assert } from 'assert'; import { Saider, Serder, SignifyClient } from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env'; import { + assertOperations, + markAndRemoveNotification, resolveOobi, waitForNotifications, waitOperation, + warnNotifications, } from './utils/test-util'; import { retry } from './utils/retry'; import { @@ -456,6 +459,9 @@ test('singlesig-vlei-issuance', async function run() { assert.equal(oorCredHolder.sad.e.auth.n, oorAuthCred.sad.d); assert.equal(oorCredHolder.status.s, '0'); assert(oorCredHolder.atc !== undefined); + + await assertOperations(gleifClient, qviClient, leClient, roleClient); + await warnNotifications(gleifClient, qviClient, leClient, roleClient); }, 360000); async function getOrCreateRegistry( @@ -551,9 +557,10 @@ async function sendGrantMessage( datetime: createTimestamp(), }); - await senderClient + let op = await senderClient .ipex() .submitGrant(senderAid.name, grant, gsigs, gend, [recipientAid.prefix]); + op = await waitOperation(senderClient, op); } async function sendAdmitMessage( @@ -572,9 +579,10 @@ async function sendAdmitMessage( .ipex() .admit(senderAid.name, '', grantNotification.a.d!, createTimestamp()); - await senderClient + let op = await senderClient .ipex() .submitAdmit(senderAid.name, admit, sigs, aend, [recipientAid.prefix]); + op = await waitOperation(senderClient, op); - await senderClient.notifications().mark(grantNotification.i); + await markAndRemoveNotification(senderClient, grantNotification); } diff --git a/examples/integration-scripts/test-setup-clients.test.ts b/examples/integration-scripts/test-setup-clients.test.ts index 906f8528..dd06adc1 100644 --- a/examples/integration-scripts/test-setup-clients.test.ts +++ b/examples/integration-scripts/test-setup-clients.test.ts @@ -4,6 +4,7 @@ import { getOrCreateContact, getOrCreateIdentifier, } from './utils/test-setup'; +import { assertOperations } from './utils/test-util'; let client1: SignifyClient, client2: SignifyClient; let name1_id: string, name1_oobi: string; @@ -22,6 +23,9 @@ beforeAll(async () => { contact1_id = await getOrCreateContact(client2, 'contact1', name1_oobi); contact2_id = await getOrCreateContact(client1, 'contact2', name2_oobi); }); +afterAll(async () => { + await assertOperations(client1, client2); +}); describe('test-setup-clients', () => { test('step1', async () => { diff --git a/examples/integration-scripts/test-setup-single-client.test.ts b/examples/integration-scripts/test-setup-single-client.test.ts index f01957e8..ecbf4e81 100644 --- a/examples/integration-scripts/test-setup-single-client.test.ts +++ b/examples/integration-scripts/test-setup-single-client.test.ts @@ -1,6 +1,7 @@ import { SignifyClient } from 'signify-ts'; import { getOrCreateClients, getOrCreateIdentifier } from './utils/test-setup'; import { resolveEnvironment } from './utils/resolve-env'; +import { assertOperations, waitOperation } from './utils/test-util'; let client: SignifyClient; let name1_id: string, name1_oobi: string; @@ -12,6 +13,9 @@ beforeAll(async () => { beforeAll(async () => { [name1_id, name1_oobi] = await getOrCreateIdentifier(client, 'name1'); }); +afterAll(async () => { + await assertOperations(client); +}); describe('test-setup-single-client', () => { test('step1', async () => { diff --git a/examples/integration-scripts/utils/test-util.ts b/examples/integration-scripts/utils/test-util.ts index 6ebecdee..4a08262b 100644 --- a/examples/integration-scripts/utils/test-util.ts +++ b/examples/integration-scripts/utils/test-util.ts @@ -8,23 +8,122 @@ export function sleep(ms: number): Promise { } /** - * Poll for operation to become completed + * Assert that all operations were waited for. + *

This is a postcondition check to make sure all long-running operations have been waited for + * @see waitOperation + */ +export async function assertOperations( + ...clients: SignifyClient[] +): Promise { + for (let client of clients) { + let operations = await client.operations().list(); + expect(operations).toHaveLength(0); + } +} + +/** + * Assert that all notifications were handled. + *

This is a postcondition check to make sure all notifications have been handled + * @see markNotification + * @see markAndRemoveNotification + */ +export async function assertNotifications( + ...clients: SignifyClient[] +): Promise { + for (let client of clients) { + let res = await client.notifications().list(); + let notes = res.notes.filter((i: any) => i.r === false); + expect(notes).toHaveLength(0); + } +} + +/** + * Logs a warning for each un-handled notification. + *

Replace warnNotifications with assertNotifications when test handles all notifications + * @see assertNotifications + */ +export async function warnNotifications( + ...clients: SignifyClient[] +): Promise { + let count = 0; + for (let client of clients) { + let res = await client.notifications().list(); + let notes = res.notes.filter((i: any) => i.r === false); + if (notes.length > 0) { + count += notes.length; + console.warn('notifications', notes); + } + } + expect(count).toBeGreaterThan(0); // replace warnNotifications with assertNotifications +} + +/** + * Get status of operation. + * If parameter recurse is set then also checks status of dependent operations. + */ +async function getOperation( + client: SignifyClient, + name: string, + recurse?: boolean +): Promise> { + const result = await client.operations().get(name); + if (recurse === true) { + let i: Operation | undefined = result; + while (result.done && i?.metadata?.depends !== undefined) { + let depends: Operation = await client + .operations() + .get(i.metadata.depends.name); + result.done = result.done && depends.done; + i.metadata.depends = depends; + i = depends.metadata?.depends; + } + } + return result; +} + +/** + * Poll for operation to become completed. + * Removes completed operation */ export async function waitOperation( client: SignifyClient, - op: Operation, + op: Operation | string, options: RetryOptions = {} ): Promise> { - return retry(async () => { - op = await client.operations().get(op.name); - - if (op.done !== true) { - throw new Error(`Operation ${op.name} not done`); + const ctrl = new AbortController(); + options.signal?.addEventListener('abort', (e: Event) => { + const s = e.target as AbortSignal; + ctrl.abort(s.reason); + }); + let name: string; + if (typeof op === 'string') { + name = op; + } else if (typeof op === 'object' && 'name' in op) { + name = op.name; + } else { + throw new Error(); + } + const result: Operation = await retry(async () => { + let t: Operation; + try { + t = await getOperation(client, name, true); + } catch (e) { + ctrl.abort(e); + throw e; } - - console.log('DONE', op.name); - return op; + if (t.done !== true) { + throw new Error(`Operation ${name} not done`); + } + console.log('DONE', name); + return t; }, options); + let i: Operation | undefined = result; + while (i !== undefined) { + // console.log('DELETE', i.name); + await client.operations().delete(i.name); + i = i.metadata?.depends; + } + return result; } export async function resolveOobi( @@ -64,3 +163,27 @@ export async function waitForNotifications( return notes; }, options); } + +/** + * Mark notification as read. + */ +export async function markNotification( + client: SignifyClient, + note: Notification +): Promise { + await client.notifications().mark(note.i); +} + +/** + * Mark and remove notification. + */ +export async function markAndRemoveNotification( + client: SignifyClient, + note: Notification +): Promise { + try { + await client.notifications().mark(note.i); + } finally { + await client.notifications().delete(note.i); + } +} diff --git a/src/keri/app/aiding.ts b/src/keri/app/aiding.ts index 360004a7..9ce09417 100644 --- a/src/keri/app/aiding.ts +++ b/src/keri/app/aiding.ts @@ -400,7 +400,7 @@ export class Identifier { role: string, eid?: string, stamp?: string - ): Promise { + ): Promise { const hab = await this.get(name); const pre = hab.prefix; diff --git a/src/keri/app/coring.ts b/src/keri/app/coring.ts index 3cfce93e..a1d6af5b 100644 --- a/src/keri/app/coring.ts +++ b/src/keri/app/coring.ts @@ -61,9 +61,14 @@ export class Oobis { } export interface Operation { - done: boolean; name: string; - response: T; + metadata?: { + depends?: Operation; + [property: string]: any; + }; + done?: boolean; + error?: any; + response?: T; } /** @@ -94,6 +99,34 @@ export class Operations { const res = await this.client.fetch(path, method, data); return await res.json(); } + /** + * List operations + * @async + * @param {string} type Select operations by type + * @returns {Promise} A list of operations + */ + async list(type?: string): Promise[]> { + const params = new URLSearchParams(); + if (type !== undefined) { + params.append('type', type); + } + const path = `/operations?${params.toString()}`; + const data = null; + const method = 'GET'; + const res = await this.client.fetch(path, method, data); + return await res.json(); + } + /** + * Delete operation + * @async + * @param {string} name Name of the operation + */ + async delete(name: string): Promise { + const path = `/operations/${name}`; + const data = null; + const method = 'DELETE'; + await this.client.fetch(path, method, data); + } } /** diff --git a/src/keri/app/notifying.ts b/src/keri/app/notifying.ts index 5b631f96..17de435b 100644 --- a/src/keri/app/notifying.ts +++ b/src/keri/app/notifying.ts @@ -61,10 +61,9 @@ export class Notifications { * @param {string} said SAID of the notification * @returns {Promise} A promise to the result of the deletion */ - async delete(said: string): Promise { + async delete(said: string): Promise { const path = `/notifications/` + said; const method = 'DELETE'; - const res = await this.client.fetch(path, method, null); - return await res.json(); + await this.client.fetch(path, method, null); } } diff --git a/test/app/coring.test.ts b/test/app/coring.test.ts index ea68a0d7..15066d31 100644 --- a/test/app/coring.test.ts +++ b/test/app/coring.test.ts @@ -214,9 +214,24 @@ describe('Coring', () => { const ops = client.operations(); await ops.get('operationName'); - const lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + let lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; assert.equal(lastCall[0]!, url + '/operations/operationName'); assert.equal(lastCall[1]!.method, 'GET'); + + await ops.list(); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/operations?'); + assert.equal(lastCall[1]!.method, 'GET'); + + await ops.list('witness'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/operations?type=witness'); + assert.equal(lastCall[1]!.method, 'GET'); + + await ops.delete('operationName'); + lastCall = fetchMock.mock.calls[fetchMock.mock.calls.length - 1]!; + assert.equal(lastCall[0]!, url + '/operations/operationName'); + assert.equal(lastCall[1]!.method, 'DELETE'); }); it('Events and states', async () => { From a0808b2a9bcde725682d790167b4322705490bc5 Mon Sep 17 00:00:00 2001 From: lenkan Date: Thu, 8 Feb 2024 20:40:14 +0100 Subject: [PATCH 184/186] upgrade workflow actions, add node 20 to test matrix --- .github/workflows/main.yml | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b9803a00..aa3026cd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,20 +11,21 @@ on: workflow_dispatch: jobs: build: - name: Build, lint, and test on Node 18.12.1 and ${{ matrix.os }} + name: Build, lint, and test on Node ${{ matrix.node-version }} and ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [macOS-latest, ubuntu-latest] + node-version: ['18', '20'] steps: - name: Checkout repo - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v4 with: - node-version: '18.12.1' + node-version: ${{ matrix.node-version }} cache: 'npm' - name: Install dependencies @@ -55,11 +56,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v4 with: - node-version: '18.12.1' + node-version: '18' cache: 'npm' - name: install deps run: npm ci @@ -78,11 +79,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v4 with: - node-version: '18.12.1' + node-version: '20' cache: 'npm' - name: Run audit run: npm audit From 94fa319b6ce69a828641c6d0d36b1884f25923c6 Mon Sep 17 00:00:00 2001 From: lenkan Date: Fri, 9 Feb 2024 09:03:10 +0100 Subject: [PATCH 185/186] add utility for multisig inception, test for members endpoint --- .../delegation-multisig.test.ts | 108 +++----------- .../multisig-holder.test.ts | 105 +++----------- .../multisig-inception.test.ts | 133 ++++++++++++++++++ .../utils/multisig-utils.ts | 127 +++++++++++++++++ 4 files changed, 304 insertions(+), 169 deletions(-) create mode 100644 examples/integration-scripts/multisig-inception.test.ts create mode 100644 examples/integration-scripts/utils/multisig-utils.ts diff --git a/examples/integration-scripts/delegation-multisig.test.ts b/examples/integration-scripts/delegation-multisig.test.ts index 9b8b7ff9..103aacfa 100644 --- a/examples/integration-scripts/delegation-multisig.test.ts +++ b/examples/integration-scripts/delegation-multisig.test.ts @@ -1,6 +1,7 @@ import { strict as assert } from 'assert'; import signify from 'signify-ts'; import { + assertNotifications, assertOperations, markAndRemoveNotification, resolveOobi, @@ -9,6 +10,10 @@ import { warnNotifications, } from './utils/test-util'; import { getOrCreateClient, getOrCreateIdentifier } from './utils/test-setup'; +import { + acceptMultisigIncept, + startMultisigIncept, +} from './utils/multisig-utils'; test('delegation-multisig', async () => { await signify.ready(); @@ -42,102 +47,33 @@ test('delegation-multisig', async () => { console.log('Member1 and Member2 resolved 2 OOBIs'); // First member start the creation of a multisig identifier - const rstates = [aid1['state'], aid2['state']]; - const states = rstates; - const icpResult1 = await client1.identifiers().create('multisig', { - algo: signify.Algos.group, - mhab: aid1, + const op1 = await startMultisigIncept(client1, { + groupName: 'multisig', + localMemberName: aid1.name, + participants: [aid1.prefix, aid2.prefix], isith: 2, nsith: 2, toad: 2, + delpre: aid0.prefix, wits: [ 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', ], - states: states, - rstates: rstates, - delpre: aid0.prefix, }); - const op1 = await icpResult1.op(); - let serder = icpResult1.serder; - - let sigs = icpResult1.sigs; - let sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); - let ims = signify.d(signify.messagize(serder, sigers)); - let atc = ims.substring(serder.size); - let embeds = { - icp: [serder, atc], - }; - - let smids = states.map((state) => state['i']); - let recp = [aid2['state']].map((state) => state['i']); - - await client1 - .exchanges() - .send( - 'member1', - 'multisig', - aid1, - '/multisig/icp', - { gid: serder.pre, smids: smids, rmids: smids }, - embeds, - recp - ); console.log('Member1 initiated multisig, waiting for others to join...'); // Second member check notifications and join the multisig - const notifications = await waitForNotifications(client2, '/multisig/icp'); - const msgSaid = notifications[notifications.length - 1].a.d; - assert(msgSaid !== undefined); - console.log('Member2 received exchange message to join multisig'); - - const res = await client2.groups().getRequest(msgSaid); - - await Promise.all( - notifications.map((note) => markAndRemoveNotification(client2, note)) - ); - - const exn = res[0].exn; - const icp = exn.e.icp; - - const icpResult2 = await client2.identifiers().create('multisig', { - algo: signify.Algos.group, - mhab: aid2, - isith: icp.kt, - nsith: icp.nt, - toad: parseInt(icp.bt), - wits: icp.b, - states: states, - rstates: rstates, - delpre: aid0.prefix, + const [notification] = await waitForNotifications(client2, '/multisig/icp'); + await markAndRemoveNotification(client2, notification); + assert(notification.a.d); + const op2 = await acceptMultisigIncept(client2, { + localMemberName: aid2.name, + groupName: 'multisig', + msgSaid: notification.a.d, }); - const op2 = await icpResult2.op(); - serder = icpResult2.serder; - sigs = icpResult2.sigs; - sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); - - ims = signify.d(signify.messagize(serder, sigers)); - atc = ims.substring(serder.size); - embeds = { - icp: [serder, atc], - }; - - smids = exn.a.smids; - recp = [aid1['state']].map((state) => state['i']); - await client2 - .exchanges() - .send( - 'member2', - 'multisig', - aid2, - '/multisig/icp', - { gid: serder.pre, smids: smids, rmids: smids }, - embeds, - recp - ); - console.log('Member2 joined multisig, waiting for others...'); + console.log('Member2 joined multisig, waiting for delegator...'); const delegatePrefix = op1.name.split('.')[1]; assert.equal(op2.name.split('.')[1], delegatePrefix); @@ -150,12 +86,12 @@ test('delegation-multisig', async () => { s: '0', d: delegatePrefix, }; - let ixnResult = await client0.identifiers().interact('delegator', anchor); + const ixnResult = await client0.identifiers().interact('delegator', anchor); await waitOperation(client0, await ixnResult.op()); console.log('Delegator approved delegation'); - let op3 = await client1.keyStates().query(aid0.prefix, '1'); - let op4 = await client2.keyStates().query(aid0.prefix, '1'); + const op3 = await client1.keyStates().query(aid0.prefix, '1'); + const op4 = await client2.keyStates().query(aid0.prefix, '1'); // Check for completion await Promise.all([ @@ -170,7 +106,7 @@ test('delegation-multisig', async () => { assert.equal(aid_delegate.prefix, delegatePrefix); await assertOperations(client0, client1, client2); - await warnNotifications(client0, client1, client2); + await assertNotifications(client0, client1, client2); }, 30000); async function createAID(client: signify.SignifyClient, name: string) { diff --git a/examples/integration-scripts/multisig-holder.test.ts b/examples/integration-scripts/multisig-holder.test.ts index 6b2ed129..1af254f9 100644 --- a/examples/integration-scripts/multisig-holder.test.ts +++ b/examples/integration-scripts/multisig-holder.test.ts @@ -13,6 +13,10 @@ import { warnNotifications, } from './utils/test-util'; import { getOrCreateClient, getOrCreateIdentifier } from './utils/test-setup'; +import { + acceptMultisigIncept, + startMultisigIncept, +} from './utils/multisig-utils'; const { vleiServerUrl } = resolveEnvironment(); const WITNESS_AIDS = [ @@ -36,7 +40,7 @@ test('multisig', async function run() { ]); // Create three identifiers, one for each client - let [aid1, aid2, aid3] = await Promise.all([ + let [aid1, aid2, _aid3] = await Promise.all([ createAID(client1, 'member1', WITNESS_AIDS), createAID(client2, 'member2', WITNESS_AIDS), createAID(client3, 'issuer', WITNESS_AIDS), @@ -77,90 +81,25 @@ test('multisig', async function run() { console.log('Issuer resolved 3 OOBIs'); //// First member start the creation of a multisig identifier - const rstates = [aid1['state'], aid2['state']]; - const states = rstates; - const icpResult1 = await client1.identifiers().create('holder', { - algo: signify.Algos.group, - mhab: aid1, + op1 = await startMultisigIncept(client1, { + groupName: 'holder', + localMemberName: aid1.name, isith: 2, nsith: 2, toad: aid1.state.b.length, wits: aid1.state.b, - states: states, - rstates: rstates, + participants: [aid1.prefix, aid2.prefix], }); - op1 = await icpResult1.op(); - let serder = icpResult1.serder; - - let sigs = icpResult1.sigs; - let sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); - - let ims = signify.d(signify.messagize(serder, sigers)); - let atc = ims.substring(serder.size); - let embeds = { - icp: [serder, atc], - }; - - let smids = states.map((state) => state['i']); - let recp = [aid2['state']].map((state) => state['i']); - - await client1 - .exchanges() - .send( - 'member1', - 'multisig', - aid1, - '/multisig/icp', - { gid: serder.pre, smids: smids, rmids: smids }, - embeds, - recp - ); console.log('Member1 initiated multisig, waiting for others to join...'); // Second member check notifications and join the multisig - let msgSaid = await waitAndMarkNotification(client2, '/multisig/icp'); console.log('Member2 received exchange message to join multisig'); - - let res = await client2.groups().getRequest(msgSaid); - let exn = res[0].exn; - let icp = exn.e.icp; - - let icpResult2 = await client2.identifiers().create('holder', { - algo: signify.Algos.group, - mhab: aid2, - isith: icp.kt, - nsith: icp.nt, - toad: parseInt(icp.bt), - wits: icp.b, - states: states, - rstates: rstates, + op2 = await acceptMultisigIncept(client2, { + groupName: 'holder', + localMemberName: aid2.name, + msgSaid, }); - op2 = await icpResult2.op(); - serder = icpResult2.serder; - sigs = icpResult2.sigs; - sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); - - ims = signify.d(signify.messagize(serder, sigers)); - atc = ims.substring(serder.size); - embeds = { - icp: [serder, atc], - }; - - smids = exn.a.smids; - recp = [aid1['state']].map((state) => state['i']); - - await client2 - .exchanges() - .send( - 'member2', - 'multisig', - aid2, - '/multisig/icp', - { gid: serder.pre, smids: smids, rmids: smids }, - embeds, - recp - ); console.log('Member2 joined multisig, waiting for others...'); // Check for completion @@ -208,7 +147,7 @@ test('multisig', async function run() { .addEndRole('holder', 'agent', eid1, stamp); op1 = await endRoleRes.op(); let rpy = endRoleRes.serder; - sigs = endRoleRes.sigs; + let sigs = endRoleRes.sigs; let ghabState1 = ghab1['state']; let seal = [ 'SealEvent', @@ -218,16 +157,16 @@ test('multisig', async function run() { d: ghabState1['ee']['d'], }, ]; - sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); + let sigers = sigs.map((sig: string) => new signify.Siger({ qb64: sig })); let roleims = signify.d( signify.messagize(rpy, sigers, seal, undefined, undefined, false) ); - atc = roleims.substring(rpy.size); + let atc = roleims.substring(rpy.size); let roleembeds = { rpy: [rpy, atc], }; - recp = [aid2['state']].map((state) => state['i']); - res = await client1 + let recp = [aid2['state']].map((state) => state['i']); + let res = await client1 .exchanges() .send( 'member1', @@ -248,7 +187,7 @@ test('multisig', async function run() { 'Member2 received exchange message to join the end role authorization' ); res = await client2.groups().getRequest(msgSaid); - exn = res[0].exn; + let exn = res[0].exn; // stamp, eid and role are provided in the exn message let rpystamp = exn.e.rpy.dt; let rpyrole = exn.e.rpy.a.role; @@ -271,7 +210,7 @@ test('multisig', async function run() { d: ghabState2['ee']['d'], }, ]; - sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig: string) => new signify.Siger({ qb64: sig })); roleims = signify.d( signify.messagize(rpy, sigers, seal, undefined, undefined, false) ); @@ -318,7 +257,7 @@ test('multisig', async function run() { d: ghabState1['ee']['d'], }, ]; - sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig: string) => new signify.Siger({ qb64: sig })); roleims = signify.d( signify.messagize(rpy, sigers, seal, undefined, undefined, false) ); @@ -372,7 +311,7 @@ test('multisig', async function run() { }, ]; - sigers = sigs.map((sig) => new signify.Siger({ qb64: sig })); + sigers = sigs.map((sig: string) => new signify.Siger({ qb64: sig })); roleims = signify.d( signify.messagize(rpy, sigers, seal, undefined, undefined, false) ); diff --git a/examples/integration-scripts/multisig-inception.test.ts b/examples/integration-scripts/multisig-inception.test.ts new file mode 100644 index 00000000..16aa72c9 --- /dev/null +++ b/examples/integration-scripts/multisig-inception.test.ts @@ -0,0 +1,133 @@ +import signify from 'signify-ts'; +import { + resolveOobi, + waitForNotifications, + waitOperation, +} from './utils/test-util'; +import { getOrCreateClient, getOrCreateIdentifier } from './utils/test-setup'; +import { + acceptMultisigIncept, + startMultisigIncept, +} from './utils/multisig-utils'; +import assert from 'assert'; +import { step } from './utils/test-step'; + +test('multisig inception', async () => { + await signify.ready(); + const [client1, client2] = await Promise.all([ + getOrCreateClient(), + getOrCreateClient(), + ]); + + const [[aid1], [aid2]] = await Promise.all([ + getOrCreateIdentifier(client1, 'member1'), + getOrCreateIdentifier(client2, 'member2'), + ]); + + await step('Resolve oobis', async () => { + const oobi1 = await client1.oobis().get('member1', 'agent'); + const oobi2 = await client2.oobis().get('member2', 'agent'); + + await Promise.all([ + resolveOobi(client1, oobi2.oobis[0], 'member2'), + resolveOobi(client2, oobi1.oobis[0], 'member1'), + ]); + }); + + await step('Create multisig group', async () => { + const groupName = 'multisig'; + const op1 = await startMultisigIncept(client1, { + groupName, + localMemberName: 'member1', + participants: [aid1, aid2], + toad: 2, + isith: 2, + nsith: 2, + wits: [ + 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha', + 'BLskRTInXnMxWaGqcpSyMgo0nYbalW99cGZESrz3zapM', + 'BIKKuvBwpmDVA4Ds-EpL5bt9OqPzWPja2LigFYZN2YfX', + ], + }); + console.log( + 'Member1 initiated multisig, waiting for others to join...' + ); + + // Second member check notifications and join the multisig + const notifications = await waitForNotifications( + client2, + '/multisig/icp' + ); + await Promise.all( + notifications.map((note) => client2.notifications().mark(note.i)) + ); + const msgSaid = notifications[notifications.length - 1].a.d; + assert(msgSaid, 'msgSaid not defined'); + const op2 = await acceptMultisigIncept(client2, { + localMemberName: 'member2', + groupName, + msgSaid, + }); + console.log('Member2 joined multisig, waiting for others...'); + + // Check for completion + await Promise.all([ + waitOperation(client1, op1), + waitOperation(client2, op2), + ]); + console.log('Multisig created!'); + + const multisig1 = await client1.identifiers().get(groupName); + const multisig2 = await client2.identifiers().get(groupName); + assert.strictEqual(multisig1.prefix, multisig2.prefix); + const members = await client1.identifiers().members(groupName); + assert.strictEqual(members.signing.length, 2); + assert.strictEqual(members.rotation.length, 2); + assert.strictEqual(members.signing[0].aid, aid1); + assert.strictEqual(members.signing[1].aid, aid2); + assert.strictEqual(members.rotation[0].aid, aid1); + assert.strictEqual(members.rotation[1].aid, aid2); + }); + + await step('Test creating another group', async () => { + const groupName = 'multisig2'; + const op1 = await startMultisigIncept(client1, { + groupName, + localMemberName: 'member1', + participants: [aid1, aid2], + toad: 0, + isith: 2, + nsith: 2, + wits: [], + }); + console.log( + 'Member1 initiated multisig, waiting for others to join...' + ); + + // Second member check notifications and join the multisig + const notifications = await waitForNotifications( + client2, + '/multisig/icp' + ); + await Promise.all( + notifications.map((note) => client2.notifications().mark(note.i)) + ); + const msgSaid = notifications[notifications.length - 1].a.d; + assert(msgSaid, 'msgSaid not defined'); + const op2 = await acceptMultisigIncept(client2, { + localMemberName: 'member2', + groupName, + msgSaid, + }); + + await Promise.all([ + waitOperation(client1, op1), + waitOperation(client2, op2), + ]); + + // TODO: https://github.com/WebOfTrust/keria/issues/189 + // const members = await client1.identifiers().members(groupName); + // assert.strictEqual(members.signing.length, 2); + // assert.strictEqual(members.rotating.length, 2); + }); +}, 30000); diff --git a/examples/integration-scripts/utils/multisig-utils.ts b/examples/integration-scripts/utils/multisig-utils.ts new file mode 100644 index 00000000..417dedab --- /dev/null +++ b/examples/integration-scripts/utils/multisig-utils.ts @@ -0,0 +1,127 @@ +import { Algos, Siger, SignifyClient, d, messagize } from 'signify-ts'; + +export interface AcceptMultisigInceptArgs { + groupName: string; + localMemberName: string; + msgSaid: string; +} + +export async function acceptMultisigIncept( + client2: SignifyClient, + { groupName, localMemberName, msgSaid }: AcceptMultisigInceptArgs +) { + const memberHab = await client2.identifiers().get(localMemberName); + + const res = await client2.groups().getRequest(msgSaid); + const exn = res[0].exn; + const icp = exn.e.icp; + const smids = exn.a.smids; + const rmids = exn.a.rmids; + const states = await getStates(client2, smids); + const rstates = await getStates(client2, rmids); + + const icpResult2 = await client2.identifiers().create(groupName, { + algo: Algos.group, + mhab: memberHab, + isith: icp.kt, + nsith: icp.nt, + toad: parseInt(icp.bt), + wits: icp.b, + states: states, + rstates: rstates, + delpre: icp.di, + }); + const op2 = await icpResult2.op(); + const serder = icpResult2.serder; + const sigs = icpResult2.sigs; + const sigers = sigs.map((sig) => new Siger({ qb64: sig })); + + const ims = d(messagize(serder, sigers)); + const atc = ims.substring(serder.size); + const embeds = { + icp: [serder, atc], + }; + + const recipients = smids.filter((id: string) => memberHab.prefix !== id); + + await client2 + .exchanges() + .send( + localMemberName, + 'multisig', + memberHab, + '/multisig/icp', + { gid: serder.pre, smids: smids, rmids: smids }, + embeds, + recipients + ); + + return op2; +} + +export interface StartMultisigInceptArgs { + groupName: string; + localMemberName: string; + participants: string[]; + isith?: number | string | string[]; + nsith?: number | string | string[]; + toad?: number; + wits?: string[]; + delpre?: string; +} + +export async function startMultisigIncept( + client: SignifyClient, + { + groupName, + localMemberName, + participants, + ...args + }: StartMultisigInceptArgs +) { + const aid1 = await client.identifiers().get(localMemberName); + const participantStates = await getStates(client, participants); + const icpResult1 = await client.identifiers().create(groupName, { + algo: Algos.group, + mhab: aid1, + isith: args.isith, + nsith: args.nsith, + toad: args.toad, + wits: args.wits, + delpre: args.delpre, + states: participantStates, + rstates: participantStates, + }); + const op1 = await icpResult1.op(); + const serder = icpResult1.serder; + + const sigs = icpResult1.sigs; + const sigers = sigs.map((sig) => new Siger({ qb64: sig })); + const ims = d(messagize(serder, sigers)); + const atc = ims.substring(serder.size); + const embeds = { + icp: [serder, atc], + }; + + const smids = participantStates.map((state) => state['i']); + + await client + .exchanges() + .send( + 'member1', + 'multisig', + aid1, + '/multisig/icp', + { gid: serder.pre, smids: smids, rmids: smids }, + embeds, + participants + ); + return op1; +} + +async function getStates(client: SignifyClient, prefixes: string[]) { + const participantStates = await Promise.all( + prefixes.map((p) => client.keyStates().get(p)) + ); + return participantStates.map((s) => s[0]); +} From 972d509a0b5977b04ec10a95c25212ef439fa292 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Tue, 13 Feb 2024 13:20:23 -0800 Subject: [PATCH 186/186] Update version for next release 0.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d993802f..f43dea07 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.1", + "version": "0.2.0", "license": "Apache-2.0", "exports": { ".": {